Problem:
Wenn eine Chrome-Erweiterung neu geladen wird, verwaiste Inhalte Skripte können verbleiben, was zu Fehlern und Kommunikationsproblemen mit anderen Teilen der Erweiterung führt. Dieses Problem tritt auf, wenn das ursprüngliche Inhaltsskript über DOM-Ereignis-Listener verfügt, die seine automatische Entfernung verhindern.
Lösung:
So entfernen Sie das verwaiste Skript:
Codebeispiel:
background.js:
<code class="javascript">// Re-inject content scripts on reloading/installing the extension // (See example in link provided in QA)</code>
content.js:
<code class="javascript">// Generate a unique message ID for the orphan check const orphanMessageId = chrome.runtime.id + 'orphanCheck'; // Register a listener for the orphan check message window.addEventListener(orphanMessageId, unregisterOrphan); // ... (Continue with original content script code) ... // Function to unregister the orphaned script function unregisterOrphan() { // Check if the extension is uninstalled if (!chrome.runtime.id) { // The script is not orphaned return; } // Remove the orphan message listener window.removeEventListener(orphanMessageId, unregisterOrphan); // Remove DOM event listeners document.removeEventListener('mousemove', onMouseMove); // Remove runtime message listener (try-catch required in some cases) try { chrome.runtime.onMessage.removeListener(onMessage); } catch (e) {} }</code>
popup.js:
<code class="javascript">// Function to send a message and ensure a content script is injected before doing so 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); } } // Function to check if a content script is running and re-inject it if not async function ensureContentScript(tabId) { try { // Check if the content script is running const [{ result }] = await chrome.scripting.executeScript({ target: { tabId }, func: () => window.running === true, }); // If not, inject the content script if (!result) { await chrome.scripting.executeScript({ target: { tabId }, files: ['content.js'], }); } return true; } catch (e) {} }</code>
Mit diesem Ansatz wird das verwaiste Skript bereinigt und die Kommunikation mit dem Rest der Nebenstelle kann wiederhergestellt werden.
Das obige ist der detaillierte Inhalt vonWie entferne ich verwaistes Skript nach dem Update der Chrome-Erweiterung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!