CefSharp.js调用C#方法的详细实现
背景介绍
CefSharp是一个基于Chromium Embedded Framework(CEF)的.NET封装库,它允许开发者在WinForms或WPF应用程序中嵌入Chromium浏览器,通过CefSharp,可以实现C#与JavaScript之间的相互调用,从而实现更复杂的交互逻辑。
实现步骤与代码示例
1. 准备工作
需要安装CefSharp.WinForms包,可以通过NuGet包管理器进行安装:
Install-Package CefSharp.WinForms
确保项目中引用了必要的命名空间:
using CefSharp; using CefSharp.WinForms; using System; using System.Windows.Forms;
2. 创建WinForms窗体并嵌入ChromiumWebBrowser
创建一个WinForms窗体,并在其中嵌入ChromiumWebBrowser控件:
public partial class MainForm : Form { private ChromiumWebBrowser _browser; public MainForm() { InitializeComponent(); CefSettings settings = new CefSettings(); Cef.Initialize(settings); string url = "file://" + Directory.GetCurrentDirectory() + @"index.html"; _browser = new ChromiumWebBrowser(url) { Dock = DockStyle.Fill, }; this.Controls.Add(_browser); // 注册JS对象以供前端调用 RegisterJsObject(); } private void RegisterJsObject() { CefSharpSettings.LegacyJavascriptBindingEnabled = true; CefSharpSettings.WcfEnabled = true; var callbackObjectForJs = new CallbackObjectForJs(); _browser.JavascriptObjectRepository.Register("callbackObj", callbackObjectForJs, isAsync: false, options: BindingOptions.DefaultBinder); } }
3. 创建回调类
定义一个回调类,该类的方法可以在JavaScript中被调用:
[ComVisible(true)] public class CallbackObjectForJs { public void Test() { Thread th = new Thread(() => { MessageBox.Show("Test"); }); th.SetApartmentState(ApartmentState.STA); th.Start(); } }
4. 编写HTML和JavaScript代码
创建一个简单的HTML文件(例如index.html
),并在其中编写调用C#方法的JavaScript代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <button id="btnTest" onclick="btnTest()">测试</button> <script type="text/javascript"> function btnTest() { // 绑定JS对象 CefSharp.BindObjectAsync('callbackObj'); // 调用C#方法 callbackObj.test(); // 注意C#中的类的方法名首字母会变小写 } </script> </body> </html>
5. 运行程序
编译并运行程序,点击“测试”按钮时,会弹出一个消息框显示“Test”。
通过上述步骤,我们实现了在CefSharp环境下,JavaScript调用C#方法的功能,关键在于正确配置CefSharpSettings、注册JS对象以及编写相应的回调类,还需注意JavaScript调用C#方法时,方法名的首字母会被小写处理。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1386645.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复