ブラウザの特殊な操作 各ブラウザ共通
プログラムでHTML要素のイベントを発生させてJavaScriptを実行する
HTML要素に定義されたイベントをプログラムにより発生させて、イベントに定義されているJavaScriptを実行します。
例えば、
のようなHTMLであれば、プログラムでonclickイベントを発生させます。
また、SelectタグにおいてはプログラムでOptionを選択してもonchangeイベントが発生しませんので、
明示的にイベントを発行させる必要があります。
例えば下記のようなHTMLの場合、
<option value="opt1">opt1</option>
<option value="opt2">opt2</option>
</select>
マウス操作で選択内容を変更すればonChangeイベントが発生してhogeメソッドが実行されますが、
プログラムで選択内容を変更しても発生しません。
以下のようにして明示的にイベントを実行させます。
InternetExplorer操作時
InternetExplorer操作でイベントを発生させる方法は2つあります。
1つ目は、各要素のfireEventメソッドを実行する方法です。
引数としてイベント名称を文字列で指定して呼び出せば、そのイベントが発生します。
2つ目は、各要素のdispatchEventメソッドを実行する方法です。
createEventメソッドとinitEventメソッドによりイベントを定義してから、
dispatchEventメソッドでイベントが発生します。
fireEventメソッドの場合は、その要素の直接イベントが定義されないと呼び出せませんが、
dispatchEventメソッドを使う方法なら、外部のJavaScriptにイベントが定義されている場合でも
発生させることができます。
'下記コードの動作確認はテストページ(https//web.biz-prog.net/test/testpage_jsevent.html)を使っています 'ボタンのクリックイベントを発生させる objIE.Document.getElementById("buttonid1").fireEvent("onclick") 'ボタンのクリックイベントを発生させるその2 Dim evt = objIE.Document.createEvent("HTMLEvents") evt.initEvent("click", False, True) objIE.Document.getElementById("buttonid1").dispatchEvent(evt) 'イベントを発生させる 'セレクトボックスにoncahngeイベントを発生させる objIE.Document.getElementsByName("selectname")(0).fireEvent("onchange") 'セレクトボックスにoncahngeイベントを発生させる2 Dim evt2 = objIE.Document.createEvent("HTMLEvents") evt2.initEvent("change", False, True) objIE.Document.getElementsByName("selectname")(0).dispatchEvent(evt2) 'イベントを発生させる
//下記コードの動作確認はテストページ(https://web.biz-prog.net/test/testpage_jsevent.html)を使っています //ボタンのクリックイベントを発生させる objIE.Document.getElementById("buttonid1").fireEvent("onclick"); //ボタンのクリックイベントを発生させるその2 var evt = objIE.Document.createEvent("HTMLEvents"); evt.initEvent("click", false, true); objIE.Document.getElementById("buttonid1").dispatchEvent(evt); //イベントを発生させる //セレクトボックスにoncahngeイベントを発生させる objIE.Document.getElementsByName("selectname")(0).fireEvent("onchange"); //セレクトボックスにoncahngeイベントを発生させる2 var evt2 = objIE.Document.createEvent("HTMLEvents"); evt2.initEvent("change", false, true); objIE.Document.getElementsByName("selectname")(0).dispatchEvent(evt2); //イベントを発生させる
objIE.Document.GetElementsById("selectbox").fireEvent ("onchange")
参考
WebBrowserコントロール使用時
WebBrowserコントロールでイベントを発生させるにはRaiseEventメソッドを使います。
引数としてイベント名称を文字列で指定して呼び出せば、そのイベントが発生します。
'下記コードの動作確認はテストページ(https//web.biz-prog.net/test/testpage_jsevent.html)を使っています 'ボタンのクリックイベントを発生させる webBrowser1.Document.GetElementById("buttonid1").RaiseEvent("onclick") 'セレクトボックスにoncahngeイベントを発生させる webBrowser1.Document.All.GetElementsByName("selectname")(0).RaiseEvent("onchange")
//下記コードの動作確認はテストページ(https://web.biz-prog.net/test/testpage_jsevent.html)を使っています //ボタンのクリックイベントを発生させる webBrowser1.Document.GetElementById("buttonid1").RaiseEvent("onclick"); //セレクトボックスにoncahngeイベントを発生させる webBrowser1.Document.All.GetElementsByName("selectname")[0].RaiseEvent("onchange");
WebBrowser1.Document.GetElementsById("selectbox").fireEvent ("onchange")
参考
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());