C# CefSharp 新版本(83 以后版本) 如何在js中直接调用c#类

升级CefSharp至86.0.241版本后,无法直接用JS调用C#类。旧方法是通过Register注册并在JS中使用注册名调用。新版本要求在JS中先调用`window.external.bindObjectAsync`,然后在C#中将`BindObjectAsync`放入浏览器的`FrameLoadEnd`事件。这样调整后,JS仍能使用callbackObj进行回调。
摘要由CSDN通过智能技术生成

最近发现升级 CefSharp 到最新版本(86.0.241)后无法使用JS直接调用C#类了

以前使用的83.4.20版本,直接使用Register注册,就可以在JS中使用注册名 "callbackObj" 直接调用到注册的C#类

具体代码:

  private readonly ChromiumWebBrowser _browser;

  public MainForm()
        {
            InitializeComponent();
            _browser = new ChromiumWebBrowser(URL)
            {
                Dock = DockStyle.Fill,
            };
            this.Controls.Add(browser);

            CallbackObjectForJs callbackObjectForJs = new CallbackObjectForJs();
            
            CefSharpSettings.LegacyJavascriptBindingEnabled = true;
            CefSharpSettings.WcfEnabled = true;
            //注册
            _browser.JavascriptObjectRepository.Register("callbackObj", callbackObjectForJs, isAsync: false, options: BindingOptions.DefaultBinder);
           
            // 按F12显示调试工具
            _browser.KeyboardHandler = new CEFKeyBoardHan
C#通过CefSharp调用JavaScript编写的CEF接口,通常涉及以下几个步骤: 1. **包含依赖**: 首先,你需要在你的C#项目添加CefSharp的引用。如果你使用NuGet包管理器,可以搜索并安装`CefSharp.WinForms`或`CefSharp.Wpf`等适合你的窗体库版本。 2. **初始化CefShell**: 在启动浏览器或创建一个新的浏览器窗口时,需要初始化CefSharp,并设置其JavaScript执行上下文。例如: ```csharp var settings = new CefSettings(); using (var browser = new ChromiumWebBrowser("https://www.example.com", settings, new BrowserControl()) { // 添加JavaScript绑定 browser.JavascriptObjectRepository.Add(new MyJavascriptObject()); } ``` 这里`MyJavascriptObject`是一个自定义的JavaScript对象,用于暴露给JavaScript访问。 3. **定义JavaScript接口**: 在C#,你可以定义一个`IJavascriptObject`型的接口或,并将其添加到JavaScriptObjectRepository。然后,在JavaScript,你可以像操作普通对象一样调用这个接口的方法。 ```csharp public class MyJavascriptObject : IJavascriptObject { [沟通过] public void DoSomethingInJS(string param) { // JavaScript代码将在这里运行 ExecuteJavaScript($"yourFunction('{param}');"); } [沟通过] public object ExecuteJavaScript(string jsCode) { return CefExecuteScript(browser, jsCode); } } ``` 4. **在JavaScript调用C#**: 在JavaScript,你可以使用特定的方式(如`window.myCefObject`)来访问这个接口,然后调用相应的方法。 ```javascript window.myCefObject.DoSomethingInJS('parameter'); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值