188
votes

Comment résoudre le problème de chrome 'Unchecked runtime.lastError: Le port de message s'est fermé avant qu'une réponse ne soit reçue'?

J'utilise VueJS et Laravel pour mon projet. Ce problème a commencé à apparaître récemment et il apparaît même dans les anciennes branches git.

Cette erreur n'apparaît que dans le navigateur Chrome.


6 commentaires

Avez-vous un bloqueur de publicité?


Vérifiez ma réponse à cette autre demande: stackoverflow.com/questions/53919591/...


Merci les gars, le problème était l'extension "Video Downloader professional".


Pareil pour moi, Video Downloader professional produisait de telles erreurs


Voter pour fermer, car la solution acceptée est un problème de configuration et ne concerne pas la résolution / la compréhension de la cause du problème de programmation.


Pour moi, "Flareget Integration" provoquait l'erreur dans le navigateur Brave.


17 Réponses :


212
votes

J'ai désactivé toutes les extensions installées dans Chrome - cela fonctionne pour moi. J'ai maintenant une console claire sans erreurs.


28 commentaires

MeddleMonkey désactivé


J'ai eu ce problème, a été causé par l'extension Norton Safe Search


Dans mon cas, l'extension était Google Publisher Toolbar


J'avais l'extension "Video Speed Controller" dans un état cassé. Réparé, l'erreur a disparu.


Pour moi, c'était "Norton Safe Web".


Pour moi, c'était l'extension Kaspersky Protection. (on pourrait penser que les développeurs d'antivirus seraient un peu plus prudents pour s'assurer que leur logiciel est exempt de bogues!)


En quoi la désactivation de toutes les extensions est-elle une solution ... ou même une considération. Pour beaucoup d'entre nous, les extensions fournissent des fonctionnalités essentielles.


Pour moi, c'était l'extension Shortkeys (Custom Keyboard Shortcuts)


Pour mon cas, c'est une extension "Quelle police"


Spreed - Même problème


Pour moi, c'était "Color Contrast Analyzer".


Pour moi, désactivé uniquement "Adskill"


Pour moi, j'ai dû désactiver "Raccourcis clavier de recherche Google ™ - RESULTER"


La désactivation ou le basculement d'extensions qui écoutent les interactions du navigateur peut en être la cause, c'est-à-dire les enregistreurs Web, les assistants API (Amazon ..) et d'autres qui attendent constamment une interaction ...


L'extension React-Sight était le coupable pour moi


Mon cas était élégant


C'était "Screen Capture" par Google dans mon cas. Excellent outil en tout cas!


J'ai désactivé Norton Safe Search Extension et l'erreur a disparu.


cela cause à cause de l'extension Middlemonkey de ma fin. Je l'ai désactivé et ma console est entièrement ok sans erreur


Parfait. Je viens d'exécuter le code en mode navigation privée pour vérifier et cela a fonctionné.


Mon extension Chrome problématique: OurStickys - Sticky Notes sur chaque page


Désactivez "TamperMonkey" pour moi


Pour moi c'était 'Piggy'


désactiver l'extension "Wappalyzer" dans Chrome pour moi


Dans mon cas, c'était l'extension «AdGuard».


Wappalyzer pour moi aussi.


Pour moi, c'est "MeddleMonkey"


Pour moi "Augury"



46
votes

Si vous accédez à chrome: // extensions / , vous pouvez simplement basculer chaque extension une par une et voir laquelle déclenche réellement le problème.

Une fois que vous avez désactivé l'extension, actualisez la page où vous voyez l'erreur et faites bouger la souris ou cliquez sur. Les actions de la souris sont les choses qui génèrent des erreurs.

J'ai donc pu identifier l'extension qui causait réellement le problème et la désactiver.


4 commentaires

Dans mon cas, c'était l'extension 1password


dans mon cas, c'était un analyseur de contraste de couleur


Dans mon cas, c'était Google Publisher Toolbar sous Vivaldi vivaldi://extensions


Oui, désactivez les extensions une par une. J'ai compris qu'il y avait plusieurs extensions à l'origine de l'erreur! Merci



4
votes

Pour ceux qui viennent ici pour déboguer cette erreur dans Chrome 73, une possibilité est que Chrome 73 et les versions ultérieures interdisent les demandes d'origine croisée dans les scripts de contenu.

Plus de lecture:

  1. https://www.chromestatus.com/feature/5629709824032768
  2. https://www.chromium.org/Home/chromium-security/extension-content-script-fetches

Cela affecte de nombreux auteurs d'extensions Chrome, qui doivent maintenant se démener pour corriger les extensions, car Chrome pense que "Nos données montrent que la plupart des extensions ne seront pas affectées par ce changement."

(cela n'a rien à voir avec le code de votre application)

MISE À JOUR : J'ai résolu le problème des COR mais je vois toujours cette erreur. Je soupçonne que c'est la faute de Chrome ici.


0 commentaires

14
votes

J'ai répondu à ce sujet .

Dans mon cas, le problème était dû à Video Downloader professional et AdBlock

En bref, ce problème se produit en raison de certains plugins google chrome


0 commentaires

2
votes

Désactivez si une extension antivirus est installée sur le navigateur. Dans mon cas, l'extension anti-virus était le coupable.


0 commentaires

93
votes

Dans le cas où vous êtes un développeur d'extension qui a cherché votre chemin ici en essayant d'arrêter de provoquer cette erreur:

Le problème n'est pas CORB (comme une autre réponse l'indique ici) car les COR bloqués se manifestent sous forme d'avertissements tels que -

Le blocage de lecture d'origine croisée (CORB) a bloqué la réponse d'origine croisée https://www.example.com/example.html avec le type MIME text / html. Voir https://www.chromestatus.com/feature/5629709824032768 pour plus de détails.

Le problème est probablement une réponse asynchrone mal gérée à runtime.sendMessage. Comme le dit MDN :

Pour envoyer une réponse asynchrone, il existe deux options:

  • retourne true de l'écouteur d'événements. Cela maintient la fonction sendResponse valide après le retour de l'écouteur, afin que vous puissiez l'appeler plus tard.
  • renvoyer une promesse de l'écouteur d'événements, et résoudre lorsque vous avez la réponse (ou la rejeter en cas d'erreur).

Lorsque vous envoyez une réponse asynchrone mais que vous ne parvenez pas à utiliser l'un de ces mécanismes, l'argument sendResponse fourni à sendMessage sort de la portée et le résultat est exactement comme l'indique le message d'erreur: votre port de message (l'appareil de transmission de messages) est fermé avant le réponse a été reçue.

Les auteurs de Webextension-polyfill ont déjà écrit à ce sujet en juin 2018 .

Donc, en fin de compte, si vous voyez votre extension à l'origine de ces erreurs, inspectez attentivement tous vos écouteurs onMessage. Certains d'entre eux ont probablement besoin de commencer à renvoyer des promesses (les marquer comme asynchrones devrait suffire). [Merci @vdegenne]


4 commentaires

En async/await n'utilisez pas async/await pour votre rappel d'écoute en arrière-plan. C'est ce qui a échoué pour moi, j'ai supprimé async et transformé ma structure d' await en un code de structure then et maintenant cela fonctionne.


mais ... je n'essaye pas d'envoyer de réponse, et je n'en attend pas une!


Quelle bonne solution, merci! Tout ce que j'avais à faire est d'ajouter return true; au bas de ma fonction chrome.runtime.onMessage.addListener () et le problème a été résolu! J'utilise $.ajax dans cette fonction, c'est pourquoi j'ai besoin de ce correctif.


Merci @OfekShilon. C'était la solution parfaite. A fonctionné comme prévu.



0
votes

Pour moi, c'était Auto Tab Discard , qui jette cette erreur sur les onglets épinglés. J'ai créé un rapport de bogue, https://github.com/rNeomy/auto-tab-discard/issues/101 .


0 commentaires

1
votes

Dans mon cas, c'était un point d'arrêt défini dans ma propre source de page. Si j'ai supprimé ou désactivé le point d'arrêt, l'erreur disparaîtrait.

Le point d'arrêt était dans un morceau de code de rendu moyennement complexe. D'autres points d'arrêt dans différentes parties de la page n'ont pas eu un tel effet. Je n'ai pas pu élaborer un cas de test simple qui déclenche toujours cette erreur.


0 commentaires

8
votes

Si la raison de l'erreur est l'extension, utilisez incognito Ctrl + Shift + N. En mode de navigation privée, Chrome n'a pas d'extensions.

UPD. Si vous avez besoin d'une extension en mode navigation privée, par exemple ReduxDevTools ou tout autre, dans les paramètres d'extension, activez "Autoriser en mode navigation privée"


0 commentaires

23
votes

Le message est plutôt ancien et n'est pas étroitement lié au développement d'extensions Chrome, mais laissez-le être ici.

J'ai eu le même problème en répondant au message en rappel. La solution consiste à renvoyer true dans l'écouteur de message d'arrière-plan.

Voici un exemple simple de background.js . Il répond à tout message de popup.js.

{
  "name": "TestMessages",
  "version": "0.1.0",
  "manifest_version": 2,
  "browser_action": {
    "default_popup": "src/popup.html"
  },
  "background": {
    "scripts": ["src/background.js"],
    "persistent": false
  },
  "permissions": [
    "alarms"
  ]
}

Voici popup.js , qui envoie un message sur popup. Vous obtiendrez des exceptions jusqu'à ce que vous annuliez le commentaire de la ligne "return true" dans le fichier background.js .

document.addEventListener("DOMContentLoaded", () => {
    chrome.extension.sendMessage({action: "ping"}, function(resp) {
        console.log(JSON.stringify(resp));
    });
});

manifest.json , juste au cas où :) Faites attention à la section des autorisations d'alarme!

chrome.runtime.onMessage.addListener(function(rq, sender, sendResponse) {
    // setTimeout to simulate any callback (even from storage.sync)
    setTimeout(function() {
        sendResponse({status: true});
    }, 1);
    // return true;  // uncomment this line to fix error
});


3 commentaires

Cela a fonctionné pour moi! Quel scénario le return false par défaut return false serait utile?


Docs dit : This function becomes invalid when the event listener returns, unless you return true . Que signifie invalide? ne suppose-t-il pas qu'il soit créé à chaque fois qu'il reçoit un message de toute façon?


@EduardoReis, avec FALSE, il pourrait être utilisé comme indicateur pour notifier un événement.



0
votes

J'envoyais les données du journal de la console d'un onglet à un autre et je n'avais pas vraiment besoin de la première console. Cependant, le message d'erreur m'a dérangé, j'ai donc cliqué avec le bouton droit de la souris et sélectionné "ne pas afficher les messages du site Web x". C'est peut-être la solution la plus simple :)


0 commentaires

2
votes

Dans mon cas, c'était l'extension Chrome OneTab.


0 commentaires

2
votes

Assurez-vous que vous utilisez la syntaxe correcte.

Nous devrions utiliser la méthode sendMessage () après l'avoir écoutée.

Voici un exemple simple de contentScript.js. Il envoie une requête à app.js.

contentScript.js

chrome.extension.onRequest.addListener( function(message, sender, 
 sendResponse) {
  if(message.title === 'giveSomeTitle'){
    // Do some action with message.params
    sendResponse(true);
  }
});

app.js

chrome.extension.sendRequest({
    title: 'giveSomeTitle', params: paramsToSend
  }, function(result) { 
    // Do Some action
});


1 commentaires

sendRequest est obsolète, utilisez sendMessage



4
votes

Cette erreur est généralement causée par l'une de vos extensions Chrome.

Je recommande d'installer ce désactivateur d'extension en un clic , je l'utilise avec le raccourci clavier COMMAND (⌘) + SHIFT (⇧) + D - pour désactiver / activer rapidement toutes mes extensions.

Une fois les extensions désactivées, ce message d'erreur devrait disparaître.

Paix! ✌️


0 commentaires

1
votes

Dans mon cas, il s'agissait de l'extension "Automatic Backlink Checker". Cela aidera peut-être d'autres utilisateurs à résoudre leur problème plus facilement. Je suis passé de la désactivation de toutes les extensions à la fois à leur désactivation une par une. De cette façon, la taupe.

Cordialement


0 commentaires

0
votes

Il semble que l'extension NoCoffee Vision Simulator pour Chrome provoquera également cette erreur. Il suffit de l'ajouter comme cause potentielle pour les personnes qui recherchent leur propre instance.


0 commentaires

0
votes

J'ai désactivé l'extension Chrome "Coupons lors du paiement" et ce problème a été résolu.


0 commentaires