あらかじめ日記

雑記とかブログで使えるスクリプトとかテクニックとか。その他、音楽やアニメ、漫画の話題とかも。

【C#】「WebView2」でJavaScriptが実行できなくなる? ExecuteScriptAsyncの注意点

以前より引き続いて、タイトルの備忘録。

allthewayfrom.hatenablog.com

 
ExecuteScriptAsyncAddScriptToExecuteOnDocumentCreatedAsyncを呼ぶと、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++) {" +
	"    " +
	"  }" +
	"}"
	);

 

最初、何が悪いのか分からず少し悩みましたが、メソッドの仕様を読んで恐らくで理解。

docs.microsoft.com

docs.microsoft.com

ExecuteScriptAsyncの方では、「Runs JavaScript」としかありませんが、AddScriptToExecuteOnDocumentCreatedAsyncには「The injected script」の記載があったのでどちらも同じ動き、つまり前回呼び出したscriptがページに残っておりletの変数宣言が重複してエラーになっていた、と言う理解です。

実際に、この処理をfunctionにして初回だけ呼び、繰り返し呼ばれるところではそのfunctionを呼び出すようにすれば、上手く動きました。


スポンサードリンク