Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Membetulkan Ralat \'Konteks Sambungan Tidak Sah\' Disebabkan oleh Skrip Kandungan Yatim dalam Sambungan Chrome?
Memuat semula sambungan Chrome secara tidak sengaja, terutamanya dalam mod pembangun, boleh mencipta kandungan yatim skrip. Skrip ini kekal berjalan di latar belakang tetapi kehilangan komunikasi dengan pelanjutan yang lain, mengakibatkan ralat seperti "konteks sambungan tidak sah" dan "masa jalan yang tidak ditanda.lastError".
Yang yatim piatu. skrip kandungan masih boleh menerima mesej DOM. Untuk mengalih keluarnya:
1. Hantar Mesej daripada Skrip Kandungan Baharu:
2. Nyahdaftar Pendengar dalam Skrip Orphaned:
3. Skrip Latar Belakang:
4. Skrip Kandungan:
5. Skrip Pop Timbul:
Contoh Kod:
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>
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat \'Konteks Sambungan Tidak Sah\' Disebabkan oleh Skrip Kandungan Yatim dalam Sambungan Chrome?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!