从CefSharp 1中的javascript调用.Net - wpf

use*_*714 11 javascript c# cefsharp

我刚学习C#WPF并且已经成功实现了CefSharp,如何从javascript中调用.NET函数,这是在CefSharp中加载的?

Ole*_*lov 19

由于Chromium变化开始63.0.0有重大变化Javascript Binding.遗留行为仍适用于Single Page Applications且仅使用单个域的情况.

新的绑定方法

新的绑定方法有许多优点:

  • 按名称绑定和取消绑定对象
  • 将对象的子集绑定到不同的页面(包括弹出窗口)
  • 删除/取消绑定方法
  • 动态解析绑定对象

简单的例子:

public class BoundObject {
    public void showMessage(string msg) {
        MessageBox.Show(msg);
    }
}

browser.JavascriptObjectRepository.Register("boundAsync", new BoundObject(), true);
Run Code Online (Sandbox Code Playgroud)
<script type="text/javascript">
    (async function() {
        await CefSharp.BindObjectAsync("boundAsync", "bound");

        boundAsync.showMessage('Message from JS');
    })();
</script>
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请访问Javascript Binding v2#2246以及如何将.NET类暴露给JavaScript?

遗产绑定

如果您执行跨站点导航,则将无法再使用此方法绑定对象.

您需要CefSharpSettings.LegacyJavascriptBindingEnabled = true在注册第一个对象(RegisterAsyncJsObject)之前进行设置.

简单的例子:

public class BoundObject {
    public void showMessage(string msg) {
        MessageBox.Show(msg);
    }
}

CefSharpSettings.LegacyJavascriptBindingEnabled = true;
browser.RegisterAsyncJsObject("boundAsync", new BoundAsyncObject());
Run Code Online (Sandbox Code Playgroud)
<script type="text/javascript">
    boundAsync.showMessage('Message from JS');
</script>
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请访问Javascript Binding v2#2246以及如何将.NET类暴露给JavaScript?

  • "新绑定方法"部分的真棒答案.简单,晶莹剔透,像魅力一样:) (2认同)

Wei*_* Ye 18

  1. 通过WebView构建WebView webView = new WebView(url)
  2. 然后,您可以调用RegisterJsObject方法来注册js对象.
  3. 使用javascript调用此js对象.

示例如下:

public class CallbackObjectForJs{
    public void showMessage(string msg){//Read Note
        MessageBox.Show(msg);
    }
}

WebView webView = new WebView("http://localhost:8080");
webView.RegisterJsObject("callbackObj", new CallbackObjectForJs());
Run Code Online (Sandbox Code Playgroud)

前端的javascript代码:

<script type="text/javascript">
    callbackObj.showMessage('message from js');
</script >
Run Code Online (Sandbox Code Playgroud)

注意:第一个字符不能位于CallbackObjectForJs的showMessage方法的上方

  • @CaptainBli它现在看起来已经被移动到`Cef.RegisterJsObject`了 (2认同)