web-dev-qa-db-ja.com

CefSharp1のjavascriptから.Netを呼び出す--wpf

私はC#WPFを学んでいて、CefSharpが正常に実装されています。これは、CefSharpにロードされているjavascriptから.NET関数を呼び出す方法ですか?

11
user3595714
  1. WebViewを介してWebViewを構築しますwebView = new WebView(url)
  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メソッドの上に置くことはできません

18
Weimin Ye

63.0.0で始まるChromiumの変更により、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にどのように公開しますか? をご覧ください。

レガシーバインディング

クロスサイトナビゲーションを実行すると、このメソッドを使用してオブジェクトをバインドできなくなります。

最初のオブジェクト(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 および 。NETクラスをJavaScriptにどのように公開しますか? をご覧ください。

20
Oleg Markelov

まず、以下のように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);}
0