Heim >Web-Frontend >js-Tutorial >Wie verhindert man „Unchecked runtime.lastError: The Message Port Closed...'-Fehler in Chrome-Erweiterungen?
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>
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>
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!