Heim  >  Artikel  >  Web-Frontend  >  Wie entferne ich verwaistes Skript nach dem Update der Chrome-Erweiterung?

Wie entferne ich verwaistes Skript nach dem Update der Chrome-Erweiterung?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-02 04:53:02418Durchsuche

How to Remove Orphaned Script After Chrome Extension Update?

So entfernen Sie verwaistes Skript nach dem Update der Chrome-Erweiterung

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:

  1. Senden Sie mithilfe von Windows eine Nachricht vom neuen, funktionierenden Inhaltsskript an das verwaiste Skript.
  2. Nach Erhalt der Nachricht sollte das verwaiste Skript die Registrierung aller Listener und globalen Variablen aufheben. Dadurch wird es für die Speicherbereinigung geeignet.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn