InterventionReport
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Das InterventionReport-Wörterbuch der Reporting API repräsentiert einen Interventionsbericht.
Ein Interventionsbericht kann generiert werden, wenn die Nutzung einer Funktion in einem Webdokument vom Browser aus Gründen wie Sicherheit, Leistung oder Benutzerbelästigung blockiert wurde. Berichte dieser Art können innerhalb einer Seite mithilfe eines ReportingObserver beobachtet werden, und eine serialisierte Version kann an einen Reporting-Server-Endpunkt gesendet werden.
Instanz-Eigenschaften
body-
Der Hauptteil des Berichts. Dies ist ein Objekt mit den folgenden Eigenschaften:
columnNumberExperimentell-
Ein String, der die Zeichenposition in der Quelldateizeile darstellt, in der die Intervention stattfand, falls bekannt, oder
nullandernfalls. idExperimentell-
Ein String, der die Intervention repräsentiert, die den Bericht generiert hat. Dies kann verwendet werden, um Berichte zu gruppieren.
lineNumberExperimentell-
Ein String, der die Zeile in der Quelldatei darstellt, in der die Intervention stattfand, falls bekannt, oder
nullandernfalls. messageExperimentell-
Ein String, der eine für Menschen lesbare Beschreibung der Intervention enthält, einschließlich Informationen, wie die Intervention vermieden werden könnte. Dies entspricht typischerweise der Nachricht, die ein Browser in seiner DevTools-Konsole anzeigt, wenn eine Intervention erfolgt, falls verfügbar.
sourceFileExperimentell-
Ein String, der den Pfad zur Quelldatei enthält, die zuerst die angegebene API verwendet hat (und die die Intervention verursacht hat), falls bekannt, oder
nullandernfalls.
type-
Der String
"intervention", der angibt, dass dies ein Interventionsbericht ist. url-
Ein String, der die URL des Dokuments darstellt, das den Bericht generiert hat.
Beschreibung
Ein Interventionsbericht kann generiert werden, wenn die Nutzung einer Funktion in einem Webdokument vom Browser aus Gründen wie Sicherheit, Leistung oder Benutzerbelästigung blockiert wurde. Zum Beispiel kann eine Werbung eine Heavy Ad Intervention (developer.chrome.com) auslösen, wenn sie die Responsivität der Seite verlangsamt oder anderweitig die Benutzererfahrung beeinflusst.
Sie können Interventionsberichte innerhalb der Seite überwachen, in der sie ausgelöst werden, mithilfe der Reporting API. Dazu erstellen Sie ein ReportingObserver-Objekt, um Berichte zu empfangen, und übergeben eine Callback-Methode sowie eine (optionale) Options-Eigenschaft, die die Arten von Berichten spezifiziert, über die Sie informiert werden möchten. Die Callback-Methode wird dann mit Berichten der gewünschten Typen aufgerufen, wobei ein Berichtobjekt übergeben wird. Für Interventionsberichte ist das Objekt eine Instanz von InterventionReport (welches die type-Eigenschaft auf "intervention" gesetzt hat).
Ein typischer Interventionsbericht wird unten gezeigt (aus der Spezifikation kopiert). Beachten Sie, dass url die ursprünglich geladene Seite darstellt, während body.sourceFile, body.lineNumber und body.columnNumber die genaue Position des API-Aufrufs angeben, der die Intervention ausgelöst hat.
{
"type": "intervention",
"url": "https://example.com/",
"body": {
"id": "audio-no-gesture",
"message": "A request to play audio was blocked because it was not triggered by user activation (such as a click).",
"sourceFile": "https://example.com/index.js",
"lineNumber": 1234,
"columnNumber": 42
}
}
Interventionsberichte werden auch als JSON-Objekt in einer POST-Anfrage an den Reporting-Server-Endpunkt mit dem Namen "default" gesendet, wenn dieser definiert ist. Der Reporting-Server-Endpunkt und seine Zuordnung zu einer bestimmten URL werden mit dem Reporting-Endpoints-Header festgelegt.
Die Struktur des Serverberichts ist fast identisch mit InterventionReport, außer dass zusätzlich die Felder age und user_agent enthalten sind.
{
"type": "intervention",
"age": 27,
"url": "https://example.com/",
"user_agent": "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0",
"body": {
"id": "audio-no-gesture",
"message": "A request to play audio was blocked because it was not triggered by user activation (such as a click).",
"sourceFile": "https://example.com/index.js",
"lineNumber": 1234,
"columnNumber": 42
}
}
Beispiele
>Verwendung des ReportingObserver-Interfaces
Um Interventionsberichte innerhalb der Seite zu beobachten, konstruieren wir ein neues ReportingObserver-Objekt, um Berichte des Typs "intervention" zu empfangen, und übergeben eine Callback-Methode, die die Berichte empfängt und protokolliert. Dieser Code muss vor dem Skript geladen werden, das die Verletzung verursacht:
const options = {
types: ["intervention"],
buffered: true,
};
const observer = new ReportingObserver((reports, observer) => {
reports.forEach((report) => {
console.log(report);
console.log(JSON.stringify(report));
});
}, options);
// Start the observer
observer.observe();
Die zeichenkettig transformierte Version des Berichts könnte dem unten gezeigten Objekt ähneln. Beachten Sie, dass der type "intervention" ist.
{
"type": "intervention",
"url": "https://example.com/",
"body": {
"id": "audio-no-gesture",
"message": "A request to play audio was blocked because it was not triggered by user activation (such as a click).",
"sourceFile": "https://example.com/index.js",
"lineNumber": 1234,
"columnNumber": 42
}
}
Senden eines Berichts an einen Reporting-Endpunkt
Um eine Webseite zu konfigurieren, die einen Interventionsbericht senden soll, müssen Sie einen Reporting-Server-Endpunkt mit dem Namen "default" mithilfe des Reporting-Endpoints-Headers festlegen. Unten setzen wir den default-Endpunkt auf https://example.com/intervention:
Der Bericht wird dann als JSON-Objekt in einer POST-Anfrage an den Endpunkt gesendet, sobald eine Intervention erfolgt. Er hat dieselbe Struktur wie InterventionReport, mit Ausnahme der zusätzlichen Eigenschaften age und user_agent.
[
{
"type": "intervention",
"age": 27,
"url": "https://example.com/",
"user_agent": "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0",
"body": {
"id": "audio-no-gesture",
"message": "A request to play audio was blocked because it was not triggered by user activation (such as a click).",
"sourceFile": "https://example.com/index.js",
"lineNumber": 1234,
"columnNumber": 42
}
}
]
Spezifikationen
| Spezifikation |
|---|
| Intervention Reporting> # intervention-report> |
Browser-Kompatibilität
Siehe auch
ReportingObserverReporting-Endpoints- Reporting API
- Die Reporting API (developer.chrome.com)