„Ein Listener hat eine asynchrone Antwort angezeigt, indem er „true“ zurückgegeben hat, aber der Nachrichtenkanal wurde geschlossen, bevor eine Antwort empfangen wurde.“ Was bedeutet das?
Es ist ein einfaches Modal, das mit a geöffnet und geschlossen wird useState().
Nach dem Import meines Pakets habe ich einen Fehler in meiner Konsole, der plötzlich nach einigen Sekunden erscheint, ohne dass irgendwelche Aktionen ausgeführt werden.
Uncaught (in promise) localhost/:1
>{message: 'A listener indicated an asynchronous response by r…age channel closed before a response was received'}
message: "A listener indicated an asynchronous response by returning true, but the message channel closed before a response was received"
>[[Prototype]]: Object
>constructor: ƒ ()
>[[Prototype]]: Object
/* sometimes there are specific elements in addition but I could not check when they appear and when not */
Promise.then (asynchrone)
(anonyme) @content_script_bundle.js:108
handleNewFeatures @content_script_bundle.js:101
handleUpdatedNodes @content_script_bundle.js:101
(anonyme) @content_script_bundle.js:101
childlist(asynchrone)
0 @purplebox.js:1
(anonyme) @purplebox.js:1
v @purplebox.js:1
Es blockiert weder meine Seiten, noch verhindert es das ordnungsgemäße Funktionieren seiner Funktionen, aber es ist ein Fehler und ich denke, er sollte behoben werden und vielleicht anderen Leuten helfen, die das gleiche Problem haben.
Ich gebe an, dass ich in diesem Projekt keine asynchrone Anfrage mache. Alles ist lokal und die wenigen Daten, die ich verwende, werden direkt in Raw importiert. Ich weiß nicht wo Purplebox.js kommt auch her.
Chrostip Schaejn
Dieses Problem ist ein Cross-Origin-Request-Problem und wird durch verschiedene Chrome-Erweiterungen verursacht. Ich hatte das auch in meiner Angular-App und nachdem ich es im Inkognito-Modus getestet hatte, tauchte der Fehler nicht mehr auf.
/Bearbeiten: Wenn Sie ein Erweiterungsentwickler sind, der hierher kommt: Sie müssen return true beim Abrufen von Daten von Cross-Origins. Mehr Info: Chromium-Projekt
Das ist schwer zu sagen, ich weiß nicht, welche Erweiterungen Sie verwenden. Beispiel: Für mich ist es Ghostery, sie produzieren viele Konsolenfehler. Sogar auf ihrer eigenen Website erhalte ich diese Fehler.
– Christip Schaejn
7. Juni um 19:25 Uhr
Bei mir war auch eine Verlängerung dabei. Ich schaute immer wieder auf meine App und versuchte herauszufinden, wo ich es vermasselt hatte, wo es nur eine Erweiterung war (Ghostery).
– Helmut Granda
8. Juni um 7:50 Uhr
Du hattest Recht ! Ich werde diese verdammte Erweiterung (Ghostery) entfernen. Vielen Dank !!
– Romin Manogil
8. Juni um 11:36 Uhr
Sie können Sites in Ghostery zur Whitelist hinzufügen
– m4a
10. Juni um 8:09 Uhr
Die Fehler tauchten bei mir seit Google Chrome Update 102 oder 103 auf.
– Woodrow Shigeru
27. Juni um 8:18 Uhr
In meinem Fall wird es verursacht durch Ghostery-Erweiterungwenn dieser Fehler in Ihrem lokalen Host auftritt, müssen Sie ihn zur Liste der vertrauenswürdigen Sites von Ghostery hinzufügen, und der Fehler ist verschwunden.
Dies war die Lösung für mich. Danke 🙂
– bechtold
25. Juli um 11:51 Uhr
Das war auch die Lösung für mich, thx.
– Oussama Boumaad
27. August um 16:12 Uhr
Danke für das Teilen. Ich glaube, es ist immer eine gute Idee, localhost in allen Browsererweiterungen auf die Whitelist zu setzen, um zu verhindern, dass sie die lokale Entwicklung abfangen.
– Zeshan Munir
29. August um 18:32 Uhr
Das Klicken auf „Site vertrauen“ hat bei mir nicht funktioniert, ich musste in das Menü mit den drei Punkten gehen, Trust & Restrict, und „127.0.0.1:*“ zur Vertrauensliste hinzufügen. Danach ist der Fehler weg! Danke
Bei Projekten, die Polyfill verwenden, würde ich erwarten, dass die Warnung verschwindet, wenn ein Fix zusammengeführt wird. Beachten Sie, dass die Polyfill-Bibliothek verwendet wird, da nur Firefox das neue Promise-based implementiert runtime.onMessagewährend Chrome immer noch die erzwingt ursprüngliche API im Callback-Stil.
Beachten Sie, dass es eine gibt Pull-Request öffnen bereits in der webextension-polyfill-Bibliothek. Es wurde nicht zusammengeführt, aber nach meinen Tests löst es das Problem. Wenn Sie also eine schnelle Lösung für ein Projekt benötigen, das die Bibliothek intern verwendet, können Sie den Patch manuell mit anwenden Patch-Paket. Zum Beispiel, so würde eine solche Änderung in Ghostery aussehen.
Es sieht also so aus, als ob dies kein Problem ist, das berücksichtigt werden muss. Das Pull-Anfrage oben erwähnt ist, den Fehler einfach zu ignorieren, wenn er auftritt
– Gangula
6. September um 8:50 Uhr
@Gangula Es hängt vom Kontext ab, ob Sie die Warnung ignorieren können. In vielen Fällen, in denen Erweiterungen die Webextension-Polyfill verwenden, ist es meiner Meinung nach sicher, sie zu ignorieren, da dies an die Semantik gewöhnt ist. Im Allgemeinen bedeutet die Warnung, dass in einem Listener ein Versprechen erstellt wird, das weder aufgelöst noch abgelehnt wird. Das kann auf einen logischen Fehler im Code hindeuten, aber es gibt älteren Code, der in diesem Stil geschrieben wurde. Bei neuem Code würde ich dieses Kommunikationsmuster vermeiden – ich sehe den Punkt, warum Chrome warnt –, aber es ist möglicherweise nicht einfach, eine größere Codebasis zu ändern.
– Philipp Klaßen
6. September um 9:28
macht Sinn. Ich arbeite an einer Erweiterung, bei der dieser Fehler auftritt, aber ich bin mir ziemlich sicher, dass meine Logik korrekt ist und die erwartete Funktionalität auch wie erwartet funktioniert. Ich mache noch ein paar Tests und werde weitere Details hinzufügen, wenn ich welche finde
– Gangula
6. September um 10:09 Uhr
Das Hintergrundskript (Service Worker in MV3) könnte in den inaktiven Zustand wechseln, ohne eine Antwort auf eine Nachricht zurückzusenden, die es von einem Inhaltsskript erhalten hat.
Die meisten MV3-APIs sind asynchron und können Zusagen zurückgeben, wenn dies sinnvoll ist. (In einigen Fällen, z. B. bei Ereignis-Listenern (z. B.: chrome.tabs.onRemoved), wäre die Rückgabe eines Versprechens nicht sinnvoll). Das Zurücklesen einer Antwort kann jedoch mithilfe von Rückrufen oder im Promise-Stil erfolgen.
Das Problem, mit dem Sie konfrontiert sind, ist Folgendes: Das Hintergrundskript wird nicht aufgerufen sendResponse() für eine oder mehrere empfangene Nachrichten und wurde inaktiv (wodurch der Nachrichtenkanal geschlossen wurde). Das Inhaltsskript, das die Nachricht gesendet hat, wartet jedoch auf die Antwort.
Bitte überprüfen Sie die Absender und Handler Ihrer Nachricht.
Ich hatte den gleichen Fehler. Ich habe die entfernt Tampermonkey Erweiterung und zwickte meine AdBlock Erweiterung und dann hat es bei mir funktioniert.
14309000cookie-check„Ein Listener hat eine asynchrone Antwort angezeigt, indem er „true“ zurückgegeben hat, aber der Nachrichtenkanal wurde geschlossen, bevor eine Antwort empfangen wurde.“ Was bedeutet das?yes