Chrome 拡張機能、特に開発者モードの拡張機能を意図せずリロードすると、孤立したコンテンツが作成される可能性がありますスクリプト。これらのスクリプトはバックグラウンドで実行されたままですが、残りの拡張機能との通信が失われ、「拡張コンテキストが無効になりました」や「unchecked runtime.lastError」などのエラーが発生します。
孤立コンテンツ スクリプトは引き続き DOM メッセージを受信できます。削除するには:
1.新しいコンテンツ スクリプトからメッセージを送信:
2.孤立したスクリプトのリスナーの登録を解除します:
3.バックグラウンド スクリプト:
4.コンテンツ スクリプト:
5.ポップアップ スクリプト:
コード例:
background.js:
<code class="javascript">// Re-inject content script chrome.runtime.onInstalled.addListener(() => { chrome.tabs.query({ active: true, currentWindow: true }, tabs => { chrome.tabs.executeScript(tabs[0].id, { file: 'content.js' }); }); });</code>
content.js:
<code class="javascript">// Orphaned script detection and cleanup var orphanMessageId = chrome.runtime.id + 'orphanCheck'; window.dispatchEvent(new Event(orphanMessageId)); window.addEventListener(orphanMessageId, unregisterOrphan); // Register named listeners chrome.runtime.onMessage.addListener(onMessage); document.addEventListener('mousemove', onMouseMove); // Orphan flag and cleanup function window.running = true; function unregisterOrphan() { if (chrome.runtime.id) { // Not orphaned return; } window.removeEventListener(orphanMessageId, unregisterOrphan); document.removeEventListener('mousemove', onMouseMove); try { chrome.runtime.onMessage.removeListener(onMessage); } catch (e) {} return true; }</code>
popup.js:
<code class="javascript">async function sendMessage(data) { const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); if (await ensureContentScript(tab.id)) { return await chrome.tabs.sendMessage(tab.id, data); } } async function ensureContentScript(tabId) { try { const [{ result }] = await chrome.scripting.executeScript({ target: { tabId }, func: () => window.running === true, }); if (!result) { await chrome.scripting.executeScript({ target: { tabId }, files: ['content.js'], }); } return true; } catch (e) {} }</code>
以上がChrome 拡張機能の孤立したコンテンツ スクリプトによって引き起こされる「拡張コンテキストが無効です」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。