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

时间:2014-05-02 09:39:21

标签: javascript c# cefsharp

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

3 个答案:

答案 0 :(得分:16)

  1. 通过WebView构建WebView webView = new WebView(url)
  2. 然后,您可以调用RegisterJsObject方法来注册js对象。
  3. 使用javascript调用此js对象。
  4. 示例如下:

    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 #2246How do you expose a .NET class to JavaScript?

Legacy Binding

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

在注册第一个对象(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 #2246How 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);}