11

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

4

3 回答 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
  1. 通过 WebView webView = new WebView(url) 构造 WebView
  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代码:

<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 回答