Ich habe Ссылка gefunden, das besagt:
Die onerror-Eigenschaft der ServiceWorkerContainer-Schnittstelle ist ein Event-Handler ausgelöst, wenn ein Fehlerereignis in der zugeordneten auftritt Servicemitarbeiter.
Ich kann dies jedoch nicht in Chrome (v51) durchführen. Im Rahmen der Hauptanwendung habe ich den folgenden Code von der Konsole aus ausgeführt:
%Vor%Dann habe ich im Rahmen des aktiven Service-Mitarbeiters einen beliebigen Fehler ausgelöst:
%Vor%Das Ergebnis war die übliche Fehlermeldung "Uncaught ReferenceError: f ist nicht definiert (...)", aber es wurde nicht über meinen globalen onerror-Handler protokolliert.
Die MDN-Seite besagt, dass diese API seit v40 in Chrome unterstützt wird, aber navigator.serviceWorker.onerror
ist anfänglich undefiniert, was zu der Annahme führt, dass sie nicht implementiert ist. Kennt jemand das?
Vielleicht haben Sie versucht, den onerror
-Handler auf den Container navigator.serviceWorker
wie folgt zu setzen:
Der Error-Handler muss innerhalb eines Service-Worker-Skripts von festgelegt werden mit self.onerror
( self
ist eine spezielle Variable / ein Attribut, die sich auf ServiceWorkerGlobalScope
). Der onerror
Callback wird nur eine Fehlermeldung zur Verfügung gestellt.
Alternativ können Sie auch das error
-Ereignis des Service-Mitarbeiters abhören, das ein ErrorEvent
enthält, das den Fehlerort enthält:
Hier ist eine Demo . Stellen Sie sicher, dass Sie die Service-Mitarbeiter von DevTools & gt; Ressourcen & gt; Service Workers (auf der linken Seite) , da es mit diesen fehlgeschlagenen Service-Worker-Registrierungen gefüllt wird:
Ich habe folgende Browser-Unterstützung für onerror
in einer Service-Worker-Instanz bestätigt:
AKTUALISIEREN :
Wenn also MDN die Schnittstelle
ServiceWorkerContainer
beschreibt, bezieht sich das aufself
(ServiceWorkerGlobalScope
) und nicht aufnavigator.serviceWorker
?
Ich denke, das gilt nur für das onerror
-Attribut (und vielleicht auch für die anderen Ereignisse dort), und ich nehme an, dass die Spezifikation nicht aktualisiert wurde, um die vereinbarte Implementierung widerzuspiegeln ...
Die Arbeitsgruppe "Service Workers" hatte beschlossen, onerror
von der ServiceWorkerContainer
in die Service-Worker-Instanz zu verschieben, wie in GitHub ( slightlyoff/ServiceWorker
# 198 ):
kinu hat am 2. April 2014
kommentiertsgtm2. Für Fehlerberichte (
onerror
stuff) könnten wir wahrscheinlich ähnliches tun? Z.B. Verschieben des.onerror
-Handlers vom Container zum SW-Objekt, so dass das Dokument explizit wissen kann, aus welcher SW der Fehler stammt (obwohl es möglicherweise Handler an mehrere SWs anhängen muss).
Und dann gab es einen weiteren Kommentar in einem verwandten Problem ( slightlyoff/ServiceWorker
# 104 ), die auf einen Mangel an Nützlichkeit für onerror
auf dem Container hinweist:
jakearchibald hat am 3. April 2014
kommentiertDenken Sie über die Anwendungsfälle nach ( # 198 ) ...
navigator.serviceWorker.onerror
odernavigator.serviceWorker.pending.onerror
(was auch immer es ist) sind nicht nützlich, um Fehler zurück auf den Server zu protokollieren, da Fehler außerhalb der Lebensdauer einer Seite auftreten können.onerror
innerhalb des Arbeiters selbst ist dafür am besten.
.pending.onerror
ist nützlich, wenn Sie die Benutzeroberfläche als Reaktion auf ein Update aktualisieren. Also ist es vielleicht besser alsstatechange
, obwohl Sie irgendwo eine Fehlermeldung haben müssten.Dadurch bleiben Fehler, die vor der Erstellung der SW-Instanz auftreten. AppCache verfügt über ein Fehlerereignis, das netzwerkbezogene Aktualisierungsfehler abdeckt und auch Fehler analysiert. Wir würden jedoch alle Fehler, die außerhalb des Lebenszyklus einer Seite aufgetreten sind, wieder verlieren.
Tags und Links javascript google-chrome service-worker