Maison > interface Web > js tutoriel > Comment éviter les erreurs « Unchecked runtime.lastError : The Message Port Closed… » dans les extensions Chrome ?

Comment éviter les erreurs « Unchecked runtime.lastError : The Message Port Closed… » dans les extensions Chrome ?

Barbara Streisand
Libérer: 2024-11-01 14:37:02
original
742 Les gens l'ont consulté

How to Prevent

Dévoilement du coupable : scripts orphelins et mises à jour d'extensions

Après avoir accidentellement rechargé une extension Chrome, vous pourriez rencontrer une erreur embêtante : "Exécution non vérifiée .lastError : le port de message s'est fermé avant qu'une réponse ne soit reçue." Cette erreur provient de la création de scripts orphelins, qui interrompent la communication entre la popup et les pages de contenu.

Comprendre le concept de script orphelin

Un script orphelin est un vestige fantomatique d'une extension précédemment chargée qui continue à persister même après que l'extension a été mise à jour ou rechargée. Ce script fantôme intercepte les messages destinés au nouveau script de contenu, entraînant des interruptions de communication.

Éradiquer les scripts orphelins

Pour bannir ce script spectral, il faut d'abord vérifier s'il est toujours réactif. Si c'est le cas, nous pouvons envoyer un message depuis le nouveau script de contenu via l'objet window. À la réception de ce message, le script orphelin doit désenregistrer tous les écouteurs d'événements et préparer le garbage collection.

Réapprovisionnement des scripts de contenu lors du rechargement

Pour éviter que ce problème ne se reproduise, nous peut vérifier la présence d'un script de contenu utilisable avant d'envoyer des messages depuis la page contextuelle. S'il n'en existe pas, nous pouvons réinjecter le script de contenu.

Exemple de code pour le script de contenu

Pour implémenter la solution susmentionnée, incorporez ce script content.js modifié :

<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>
Copier après la connexion

Vérification de la page popup

Pour garantir qu'un script de contenu est injecté avant la transmission du message, améliorez le script popup.js avec cet extrait :

<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>
Copier après la connexion

En mettant en œuvre ces mesures, vous pouvez exorciser les scripts orphelins et maintenir une communication transparente entre la fenêtre contextuelle de votre extension et les pages de contenu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal