chrome.declarativeNetRequest (original) (raw)

Zum Hauptinhalt springen

chrome.declarativeNetRequest

Beschreibung

Die chrome.declarativeNetRequest API wird verwendet, um Netzwerk-Anfragen durch Angabe deklarativer Regeln zu blockieren oder zu ändern. So können Erweiterungen Netzwerkanfragen ändern, ohne sie abzufangen und ihren Inhalt einzusehen. Das bietet mehr Datenschutz.

Berechtigungen

declarativeNetRequest
declarativeNetRequestWithHostAccess

Die Berechtigungen „declarativeNetRequest“ und „declarativeNetRequestWithHostAccess“ bieten dieselben Funktionen. Der Unterschied zwischen ihnen besteht darin, wann Berechtigungen angefordert oder gewährt werden.

"declarativeNetRequest"

Löst bei der Installation eine Berechtigungswarnung aus, bietet aber impliziten Zugriff auf allow-, allowAllRequests- und block-Regeln. Verwenden Sie diese Option nach Möglichkeit, um keinen uneingeschränkten Zugriff auf Hosts anfordern zu müssen.

"declarativeNetRequestFeedback"

Aktiviert Debugging-Funktionen für entpackte Erweiterungen, insbesondere getMatchedRules() und onRuleMatchedDebug.

"declarativeNetRequestWithHostAccess"

Bei der Installation wird keine Berechtigungswarnung angezeigt, aber Sie müssen Hostberechtigungen anfordern, bevor Sie Aktionen auf einem Host ausführen können. Das ist sinnvoll, wenn Sie deklarative Net Request-Regeln in einer Erweiterung verwenden möchten, die bereits Hostberechtigungen hat, ohne zusätzliche Warnungen zu generieren.

Verfügbarkeit

Manifest

Zusätzlich zu den zuvor beschriebenen Berechtigungen muss für bestimmte Arten von Regelsätzen, insbesondere für statische Regelsätze, der Manifestschlüssel "declarative_net_request" deklariert werden. Dabei sollte es sich um ein Dictionary mit einem einzelnen Schlüssel namens "rule_resources" handeln. Dieser Schlüssel ist ein Array mit Wörterbüchern vom Typ Ruleset, wie unten dargestellt. Der Name „Ruleset“ wird nicht im JSON des Manifests angezeigt, da es sich lediglich um ein Array handelt. Statische Regelsätze werden weiter unten in diesem Dokument erläutert.

{
  "name": "My extension",
  ...

  "declarative_net_request" : {
    "rule_resources" : [{
      "id": "ruleset_1",
      "enabled": true,
      "path": "rules_1.json"
    }, {
      "id": "ruleset_2",
      "enabled": false,
      "path": "rules_2.json"
    }]
  },
  "permissions": [
    "declarativeNetRequest",
    "declarativeNetRequestFeedback"
  ],
  "host_permissions": [
    "http://www.blogger.com/*",
    "http://*.google.com/*"
  ],
  ...
}

Regeln und Regelsätze

Wenn Sie diese API verwenden möchten, müssen Sie mindestens ein Regelset angeben. Ein Regelsatz enthält ein Array von Regeln. Eine einzelne Regel führt einen der folgenden Schritte aus:

Es gibt drei Arten von Regelsätzen, die jeweils etwas anders verwaltet werden.

Dynamisch

Sie bleiben über Browsersitzungen und Erweiterungs-Upgrades hinweg erhalten und werden mit JavaScript verwaltet, während eine Erweiterung verwendet wird.

Sitzung

Wird gelöscht, wenn der Browser heruntergefahren und eine neue Version der Erweiterung installiert wird. Sitzungsregeln werden mit JavaScript verwaltet, während eine Erweiterung verwendet wird.

Statisch

Wird verpackt, installiert und aktualisiert, wenn eine Erweiterung installiert oder aktualisiert wird. Statische Regeln werden in JSON-formatierten Regeldateien gespeichert und in der Manifestdatei aufgeführt.

Dynamische und sitzungsbezogene Regelsätze

Dynamische und sitzungsbezogene Regelsätze werden mit JavaScript verwaltet, während eine Erweiterung verwendet wird.

Es gibt nur jeweils einen dieser Regelsatztypen. Eine Erweiterung kann Regeln dynamisch hinzufügen oder entfernen, indem sie updateDynamicRules() und updateSessionRules() aufruft, sofern die Regeln nicht überschritten werden. Informationen zu den Beschränkungen für Regeln finden Sie unter Beschränkungen für Regeln. Ein Beispiel dafür finden Sie unter Codebeispiele.

Statische Regelsätze

Im Gegensatz zu dynamischen Regeln und Sitzungsregeln werden statische Regeln verpackt, installiert und aktualisiert, wenn eine Erweiterung installiert oder aktualisiert wird. Sie werden in Regeldateien im JSON-Format gespeichert, die der Erweiterung mit den Schlüsseln "declarative_net_request" und "rule_resources" wie oben beschrieben sowie einem oder mehreren Ruleset-Wörterbüchern angegeben werden. Ein Ruleset-Wörterbuch enthält einen Pfad zur Regeldatei, eine ID für das in der Datei enthaltene Regelset und Informationen dazu, ob das Regelset aktiviert oder deaktiviert ist. Die letzten beiden sind wichtig, wenn Sie ein Regelset programmatisch aktivieren oder deaktivieren.

{
  ...
  "declarative_net_request" : {
    "rule_resources" : [{
      "id": "ruleset_1",
      "enabled": true,
      "path": "rules_1.json"
    },
    ...
    ]
  }
  ...
}

Um Regelsatzdateien zu testen, laden Sie Ihre Erweiterung entpackt. Fehler und Warnungen zu ungültigen statischen Regeln werden nur für entpackte Erweiterungen angezeigt. Ungültige statische Regeln in gepackten Erweiterungen werden ignoriert.

Beschleunigte Überprüfung

Änderungen an statischen Regelsätzen können möglicherweise beschleunigt überprüft werden. Weitere Informationen

Statische Regeln und Regelsätze aktivieren und deaktivieren

Sowohl einzelne statische Regeln als auch vollständige statische Regelsätze können zur Laufzeit aktiviert oder deaktiviert werden.

Die aktivierten statischen Regeln und Regelsätze bleiben über Browsersitzungen hinweg erhalten. Beide werden bei Erweiterungsupdates nicht beibehalten. Das bedeutet, dass nach einem Update nur die Regeln verfügbar sind, die Sie in Ihren Regeldateien belassen haben.

Aus Leistungsgründen gibt es auch Einschränkungen hinsichtlich der Anzahl der Regeln und Regelsätze, die gleichzeitig aktiviert werden können. Rufen Sie getAvailableStaticRuleCount() auf, um die Anzahl der zusätzlichen Regeln zu prüfen, die aktiviert werden können. Informationen zu den Beschränkungen für Regeln finden Sie unter Beschränkungen für Regeln.

Rufen Sie updateStaticRules() auf, um statische Regeln zu aktivieren oder zu deaktivieren. Diese Methode verwendet ein UpdateStaticRulesOptions-Objekt, das Arrays mit IDs von Regeln enthält, die aktiviert oder deaktiviert werden sollen. Die IDs werden mit dem Schlüssel "id" des Ruleset-Dictionarys definiert. Es gibt ein Limit von maximal 5.000 deaktivierten statischen Regeln.

Rufen Sie updateEnabledRulesets() auf, um statische Regelsätze zu aktivieren oder zu deaktivieren. Diese Methode verwendet ein UpdateRulesetOptions-Objekt, das Arrays mit IDs von Regelsätzen enthält, die aktiviert oder deaktiviert werden sollen. Die IDs werden mit dem Schlüssel "id" des Ruleset-Dictionarys definiert.

Build-Regeln

Unabhängig vom Typ beginnt eine Regel mit vier Feldern, wie unten dargestellt. Während für die Tasten "id" und "priority" eine Zahl eingegeben werden muss, können für die Tasten "action" und "condition" mehrere Bedingungen zum Blockieren und Weiterleiten angegeben werden. Die folgende Regel blockiert alle Script-Anfragen, die von "foo.com" an eine beliebige URL mit "abc" als Teilstring gesendet werden.

{
  "id" : 1,
  "priority": 1,
  "action" : { "type" : "block" },
  "condition" : {
    "urlFilter" : "abc",
    "initiatorDomains" : ["foo.com"],
    "resourceTypes" : ["script"]
  }
}

URL-Abgleich

Mit Declarative Net Request können URLs entweder mit einer Syntax für den Musterabgleich oder mit regulären Ausdrücken abgeglichen werden.

Syntax für URL-Filter

Mit dem Schlüssel "condition" einer Regel kann ein "urlFilter"-Schlüssel für Aktionen für URLs unter einer bestimmten Domain verwendet werden. Sie erstellen Muster mit Tokens für den Musterabgleich. Hier einige Beispiele:

urlFilter Übereinstimmungen Stimmt nicht überein
"abc" https://abcd.comhttps://example.com/abcd https://ab.com
"abc*d" https://abcd.comhttps://example.com/abcxyzd https://abc.com
"| a.example.com" https://a.example.com/https://b.a.example.com/xyzhttps://a.example.company
"|https*" https://example.com http://example.com/http://https.com
"example*^123|" https://example.com/123http://abc.com/example?123 https://example.com/1234https://abc.com/example0123

Reguläre Ausdrücke

In Bedingungen können auch reguläre Ausdrücke verwendet werden. Weitere Informationen finden Sie unter dem Schlüssel "regexFilter". Informationen zu den für diese Bedingungen geltenden Einschränkungen finden Sie unter Regeln mit regulären Ausdrücken.

Gute URL-Bedingungen schreiben

Achten Sie beim Schreiben von Regeln darauf, dass immer eine gesamte Domain abgeglichen wird. Andernfalls wird Ihre Regel möglicherweise in unerwarteten Situationen angewendet. Wenn Sie beispielsweise die Syntax für den Musterabgleich verwenden:

Geeignete Methoden:

Verwenden Sie die Zeichen ^ und /, um einen regulären Ausdruck zu verankern. ^https:\/\/www\.google\.com\/ entspricht beispielsweise jedem Pfad auf https://www.google.com.

Regelauswertung

DNR-Regeln werden vom Browser in verschiedenen Phasen des Lebenszyklus von Netzwerkanfragen angewendet.

Vor der Anfrage

Bevor eine Anfrage gestellt wird, kann eine Erweiterung sie mit einer passenden Regel blockieren oder weiterleiten (einschließlich des Upgrades des Schemas von HTTP auf HTTPS).

Für jede Erweiterung ermittelt der Browser eine Liste mit übereinstimmenden Regeln. Regeln mit der Aktion modifyHeaders sind hier nicht enthalten, da sie später verarbeitet werden. Außerdem werden Regeln mit der Bedingung responseHeaders erst später berücksichtigt (wenn Antwortheader verfügbar sind) und sind nicht enthalten.

Anschließend wählt Chrome für jede Erweiterung maximal einen Kandidaten pro Anfrage aus. Chrome findet eine passende Regel, indem alle passenden Regeln nach Priorität sortiert werden. Regeln mit derselben Priorität werden nach Aktion sortiert (allow oder allowAllRequests > block > upgradeScheme > redirect).

Wenn es sich bei dem Kandidaten um eine allow- oder allowAllRequests-Regel handelt oder der Frame, in dem die Anfrage gestellt wird, zuvor mit einer allowAllRequests-Regel mit höherer oder gleicher Priorität aus dieser Erweiterung übereinstimmte, wird die Anfrage „zugelassen“ und die Erweiterung hat keine Auswirkungen auf die Anfrage.

Wenn mehr als eine Erweiterung diese Anfrage blockieren oder weiterleiten möchte, wird eine einzelne Aktion ausgewählt. In Chrome werden die Regeln dazu in der Reihenfolge block > redirect oder upgradeScheme > allow oder allowAllRequests sortiert. Wenn zwei Regeln vom selben Typ sind, wählt Chrome die Regel der zuletzt installierten Erweiterung aus.

Bevor Chrome Anfrageheader an den Server sendet, werden die Header anhand übereinstimmender modifyHeaders-Regeln aktualisiert.

In einer einzelnen Erweiterung erstellt Chrome die Liste der auszuführenden Änderungen, indem alle übereinstimmenden modifyHeaders-Regeln gesucht werden. Wie bisher werden nur Regeln mit einer höheren Priorität als übereinstimmende allow- oder allowAllRequests-Regeln berücksichtigt.

Diese Regeln werden von Chrome in einer Reihenfolge angewendet, sodass Regeln einer neueren Erweiterung immer vor Regeln einer älteren Erweiterung ausgewertet werden. Außerdem werden Regeln mit höherer Priorität aus einer Erweiterung immer vor Regeln mit niedrigerer Priorität aus derselben Erweiterung angewendet. Das gilt auch für Erweiterungen:

Nach Erhalt einer Antwort

Sobald die Antwortheader empfangen wurden, wertet Chrome Regeln mit der Bedingung responseHeaders aus.

Nachdem diese Regeln nach action und priority sortiert und alle Regeln ausgeschlossen wurden, die durch eine übereinstimmende allow- oder allowAllRequests-Regel überflüssig werden (dies geschieht identisch mit den Schritten unter „Vor der Anfrage“), kann Chrome die Anfrage im Namen einer Erweiterung blockieren oder weiterleiten.

Wenn eine Anfrage diese Phase erreicht hat, wurde sie bereits an den Server gesendet und der Server hat Daten wie den Anfragetext empfangen. Eine Blockierungs- oder Weiterleitungsregel mit einer Bedingung für Antwortheader wird weiterhin ausgeführt, kann die Anfrage aber nicht blockieren oder weiterleiten.

Bei einer Blockierungsregel wird dies dadurch gehandhabt, dass die Seite, von der die Anfrage stammt, eine blockierte Antwort erhält und Chrome die Anfrage frühzeitig beendet. Bei einer Weiterleitungsregel sendet Chrome eine neue Anfrage an die weitergeleitete URL. Prüfen Sie, ob diese Verhaltensweisen den Datenschutzanforderungen für Ihre Erweiterung entsprechen.

Wenn die Anfrage nicht blockiert oder weitergeleitet wird, wendet Chrome alle modifyHeaders-Regeln an. Das Anwenden von Änderungen auf Antwortheader funktioniert auf dieselbe Weise wie im Abschnitt „Bevor Anfrageheader gesendet werden“ beschrieben. Änderungen an Anfrageheadern haben keine Auswirkungen, da die Anfrage bereits gestellt wurde.

Sichere Regeln

Sichere Regeln sind Regeln mit der Aktion block, allow, allowAllRequests oder upgradeScheme. Für diese Regeln gilt ein erhöhtes Kontingent für dynamische Regeln.

Limits für Regeln

Das Laden und Auswerten von Regeln im Browser führt zu einem Leistungsmehraufwand. Daher gelten bei der Verwendung der API einige Einschränkungen. Die Grenzwerte hängen vom Typ der verwendeten Regel ab.

Statische Regeln

Statische Regeln sind Regeln, die in Regeldateien angegeben sind, die in der Manifestdatei deklariert werden. Eine Erweiterung kann bis zu 100 statische Regelsätze als Teil des Manifestschlüssels "rule_resources" angeben, aber nur 50 dieser Regelsätze können gleichzeitig aktiviert werden. Letzteres wird als MAX_NUMBER_OF_ENABLED_STATIC_RULESETS bezeichnet. Zusammen enthalten diese Regelsätze mindestens 30.000 Regeln. Das wird als GUARANTEED_MINIMUM_STATIC_RULES bezeichnet.

Die Anzahl der danach verfügbaren Regeln hängt davon ab, wie viele Regeln durch alle Erweiterungen aktiviert werden, die im Browser eines Nutzers installiert sind. Sie können diese Nummer zur Laufzeit durch Aufrufen von getAvailableStaticRuleCount() ermitteln. Ein Beispiel dafür finden Sie unter Codebeispiele.

Sitzungsregeln

Eine Erweiterung kann bis zu 5.000 Sitzungsregeln haben. Dies wird als MAX_NUMBER_OF_SESSION_RULES bereitgestellt.

Vor Chrome 120 gab es ein Limit von 5.000 kombinierten dynamischen und Sitzungsregeln.

Dynamische Regeln

Eine Erweiterung kann mindestens 5.000 dynamische Regeln haben. Dies wird als MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES bereitgestellt.

Ab Chrome 121 gilt für sichere dynamische Regeln ein höheres Limit von 30.000 Regeln, das als MAX_NUMBER_OF_DYNAMIC_RULES verfügbar ist. Alle unsicheren Regeln, die innerhalb des Limits von 5.000 hinzugefügt werden, werden ebenfalls auf dieses Limit angerechnet.

Vor Chrome 120 gab es ein kombiniertes Limit von 5.000 dynamischen Regeln und Sitzungsregeln.

Regeln mit regulären Ausdrücken

Für alle Arten von Regeln können reguläre Ausdrücke verwendet werden. Die Gesamtzahl der Regeln mit regulären Ausdrücken darf jedoch 1.000 nicht überschreiten. Das wird als MAX_NUMBER_OF_REGEX_RULES bezeichnet.

Außerdem darf jede Regel nach der Kompilierung nicht größer als 2 KB sein. Das hängt in etwa mit der Komplexität der Regel zusammen. Wenn Sie versuchen, eine Regel zu laden, die dieses Limit überschreitet, wird eine Warnung wie die folgende angezeigt und die Regel wird ignoriert.

rules_1.json: Rule with id 1 specified a more complex regex than allowed
as part of the "regexFilter" key.

Interaktionen mit Service-Workern

Ein declarativeNetRequest gilt nur für Anfragen, die den Netzwerk-Stack erreichen. Dazu gehören Antworten aus dem HTTP-Cache, aber möglicherweise nicht Antworten, die den onfetch-Handler eines Service Workers durchlaufen. declarativeNetRequest wirkt sich nicht auf Antworten aus, die vom Service Worker generiert oder aus CacheStorage abgerufen werden, aber auf Aufrufe von fetch(), die in einem Service Worker erfolgen.

Webzugängliche Ressourcen

Mit einer declarativeNetRequest-Regel kann nicht von einer öffentlichen Ressourcenanfrage zu einer Ressource weitergeleitet werden, die nicht über das Web zugänglich ist. Dies führt zu einem Fehler. Dies gilt auch dann, wenn die angegebene webzugängliche Ressource der weiterleitenden Erweiterung gehört. Um Ressourcen für declarativeNetRequest zu deklarieren, verwenden Sie das Array "web_accessible_resources" des Manifests.

Der Vorgang „append“ wird nur für die folgenden Anfrageheader unterstützt: accept, accept-encoding, accept-language, access-control-request-headers, cache-control, connection, content-language, cookie, forwarded, if-match, if-none-match, keep-alive, range, te, trailer, transfer-encoding, upgrade, user-agent, via, want-digest, x-forwarded-for. Bei dieser Zulassungsliste wird zwischen Groß- und Kleinschreibung unterschieden (Fehler 449152902).

Wenn ein Header an eine Anfrage oder Antwort angehängt wird, verwendet der Browser nach Möglichkeit das entsprechende Trennzeichen.

Beispiele

Codebeispiele

Dynamische Regeln aktualisieren

Das folgende Beispiel zeigt, wie updateDynamicRules() aufgerufen wird. Die Vorgehensweise für updateSessionRules() ist dieselbe.

// Get arrays containing new and old rules
const newRules = await getNewRules();
const oldRules = await chrome.declarativeNetRequest.getDynamicRules();
const oldRuleIds = oldRules.map(rule => rule.id);

// Use the arrays to update the dynamic rules
await chrome.declarativeNetRequest.updateDynamicRules({
  removeRuleIds: oldRuleIds,
  addRules: newRules
});

Statische Regelsätze aktualisieren

Im folgenden Beispiel wird gezeigt, wie Sie Regelsätze aktivieren und deaktivieren können, wobei die Anzahl der verfügbaren und die maximale Anzahl der aktivierten statischen Regelsätze berücksichtigt werden. Das ist der Fall, wenn die Anzahl der benötigten statischen Regeln die zulässige Anzahl überschreitet. Damit das funktioniert, müssen einige Ihrer Regelsätze installiert und einige deaktiviert sein (Einstellung "Enabled" auf false in der Manifestdatei).

async function updateStaticRules(enableRulesetIds, disableCandidateIds) {
  // Create the options structure for the call to updateEnabledRulesets()
  let options = { enableRulesetIds: enableRulesetIds }
  // Get the number of enabled static rules
  const enabledStaticCount = await chrome.declarativeNetRequest.getEnabledRulesets();
  // Compare rule counts to determine if anything needs to be disabled so that
  // new rules can be enabled
  const proposedCount = enableRulesetIds.length;
  if (enabledStaticCount + proposedCount > chrome.declarativeNetRequest.MAX_NUMBER_OF_ENABLED_STATIC_RULESETS) {
    options.disableRulesetIds = disableCandidateIds
  }
  // Update the enabled static rules
  await chrome.declarativeNetRequest.updateEnabledRulesets(options);
}

Regelbeispiele

Die folgenden Beispiele veranschaulichen, wie Chrome Regeln in einer Erweiterung priorisiert. Wenn Sie sie überprüfen, sollten Sie die Priorisierungsregeln in einem separaten Fenster öffnen.

Der Schlüssel „priority“

Für diese Beispiele ist die Hostberechtigung für *://*.example.com/* erforderlich.

Um die Priorität einer bestimmten URL zu ermitteln, sehen Sie sich den (vom Entwickler definierten) "priority"-Schlüssel, den "action"-Schlüssel und den "urlFilter"-Schlüssel an. Diese Beispiele beziehen sich auf die Beispielregeldatei, die darunter angezeigt wird.

Navigation zu https://google.com

Für diese URL gelten zwei Regeln: die Regeln mit den IDs 1 und 4. Die Regel mit der ID 1 wird angewendet, da "block"-Aktionen eine höhere Priorität als "redirect"-Aktionen haben. Die verbleibenden Regeln gelten nicht, da sie für längere URLs vorgesehen sind.

Aufruf von https://google.com/1234

Aufgrund der längeren URL stimmt jetzt zusätzlich zu den Regeln mit den IDs 1 und 4 auch die Regel mit der ID 2. Regel mit ID 2 wird angewendet, da "allow" eine höhere Priorität als "block" und "redirect" hat.

Aufruf von https://google.com/12345

Alle vier Regeln stimmen mit dieser URL überein. Die Regel mit der ID 3 wird angewendet, da ihre vom Entwickler definierte Priorität die höchste in der Gruppe ist.

[
  {
    "id": 1,
    "priority": 1,
    "action": { "type": "block" },
    "condition": {"urlFilter": "||google.com/", "resourceTypes": ["main_frame"] }
  },
  {
    "id": 2,
    "priority": 1,
    "action": { "type": "allow" },
    "condition": { "urlFilter": "||google.com/123", "resourceTypes": ["main_frame"] }
  },
  {
    "id": 3,
    "priority": 2,
    "action": { "type": "block" },
    "condition": { "urlFilter": "||google.com/12345", "resourceTypes": ["main_frame"] }
  },
  {
    "id": 4,
    "priority": 1,
    "action": { "type": "redirect", "redirect": { "url": "https://example.com" } },
    "condition": { "urlFilter": "||google.com/", "resourceTypes": ["main_frame"] }
  },
]

Weiterleitungen

Für das folgende Beispiel ist die Hostberechtigung für *://*.example.com/* erforderlich.

Das folgende Beispiel zeigt, wie eine Anfrage von example.com zu einer Seite innerhalb der Erweiterung umgeleitet wird. Der Erweiterungspfad /a.jpg wird zu chrome-extension://EXTENSION_ID/a.jpg aufgelöst, wobei EXTENSION_ID die ID Ihrer Erweiterung ist. Damit das funktioniert, muss /a.jpg im Manifest als webzugängliche Ressource deklariert werden.

{
  "id": 1,
  "priority": 1,
  "action": { "type": "redirect", "redirect": { "extensionPath": "/a.jpg" } },
  "condition": {
    "urlFilter": "||https://www.example.com/",
    "resourceTypes": ["main_frame"]
  }
}

Im Folgenden wird der Schlüssel "transform" verwendet, um zu einer Subdomain von example.com weiterzuleiten. Es wird ein Domainnamen-Anker („||“) verwendet, um Anfragen mit einem beliebigen Schema von example.com abzufangen. Der Schlüssel "scheme" in "transform" gibt an, dass bei Weiterleitungen zur Subdomain immer „https“ verwendet wird.

{
  "id": 1,
  "priority": 1,
  "action": {
    "type": "redirect",
    "redirect": {
      "transform": { "scheme": "https", "host": "new.example.com" }
    }
  },
  "condition": {
    "urlFilter": "||example.com/",
    "resourceTypes": ["main_frame"]
  }
}

Im folgenden Beispiel werden reguläre Ausdrücke verwendet, um von https://www.abc.xyz.com/path zu https://abc.xyz.com/path weiterzuleiten. Beachten Sie im Schlüssel "regexFilter", wie Punkte maskiert werden und dass die Erfassungsgruppe entweder „abc“ oder „def“ auswählt. Mit dem Schlüssel "regexSubstitution" wird die erste zurückgegebene Übereinstimmung des regulären Ausdrucks mit „\1“ angegeben. In diesem Fall wird „abc“ aus der weitergeleiteten URL erfasst und in die Ersetzung eingefügt.

{
  "id": 1,
  "priority": 1,
  "action": {
    "type": "redirect",
    "redirect": {
      "regexSubstitution": "https://\\1.xyz.com/"
    }
  },
  "condition": {
    "regexFilter": "^https://www\\.(abc|def)\\.xyz\\.com/",
    "resourceTypes": [
      "main_frame"
    ]
  }
}

Im folgenden Beispiel werden alle Cookies sowohl aus einem Hauptframe als auch aus allen untergeordneten Frames entfernt.

{
  "id": 1,
  "priority": 1,
  "action": {
    "type": "modifyHeaders",
    "requestHeaders": [{ "header": "cookie", "operation": "remove" }]
  },
  "condition": { "resourceTypes": ["main_frame", "sub_frame"] }
}

Typen

DomainType

Hier wird beschrieben, ob die Anfrage vom Erstanbieter oder vom Drittanbieter des Frames stammt, in dem sie gestellt wurde. Eine Anfrage gilt als Erstanbieteranfrage, wenn sie dieselbe Domain (eTLD+1) wie der Frame hat, in dem sie gestellt wurde.

Enum

„firstParty“
Die Netzwerkanfrage stammt von der Quelle des Frames, in dem sie ausgelöst wurde.

„thirdParty“
Die Netzwerkanfrage stammt von einem Drittanbieter im Frame, in dem sie generiert wurde.

ExtensionActionOptions

Attribute

GetDisabledRuleIdsOptions

Attribute

GetRulesFilter

Attribute

Attribute

Hier werden die möglichen Vorgänge für eine „modifyHeaders“-Regel beschrieben.

Enum

append
Fügt einen neuen Eintrag für den angegebenen Header hinzu. Beim Ändern der Header einer Anfrage wird dieser Vorgang nur für bestimmte Header unterstützt.

„set“
Legt einen neuen Wert für den angegebenen Header fest und entfernt alle vorhandenen Header mit demselben Namen.

remove
Entfernt alle Einträge für den angegebenen Header.

IsRegexSupportedResult

Attribute

MatchedRule

Attribute

MatchedRuleInfo

Attribute

MatchedRuleInfoDebug

Attribute

MatchedRulesFilter

Attribute

Attribute

QueryKeyValue

Attribute

QueryTransform

Attribute

Redirect

Attribute

RegexOptions

Attribute

RequestDetails

Attribute

RequestMethod

Dies beschreibt die HTTP-Anfragemethode einer Netzwerkanfrage.

Enum

„connect“

„delete“

"get"

"head"

"options"

"patch"

"post"

"put"

"other"

ResourceType

Hier wird der Ressourcentyp der Netzwerkanfrage beschrieben.

Enum

"main_frame"

"sub_frame"

"stylesheet"

"script"

"image"

"font"

„object“

"xmlhttprequest"

„ping“

"csp_report"

"media"

"websocket"

"webtransport"

"webbundle"

"other"

Rule

Attribute

RuleAction

Attribute

RuleActionType

Beschreibt die Art der Aktion, die ausgeführt werden soll, wenn eine bestimmte RuleCondition übereinstimmt.

Enum

block
Netzwerkanfrage blockieren

„redirect“
Leite die Netzwerkanfrage weiter.

„allow“
Die Netzwerkanfrage zulassen. Die Anfrage wird nicht abgefangen, wenn es eine Zulassungsregel gibt, die mit ihr übereinstimmt.

"upgradeScheme"
Das Schema der URL für Netzwerkanfragen wird auf „https“ aktualisiert, wenn die Anfrage „http“ oder „ftp“ ist.

„modifyHeaders“
Anfrage-/Antwortheader aus der Netzwerkanfrage ändern.

allowAllRequests
Alle Anfragen innerhalb einer Frame-Hierarchie zulassen, einschließlich der Frame-Anfrage selbst.

RuleCondition

Attribute

RuleConditionKeys

Enum

"urlFilter"

"regexFilter"

"isUrlFilterCaseSensitive"

"initiatorDomains"

"excludedInitiatorDomains"

„requestDomains“

"excludedRequestDomains"

"topDomains"

"excludedTopDomains"

„domains“

"excludedDomains"

"resourceTypes"

"excludedResourceTypes"

"requestMethods"

"excludedRequestMethods"

"domainType"

"tabIds"

"excludedTabIds"

"responseHeaders"

"excludedResponseHeaders"

Ruleset

Attribute

RulesMatchedDetails

Attribute

TabActionCountUpdate

Attribute

TestMatchOutcomeResult

Attribute

TestMatchRequestDetails

Attribute

UnsupportedRegexReason

Beschreibt den Grund, warum ein bestimmter regulärer Ausdruck nicht unterstützt wird.

Enum

"syntaxError"
Der reguläre Ausdruck ist syntaktisch falsch oder verwendet Funktionen, die in der RE2-Syntax nicht verfügbar sind.

"memoryLimitExceeded"
Der reguläre Ausdruck überschreitet das Speicherlimit.

UpdateRuleOptions

Attribute

UpdateRulesetOptions

Attribute

UpdateStaticRulesOptions

Attribute

URLTransform

Attribute

Attribute

DYNAMIC_RULESET_ID

Regelsatz-ID für die dynamischen Regeln, die von der Erweiterung hinzugefügt werden.

GETMATCHEDRULES_QUOTA_INTERVAL

Das Zeitintervall, innerhalb dessen MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL getMatchedRules-Aufrufe erfolgen können, angegeben in Minuten. Zusätzliche Aufrufe schlagen sofort fehl und runtime.lastError wird festgelegt. Hinweis: getMatchedRules-Aufrufe, die mit einer Nutzeraktion verknüpft sind, sind vom Kontingent ausgenommen.

GUARANTEED_MINIMUM_STATIC_RULES

Die Mindestanzahl statischer Regeln, die einer Erweiterung in allen aktivierten statischen Regelsätzen garantiert werden. Alle Regeln über diesem Limit werden auf das globale Limit für statische Regeln angerechnet.

MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL

Die Anzahl der Aufrufe von getMatchedRules innerhalb eines Zeitraums von GETMATCHEDRULES_QUOTA_INTERVAL.

MAX_NUMBER_OF_DYNAMIC_RULES

Die maximale Anzahl dynamischer Regeln, die eine Erweiterung hinzufügen kann.

MAX_NUMBER_OF_ENABLED_STATIC_RULESETS

Die maximale Anzahl statischer Rulesets, die eine Erweiterung gleichzeitig aktivieren kann.

MAX_NUMBER_OF_REGEX_RULES

Die maximale Anzahl von Regeln für reguläre Ausdrücke, die eine Erweiterung hinzufügen kann. Dieses Limit wird separat für die dynamischen Regeln und die in der Datei mit den Regelressourcen angegebenen Regeln ausgewertet.

MAX_NUMBER_OF_SESSION_RULES

Die maximale Anzahl von regelspezifischen Regeln, die eine Erweiterung hinzufügen kann.

MAX_NUMBER_OF_STATIC_RULESETS

Die maximale Anzahl statischer Rulesets, die eine Erweiterung als Teil des Manifestschlüssels "rule_resources" angeben kann.

MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES

Die maximale Anzahl von „unsicheren“ dynamischen Regeln, die eine Erweiterung hinzufügen kann.

MAX_NUMBER_OF_UNSAFE_SESSION_RULES

Die maximale Anzahl von „unsicheren“ regelspezifischen Regeln, die eine Erweiterung hinzufügen kann.

SESSION_RULESET_ID

Regelsatz-ID für die von der Erweiterung hinzugefügten sitzungsbezogenen Regeln.

Methoden

getAvailableStaticRuleCount()

chrome.declarativeNetRequest.getAvailableStaticRuleCount(): Promise

Gibt die Anzahl der statischen Regeln zurück, die eine Erweiterung aktivieren kann, bevor das globale Limit für statische Regeln erreicht wird.

Ausgabe

getDisabledRuleIds()

chrome.declarativeNetRequest.getDisabledRuleIds(
  options: GetDisabledRuleIdsOptions,
): Promise<number[]>

Gibt die Liste der statischen Regeln im angegebenen Ruleset zurück, die derzeit deaktiviert sind.

Parameter

Ausgabe

getDynamicRules()

chrome.declarativeNetRequest.getDynamicRules(
  filter?: GetRulesFilter,
): Promise<Rule[]>

Gibt die aktuelle Gruppe dynamischer Regeln für die Erweiterung zurück. Anrufer können die Liste der abgerufenen Regeln optional filtern, indem sie ein filter angeben.

Parameter

Ausgabe

getEnabledRulesets()

chrome.declarativeNetRequest.getEnabledRulesets(): Promise<string[]>

Gibt die IDs für die aktuelle Gruppe aktivierter statischer Regelsätze zurück.

Ausgabe

getMatchedRules()

chrome.declarativeNetRequest.getMatchedRules(
  filter?: MatchedRulesFilter,
): Promise<RulesMatchedDetails>

Gibt alle Regeln zurück, die für die Erweiterung zutreffen. Anrufer können die Liste der übereinstimmenden Regeln optional filtern, indem sie ein filter angeben. Diese Methode ist nur für Erweiterungen mit der Berechtigung "declarativeNetRequestFeedback" oder der Berechtigung "activeTab" für die in filter angegebene tabId verfügbar. Hinweis: Regeln, die nicht mit einem aktiven Dokument verknüpft sind und vor mehr als fünf Minuten abgeglichen wurden, werden nicht zurückgegeben.

Parameter

Ausgabe

getSessionRules()

chrome.declarativeNetRequest.getSessionRules(
  filter?: GetRulesFilter,
): Promise<Rule[]>

Gibt die aktuell festgelegten sitzungsbezogenen Regeln für die Erweiterung zurück. Anrufer können die Liste der abgerufenen Regeln optional filtern, indem sie ein filter angeben.

Parameter

Ausgabe

isRegexSupported()

chrome.declarativeNetRequest.isRegexSupported(
  regexOptions: RegexOptions,
): Promise<IsRegexSupportedResult>

Prüft, ob der angegebene reguläre Ausdruck als regexFilter-Regelbedingung unterstützt wird.

Parameter

Ausgabe

setExtensionActionOptions()

chrome.declarativeNetRequest.setExtensionActionOptions(
  options: ExtensionActionOptions,
): Promise

Konfiguriert, ob die Anzahl der Aktionen für Tabs als Badge-Text der Erweiterungsaktion angezeigt werden soll, und bietet eine Möglichkeit, diese Anzahl zu erhöhen.

Parameter

Ausgabe

testMatchOutcome()

chrome.declarativeNetRequest.testMatchOutcome(
  request: TestMatchRequestDetails,
): Promise<TestMatchOutcomeResult>

Prüft, ob eine der declarativeNetRequest-Regeln der Erweiterung mit einer hypothetischen Anfrage übereinstimmen würde. Hinweis: Nur für entpackte Erweiterungen verfügbar, da diese Funktion nur während der Entwicklung von Erweiterungen verwendet werden soll.

Parameter

Ausgabe

updateDynamicRules()

chrome.declarativeNetRequest.updateDynamicRules(
  options: UpdateRuleOptions,
): Promise

Ändert die aktuellen dynamischen Regeln für die Erweiterung. Die Regeln mit den in options.removeRuleIds aufgeführten IDs werden zuerst entfernt und dann die in options.addRules angegebenen Regeln hinzugefügt. Hinweise:

Parameter

Ausgabe

updateEnabledRulesets()

chrome.declarativeNetRequest.updateEnabledRulesets(
  options: UpdateRulesetOptions,
): Promise

Aktualisiert die Gruppe der aktivierten statischen Regelsätze für die Erweiterung. Die Regelsätze mit den in options.disableRulesetIds aufgeführten IDs werden zuerst entfernt und dann die in options.enableRulesetIds aufgeführten Regelsätze hinzugefügt. Die aktivierten statischen Regelsätze werden sitzungsübergreifend, aber nicht über Erweiterungsupdates hinweg beibehalten. Das heißt, der Manifestschlüssel rule_resources bestimmt die aktivierten statischen Regelsätze bei jedem Erweiterungsupdate.

Parameter

Ausgabe

updateSessionRules()

chrome.declarativeNetRequest.updateSessionRules(
  options: UpdateRuleOptions,
): Promise

Ändert die aktuellen sitzungsbezogenen Regeln für die Erweiterung. Die Regeln mit den in options.removeRuleIds aufgeführten IDs werden zuerst entfernt und dann die in options.addRules angegebenen Regeln hinzugefügt. Hinweise:

Parameter

Ausgabe

updateStaticRules()

chrome.declarativeNetRequest.updateStaticRules(
  options: UpdateStaticRulesOptions,
): Promise

Deaktiviert und aktiviert einzelne statische Regeln in einem Ruleset. Änderungen an Regeln, die zu einem deaktivierten Ruleset gehören, werden erst wirksam, wenn dieser wieder aktiviert wird.

Parameter

Ausgabe

Ereignisse

onRuleMatchedDebug

chrome.declarativeNetRequest.onRuleMatchedDebug.addListener(
  callback: function,
)

Wird ausgelöst, wenn eine Regel mit einer Anfrage übereinstimmt. Nur für entpackte Erweiterungen mit der Berechtigung "declarativeNetRequestFeedback" verfügbar, da sie nur für Debugging-Zwecke verwendet werden soll.

Parameter

Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.

Zuletzt aktualisiert: 2025-12-12 (UTC).