WebView2 応用テクニック
jQueryを使ってDOM操作を行う
WebView2コントロールでのDOM操作はJavaScriptを使いますので、jQueryを使えばもっと楽に様々な操作が行えます。
操作するWebページにjQueryが読み込まれている必要がありますが、読み込まれていなければ動的に読み込ませることができます。
サンプル
DOM操作をJavaScriptで記述した場合と、jQueryで記述した場合の比較が以下になります。
Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'JavaScriptの外部ファイルを動的に読み込み
Dim js As New System.Text.StringBuilder()
js.AppendLine("var sc = document.createElement('script');")
js.AppendLine("sc.src = 'https://code.jquery.com/jquery-3.4.1.min.js';")
js.AppendLine("document.body.appendChild(sc);")
Await webView2.ExecuteScriptAsync(js.ToString())
End Sub
Private Async Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'idを指定してアクセス
'Await webView2.ExecuteScriptAsync("document.getElementById('inputid1').value = 'テキスト1';")
Await webView2.ExecuteScriptAsync("$('#inputid1').val('テキスト1');")
'name属性を指定してアクセス
'Await webView2.ExecuteScriptAsync("document.getElementsByName('inputname')(1).value = 'テキスト2';")
Await webView2.ExecuteScriptAsync("$('[name=inputname]').eq(1).val('テキスト2');")
'class属性を指定してアクセス
'Await webView2.ExecuteScriptAsync("document.getElementsByClassName('inputclass')(2).value = 'テキスト3';")
Await webView2.ExecuteScriptAsync("$('.inputclass').eq(2).val('テキスト3');")
'タグを指定してアクセス
'Await webView2.ExecuteScriptAsync("document.getElementsByTagName('input')(3).value = 'password';")
Await webView2.ExecuteScriptAsync("$('input').eq(3).val('password');")
End Sub
private async void button1_Click(object sender, EventArgs e)
{
//JavaScriptの外部ファイルを動的に読み込み
var js = new StringBuilder();
js.AppendLine("var sc = document.createElement('script');");
js.AppendLine("sc.src = 'https://code.jquery.com/jquery-3.4.1.min.js';");
js.AppendLine("document.body.appendChild(sc);");
await webView2.ExecuteScriptAsync(js.ToString());
}
private async void button2_Click(object sender, EventArgs e)
{
//idを指定してアクセス
//await webView2.ExecuteScriptAsync("document.getElementById('inputid1').value = 'テキスト1';");
await webView2.ExecuteScriptAsync("$('#inputid1').val('テキスト1');");
//name属性を指定してアクセス
//await webView2.ExecuteScriptAsync("document.getElementsByName('inputname')[1].value = 'テキスト2';");
await webView2.ExecuteScriptAsync("$('[name=inputname]').eq(1).val('テキスト2');");
//class属性を指定してアクセス
//await webView2.ExecuteScriptAsync("document.getElementsByClassName('inputclass')[2].value = 'テキスト3';");
await webView2.ExecuteScriptAsync("$('.inputclass').eq(2).val('テキスト3');");
//タグを指定してアクセス
//await webView2.ExecuteScriptAsync("document.getElementsByTagName('input')[3].value = 'password';");
await webView2.ExecuteScriptAsync("$('input').eq(3).val('password');");
}
参考
