WebView2 応用テクニック
JavaScriptから.NETのオブジェクトを使用する
WebView2で表示しているページ内のJavaScriptから、.NETのオブジェクトを使用できます。
メソッドを実行したり、プロパティに設定・参照など行えます。
JavaScriptから.NETのクラスにアクセスする為に、.NETのクラスに公開用の属性定義を追加します。
//C#
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class JsCall
{
・・・
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class JsCall
{
・・・
webView2.CoreWebView2.AddHostObjectToScriptで、公開設定した.NETのクラスのオブジェクトをJavaScript側に登録します。
これでスクリプト側からアクセスできるようになります。
//C#
//第一引数は、JavaScriptからアクセスするときに使用する名称
//第二引数は、公開設定したクラスのオブジェクト
webView2.CoreWebView2.AddHostObjectToScript("jscall", new JsCall());
//第一引数は、JavaScriptからアクセスするときに使用する名称
//第二引数は、公開設定したクラスのオブジェクト
webView2.CoreWebView2.AddHostObjectToScript("jscall", new JsCall());
html側には、JavaScriptで呼び出し用のコードを記述します。
//JavaScript
//書式:chrome.webview.hostObjects.登録したオブジェクト名;
//メソッドの実行
chrome.webview.hostObjects.jscall.ShowMessage('call .net object test');
//オブジェクトの取得
const jscall = chrome.webview.hostObjects.jscall;
//プロパティアクセス
jscall[100] = 'indexer 100';
alert(await jscall[100]);
//書式:chrome.webview.hostObjects.登録したオブジェクト名;
//メソッドの実行
chrome.webview.hostObjects.jscall.ShowMessage('call .net object test');
//オブジェクトの取得
const jscall = chrome.webview.hostObjects.jscall;
//プロパティアクセス
jscall[100] = 'indexer 100';
alert(await jscall[100]);
プロパティやメソッドの戻り値を参照する場合は非同期(async/await)で実行する必要があります。
async function callProp() {
alert(await chrome.webview.hostObjects.jscall.Prop);
}
alert(await chrome.webview.hostObjects.jscall.Prop);
}
サンプル