„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?

Lesezeit: 6 Minuten

Benutzeravatar von Romin Manogil
Romin Manogil

Ich arbeite an einer React-Anwendung und verwende einige npm-Module, von denen ich eines selbst erstellen musste. (mein NPM-Paket:
https://www.npmjs.com/package/modale-react-rm).

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

Fehler in der Konsole img

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.

Benutzeravatar von Chrotipp Schaejn
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.

Weitere Infos: Google-Forum

/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.

Geben Sie hier die Bildbeschreibung ein

  • 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

    – Andrew Meservy

    11. September um 22:06 Uhr

Benutzeravatar von Philipp Claßen
Philipp Klaßen

Es ist gewesen besprochen im webextension-polyfill Bibliothek, das von vielen Erweiterungen (einschließlich Ghostery) verwendet wird. Da war ein letzte Änderung in Chrome das führte zu der Fehlermeldung.

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.

Beispiel:

Hintergrundskript:

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  // ... handle message
  return true // Error message says you already return true
})

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.

Inhaltsskript: Methode 1 zum Lesen der Antwort:

chrome.runtime.sendMessage('ping', (response) => { /* read response */ })

Inhaltsskript: Methode 2 zum Lesen der Antwort:

chrome.runtime.sendMessage('ping').then(response => { /* read response */ })

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.

1430900cookie-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?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy