WebView2コントロールによるブラウザ/HTMLイベント処理
プログラムでHTML要素のイベントを発生させてJavaScriptを実行する
HTML要素に定義されたイベントをプログラムにより発生させて、イベントに定義されているJavaScriptを実行します。
例えば、
<input type="button" onclick="alert('ボタン1を押下')" />
のようなHTMLであれば、プログラムでonclickイベントを発生させます。
また、SelectタグにおいてはプログラムでOptionを選択してもonchangeイベントが発生しませんので、
明示的にイベントを発行させる必要があります。
例えば下記のようなHTMLの場合、
<select id="selectbox" onChange="hoge();">
<option value="opt1">opt1</option>
<option value="opt2">opt2</option>
</select>
<option value="opt1">opt1</option>
<option value="opt2">opt2</option>
</select>
マウス操作で選択内容を変更すればonChangeイベントが発生してhogeメソッドが実行されますが、
プログラムで選択内容を変更しても発生しません。
以下のようにして明示的にイベントを実行させます。
WebView2コントロール使用時
WebView2コントロールではJavaScriptを使ってイベントを発生させます。
document.createEventメソッドでイベントオブジェクトを作成し、
event.initEventメソッドでイベントの初期化・設定を行い、
dispatchEventメソッドでイベントを発生させます。
'下記コードの動作確認はテストページ(https//web.biz-prog.net/test/testpage_jsevent.html)を使っています
'メソッドには「Async」をつけてください
'ボタンのクリックイベントを発生させる
Dim js As New System.Text.StringBuilder()
js.AppendLine("var evt = document.createEvent('HTMLEvents');")
js.AppendLine("evt.initEvent('click', false, true);")
js.AppendLine("document.getElementById('buttonid1').dispatchEvent(evt);")
Await webView2.ExecuteScriptAsync(js.ToString())
'セレクトボックスにoncahngeイベントを発生させる
js.Clear()
js.AppendLine("var evt = document.createEvent('HTMLEvents');")
js.AppendLine("evt.initEvent('change', false, true);")
js.AppendLine("document.getElementsByName('selectname')[0].dispatchEvent(evt);")
Await webView2.ExecuteScriptAsync(js.ToString())
//下記コードの動作確認はテストページ(https://web.biz-prog.net/test/testpage_jsevent.html)を使っています
//メソッドには「async」をつけてください。
//ボタンのクリックイベントを発生させる
System.Text.StringBuilder js = new System.Text.StringBuilder();
js.AppendLine("var evt = document.createEvent('HTMLEvents');");
js.AppendLine("evt.initEvent('click', false, true);");
js.AppendLine("document.getElementById('buttonid1').dispatchEvent(evt);");
await webView2.ExecuteScriptAsync(js.ToString());
//セレクトボックスにoncahngeイベントを発生させる
js.Clear();
js.AppendLine("var evt = document.createEvent('HTMLEvents');");
js.AppendLine("evt.initEvent('change', false, true);");
js.AppendLine("document.getElementsByName('selectname')[0].dispatchEvent(evt);");
await webView2.ExecuteScriptAsync(js.ToString());
