我刚学习C#WPF并且已经成功实现了CefSharp,如何从javascript中调用.NET函数,这是在CefSharp中加载的?
答案 0 :(得分:16)
示例如下:
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方法的上方
答案 1 :(得分:15)
由于从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和How do you expose a .NET class to 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和How do you expose a .NET class to JavaScript?
答案 2 :(得分: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);}