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

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

  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()); 

前端的javascript代码:

  

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

由于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); 

  

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

遗产绑定

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

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

简单的例子:

 public class BoundObject { public void showMessage(string msg) { MessageBox.Show(msg); } } CefSharpSettings.LegacyJavascriptBindingEnabled = true; browser.RegisterAsyncJsObject("boundAsync", new BoundAsyncObject()); 

  

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

首先在C#中创建一个公共类,如下所示:

 public class cShaarp_Js { public void calledFromJs(Object object){} } 

然后你应该将这个类注册到chromeBrowser。

 chromeBrowser = new ChromiumWebBrowser("file:///C:/sample.html"); chromeBrowser.RegisterJsObject("csharp", new cShaarp_Js); 

现在我们完成了C#。 另一方面,你可以在javascript上创建一个回调函数,如下所示:

 function cSharpMetodCall(){csharp.calledFromJs(object);}