【C#】「WebView2」でJavaScriptが実行できなくなる? ExecuteScriptAsyncの注意点
以前より引き続いて、タイトルの備忘録。
ExecuteScriptAsyncやAddScriptToExecuteOnDocumentCreatedAsyncを呼ぶと、WebView2で表示しているWebページに対してC#側のソースで書いたJavaScriptを実行することができます。 この時、2回呼び出すと実行しても何も起こらない、、と言う現象。
例えばこう言うコードはOKですが、
var name = webView.ExecuteScriptAsync("document.getElementById('id').name;");
こう言うコードがNG。
await webView.ExecuteScriptAsync(
"let inputs = document.getElementsByTagName('input');" +
"for (let i = 0; i < inputs.length; i++) {" +
" " +
" }" +
"}"
);
最初、何が悪いのか分からず少し悩みましたが、メソッドの仕様を読んで恐らくで理解。
ExecuteScriptAsyncの方では、「Runs JavaScript」としかありませんが、AddScriptToExecuteOnDocumentCreatedAsyncには「The injected script」の記載があったのでどちらも同じ動き、つまり前回呼び出したscriptがページに残っておりletの変数宣言が重複してエラーになっていた、と言う理解です。
実際に、この処理をfunctionにして初回だけ呼び、繰り返し呼ばれるところではそのfunctionを呼び出すようにすれば、上手く動きました。
スポンサードリンク