WebBrower(.NET) 応用テクニック
JavaScriptからC#/VBのメソッドを実行する
WebBrowserで表示しているページ内のJavaScriptから、C#/VBのメソッドを実行します。
JavaScriptから呼び出されるメソッドを含むクラスに「<System.Runtime.InteropServices.ComVisible(True)>」属性を付与します。
//C#
[System.Runtime.InteropServices.ComVisible(true)]
public class JsTest
{
・・・
[System.Runtime.InteropServices.ComVisible(true)]
public class JsTest
{
・・・
WebBrowser.ObjectForScriptingに上記クラスのオブジェクトを設定します。これでスクリプトからアクセスできるようになります。
//C#
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.ObjectForScripting = new JsTest();
}
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.ScriptErrorsSuppressed = true;
webBrowser1.ObjectForScripting = new JsTest();
}
もしFormクラスの中にWebBrowserオブジェクトと呼び出しメソッドを定義している場合、FormクラスにComVisible属性を付与して、ObjectForScriptingには自身のFormオブジェクトを設定しましょう。
webBrowser1.ObjectForScripting = this;
html側には、JavaScriptで呼び出し用のコードを記述します。
//JavaScript
window.external.メソッド名();
これでC#/VB側のメソッドが実行されます。引数も指定できます。
window.external.メソッド名();
//JavaScript
window.external.メソッド名('引数1','引数2');
window.external.メソッド名('引数1','引数2');
サンプル
実行してボタンを押すとテスト用ページ(https://web.biz-prog.net/test/testpage_wbevent.html)が表示されますので、 ページの中のボタンを押してください。C#/VBのメソッドが実行されます。
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load webBrowser1.ScriptErrorsSuppressed = True webBrowser1.ObjectForScripting = New JsTest() End Sub Private Sub btnOpen_Click(sender As Object, e As EventArgs) Handles btnOpen.Click webBrowser1.Navigate("https://web.biz-prog.net/test/testpage_wbevent.html") End Sub End Class <System.Runtime.InteropServices.ComVisible(True)> Public Class JsTest Public Sub JsTest1() MsgBox("Test1") End Sub Public Sub JsTest2(a As String, b As String) MsgBox("Test2:a=" & a & ",b=" & b) End Sub End Class
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { webBrowser1.ScriptErrorsSuppressed = true; webBrowser1.ObjectForScripting = new JsTest(); } private void btnOpen_Click(object sender, EventArgs e) { webBrowser1.Navigate("https://web.biz-prog.net/test/testpage_wbevent.html"); } } [System.Runtime.InteropServices.ComVisible(true)] public class JsTest { public void JsTest1() { MessageBox.Show("Test1"); } public void JsTest2(string a, string b) { MessageBox.Show("Test2:a=" + a + ",b=" + b); } }