我刚刚学习 C# WPF 并已成功实现 CefSharp,如何从 CefSharp 中加载的 javascript 调用 .NET 函数?
问问题
28216 次
3 回答
23
因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);
<script type="text/javascript">
(async function() {
await CefSharp.BindObjectAsync("boundAsync", "bound");
boundAsync.showMessage('Message from JS');
})();
</script>
有关更多详细信息,请访问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());
<script type="text/javascript">
boundAsync.showMessage('Message from JS');
</script>
有关更多详细信息,请访问Javascript Binding v2 #2246以及如何将 .NET 类公开给 JavaScript?
于 2018-02-19T20:12:08.567 回答
17
- 通过 WebView webView = new WebView(url) 构造 WebView
- 然后可以调用 RegisterJsObject 方法注册一个 js 对象。
- 使用 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代码:
<script type="text/javascript">
callbackObj.showMessage('message from js');
</script >
注意:CallbackObjectForJs 的 showMessage 方法的第一个字符不能是大写
于 2014-05-02T09:46:24.227 回答
0
首先在 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);}
于 2017-12-03T12:07:10.003 回答