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