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);
}
}
