Heim > Web-Frontend > js-Tutorial > Hauptteil

Wie verhindert man „Unchecked runtime.lastError: The Message Port Closed...'-Fehler in Chrome-Erweiterungen?

Barbara Streisand
Freigeben: 2024-11-01 14:37:02
Original
667 Leute haben es durchsucht

How to Prevent

Enthüllung des Übeltäters: Verwaiste Skripte und Erweiterungsaktualisierungen

Nachdem Sie versehentlich eine Chrome-Erweiterung neu geladen haben, kann es zu einem lästigen Fehler kommen: „Ungeprüfte Laufzeit.“ .lastError: Der Nachrichtenport wurde geschlossen, bevor eine Antwort empfangen wurde.“ Dieser Fehler ist auf die Erstellung verwaister Skripte zurückzuführen, die die Kommunikation zwischen Popup- und Inhaltsseiten unterbrechen.

Das Konzept verwaister Skripte verstehen

Ein verwaistes Skript ist ein gespenstisches Überbleibsel einer zuvor geladenen Erweiterung, die auch dann bestehen bleibt, wenn die Erweiterung aktualisiert oder neu geladen wurde. Dieses Geisterskript fängt Nachrichten ab, die für das neue Inhaltsskript bestimmt sind, was zu Kommunikationsstörungen führt.

Beseitigung verwaister Skripte

Um dieses Spektralskript zu verbannen, müssen wir zunächst feststellen, ob es so ist immer noch ansprechbar. Wenn dies der Fall ist, können wir eine Nachricht vom neuen Inhaltsskript über das Fensterobjekt versenden. Nach Erhalt dieser Nachricht sollte das verwaiste Skript alle Ereignis-Listener abmelden und sich auf die Speicherbereinigung vorbereiten.

Inhaltsskripte beim Neuladen auffüllen

Um zu verhindern, dass dieses Problem erneut auftritt, haben wir kann prüfen, ob ein verwendbares Inhaltsskript vorhanden ist, bevor Nachrichten von der Popup-Seite gesendet werden. Wenn keines vorhanden ist, können wir das Inhaltsskript erneut einfügen.

Beispielcode für Inhaltsskript

Um die oben genannte Lösung zu implementieren, integrieren Sie dieses geänderte content.js-Skript:

<code class="javascript">var orphanMessageId = chrome.runtime.id + 'orphanCheck';
window.dispatchEvent(new Event(orphanMessageId));
window.addEventListener(orphanMessageId, unregisterOrphan);

// ... (register named functions for event listeners)

window.running = true;

function unregisterOrphan() {
  // ... (deregister listeners and nullify variables)
}

function onMessage(msg, sender, sendResponse) {
  // ... (handle message)
}

function onMouseMove(event) {
  // ... (DOM event handler)
}</code>
Nach dem Login kopieren

Popup-Seitenüberprüfung

Um sicherzustellen, dass ein Inhaltsskript eingefügt wird Erweitern Sie vor der Nachrichtenübertragung das popup.js-Skript mit diesem Snippet:

<code class="javascript">async function sendMessage(data) {
  // ... (fetch active tab)
  if (await ensureContentScript(tab.id)) {
    return await chrome.tabs.sendMessage(tab.id, data);
  }
}

async function ensureContentScript(tabId) {
  // ... (check for existing content script)
  if (!result) {
    await chrome.scripting.executeScript({
      // ... (inject content script)
    });
  }
  return true;
}</code>
Nach dem Login kopieren

Durch die Implementierung dieser Maßnahmen können Sie verwaiste Skripte austreiben und eine nahtlose Kommunikation zwischen den Popup- und Inhaltsseiten Ihrer Erweiterung aufrechterhalten.

Das obige ist der detaillierte Inhalt vonWie verhindert man „Unchecked runtime.lastError: The Message Port Closed...'-Fehler in Chrome-Erweiterungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!