Closed k08045kk closed 8 months ago
タイムアウト(150ms)を設定することで暫定対応とする。
(150ms に特に意味はない。人間が認識できるかできないかの瀬戸際で、最低限の処理時間を考慮した結果)
エラー時は、 ${pageError}
にエラー内容を合わせて出力する。
${pagePrompt}
には、タイムアウトを設定しません。
${pagePrompt}
は、メインフレームで動作しますが問題を起こす可能性があります。
オプションも追加する。無効時は、メインフレーム以外の選択文字列の取得ができなくなる。 [Enable content script for all frames 🧪]
事前に問題を検出することは難しい?
const frames = await chrome.webNavigation.getAllFrames({tabId:tab.id});
console.log(frames);
で事前に <iframe loading="lazy">
を取得できない。存在しないことになっている。
[...document.querySelectorAll("frame,iframe")]
.map(frame => frame.contentWindow.document || frame.contentDocument)
.map(doc => doc.URL)
だと CORS エラーが発生することがある。
次のコードで本件を回避できる。
chrome.scripting.executeScript({target:{allFrames:true}, injectImmediately:true})
iframe で document_idle まで待機してスクリプトを挿入していた。 iframe で document_start? でスクリプトを挿入することで対応する。
[Enable content script for active tab] を有効にすると特定のサイトで処理が停止する。 選択文字列なしで再現する。
await
がいつまでたっても戻ってこない。<iframe class="sample-code-frame" title="insertText の使用" id="frame_using_inserttext" width="100" height="300" src="https://live.mdnplay.dev/ja/docs/Web/API/Document/execCommand/runner.html?id=using_inserttext" loading="lazy"></iframe>
<iframe loading="lazy">
が原因だと考える