我刚刚学习 C# WPF 并已成功实现 CefSharp,如何从 CefSharp 中加载的 javascript 调用 .NET 函数?
最佳答案
由于从 63.0.0
开始的 Chromium
更改,Javascript 绑定(bind)
发生了重大更改。遗留行为仍然适用于单页应用程序
,并且只使用一个域。
新绑定(bind)方式
新的绑定(bind)方法有很多优点:
- 按名称绑定(bind)和取消绑定(bind)对象
- 将对象的子集绑定(bind)到不同的页面(包括弹出窗口)
- 删除/解绑一个方法
- 动态解析绑定(bind)对象
简单的例子:
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和 How do you expose a .NET class to JavaScript?
遗留绑定(bind)
如果您执行跨站点导航,您将无法再使用此方法绑定(bind)对象。
在注册第一个对象 (RegisterAsyncJsObject
) 之前,您需要设置 CefSharpSettings.LegacyJavascriptBindingEnabled = true
。
简单的例子:
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和 How do you expose a .NET class to JavaScript?
关于javascript - 从 CefSharp 1 中的 javascript 调用 .Net - wpf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23425059/