Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

CrashReportContext

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.

Das CrashReportContext-Interface der Reporting API bietet Methoden, die es ermöglichen, beliebige Daten für den aktuellen Top-Level-Browsing-Kontext aufzuzeichnen. Diese werden dann einem CrashReport hinzugefügt und an einen Reporting-Endpunkt gesendet, wenn ein Browserabsturz auftritt.

Das CrashReportContext-Objekt für einen bestimmten Browsing-Kontext wird über die Window.crashReport-Eigenschaft aufgerufen.

Instanzmethoden

CrashReportContext.delete()

Löscht ein zuvor gespeichertes Schlüssel-Wert-Paar.

CrashReportContext.initialize()

Initialisiert einen Speicherbereich, der zum Speichern von durch set() spezifizierten Absturzberichtsdaten verwendet wird. Dies muss aufgerufen werden, bevor eine andere Methode des Objekts verwendet wird.

CrashReportContext.set()

Speichert ein Schlüssel-Wert-Paar im durch initialize() initialisierten Speicher.

Beschreibung

Absturzberichte, die beliebige Informationen enthalten, können mithilfe der Reporting API an einen Serverendpunkt gesendet werden. Dies ist nützlich, da wir detaillierte Diagnosedaten über die Lebensdauer einer Anwendung speichern und die Berichte verwenden können, um Abstürze effektiver zu debuggen.

Die Informationen werden in einem speziellen Schlüssel-Wert-Speicher gespeichert, der dem Web Storage ähnlich ist, außer dass sein Gültigkeitsbereich auf den aktuellen Top-Level-Ursprung beschränkt ist und keine Getter-Methode verfügbar ist. Es ermöglicht, dokumentenspezifische Zustandsinformationen aufzuzeichnen und zu löschen. Das Top-Level-Dokument zeichnet Diagnoseinformationen zu sich selbst und allen eingebetteten Dokumenten auf und sendet alle zugehörigen Absturzberichte.

Um diese API zu verwenden, muss ein Dokument zuerst window.crashReport.initialize() aufrufen, wobei als Argument eine Zahl übergeben wird, die die maximale Anzahl von Bytes angibt, die im Schlüssel-Wert-Speicher durch jeden einzelnen window.crashReport.set()-Aufruf gespeichert werden können. Werte werden dann mit set() aufgezeichnet und mit window.crashReport.delete() gelöscht.

Wenn der Browser abstürzt, werden die im Schlüssel-Wert-Speicher gespeicherten Informationen einem CrashReport hinzugefügt und an den Standard-Reporting-Server-Endpunkt gesendet.

Hinweis: Es ist nicht möglich, CrashReports mit einem ReportingObserver abzurufen.

Beispiele

Daten in einem Absturzbericht aufzeichnen

Um mit der Absturzberichterstattung zu beginnen, muss eine Webanwendung window.crashReport.initialize() aufrufen und dabei die maximale Anzahl Bytes angeben, die im Schlüssel-Wert-Speicher pro set()-Aufruf gespeichert werden können. Hier initialisieren wir den Speicher mit einem Kilobyte Speicherplatz:

js
window.crashReport.initialize(1024).then(() => {
  init();
});

Sobald das Versprechen erfüllt ist, gibt es einige gängige Strategien, die in nachfolgendem Code übernommen werden können. Zum Beispiel könnten wir ein Schlüssel-Wert-Paar setzen, das Eingabedaten für eine komplexe Operation speichert, die möglicherweise dazu führt, dass es abstürzt, und dann versuchen, die Operation mit diesen Eingaben auszuführen. Wenn der Browser abstürzt, enthält der resultierende CrashReport diese Daten. Wenn es nicht abstürzt, können wir dieses Schlüssel-Wert-Paar löschen, da es derzeit nicht relevant ist.

js
const arg1 = "a";
const arg2 = "b";
window.crashReport.set("complex-operation-input", `${arg1}_${arg2}`);
complexOperationThatMightCrash(arg1, arg2);
window.crashReport.delete("complex-operation-input");

Da auf Absturzspeicherdaten unter allen gleichnamigen Dokumenten eines durchsuchbaren Navigationssystems zugegriffen werden kann, möchten Sie möglicherweise Schlüssel für bestimmte häufige Operationen, die mehrere Dokumente gleichzeitig ausführen können, mit einem Präfix versehen. Beispielsweise stellen Sie sich vor, eine gemeinsame fetch()-Operation wird in mehreren verschiedenen Dokumenten zu unterschiedlichen Zeiten aufgerufen, und bestimmte Bedingungen führen dazu, dass die Operation einen Absturz verursacht.

Um festzustellen, wo fetch() zum Zeitpunkt eines Absturzes aufgerufen wurde, können wir eine Präfixstrategie übernehmen:

js
async function fetchURL(url) {
  const prefix = `[top-level=${self === window.top}]`;
  window.crashReport.set(`${prefix}-fetching`, url);
  const response = await fetch(url);
  window.crashReport.delete(`${prefix}-fetching`, url);
}

Dies verhindert auch, dass sich Schlüssel-Wert-Paare, die dasselbe Problem zu unterschiedlichen Zeiten oder an verschiedenen Orten identifizieren, gegenseitig überschreiben. In diesem Fall unterscheiden wir die in das Hauptdokument eingestellten Absturzberichterstellungsdaten von den in eingebetteten Dokumenten eingestellten.

Spezifikationen

Spezifikation
Crash Reporting
# crashreportcontext

Browser-Kompatibilität

Siehe auch