Описание
 API chrome.declarativeNetRequest используется для блокировки или изменения сетевых запросов путём указания декларативных правил. Это позволяет расширениям изменять сетевые запросы, не перехватывая их и не просматривая их содержимое, обеспечивая тем самым большую конфиденциальность.
Разрешения
declarativeNetRequestdeclarativeNetRequestWithHostAccess declarativeNetRequestFeedback
 host_permissions
Доступность
Манифест
 Помимо описанных выше разрешений, некоторые типы наборов правил, в частности статические, требуют объявления ключа манифеста "declarative_net_request" , который должен представлять собой словарь с единственным ключом "rule_resources" . Этот ключ представляет собой массив, содержащий словари типа Ruleset , как показано ниже. (Обратите внимание, что имя «Ruleset» не отображается в JSON-коде манифеста, поскольку это всего лишь массив.) Статические наборы правил рассматриваются далее в этом документе.
{
  "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/*"
  ],
  ...
}
Концепции и использование
Чтобы использовать этот API, укажите один или несколько наборов правил. Набор правил содержит массив правил. Каждое правило выполняет одно из следующих действий:
- Блокировать сетевой запрос.
- Обновите схему (с http на https).
- Предотвратите блокировку запроса, отменив все соответствующие правила блокировки.
- Перенаправление сетевого запроса.
- Измените заголовки запроса или ответа.
Существует три типа наборов правил, управление которыми немного различается.
- Динамичный
- Сохраняются между сеансами браузера и обновлениями расширений и управляются с помощью JavaScript, пока используется расширение.
- Сессия
- Сбрасывается при закрытии браузера и установке новой версии расширения. Правила сеанса управляются с помощью JavaScript, пока используется расширение.
- Статичный
- Упаковывается, устанавливается и обновляется при установке или обновлении расширения. Статические правила хранятся в файлах правил в формате JSON и перечислены в файле манифеста.
В следующих нескольких разделах подробно описываются типы наборов правил.
Динамические и сеансовые наборы правил
Во время использования расширения динамические и сеансовые наборы правил управляются с помощью JavaScript.
- Динамические правила сохраняются во всех сеансах браузера и обновлениях расширений.
- Правила сеанса очищаются при закрытии браузера и установке новой версии расширения.
 Существует только один тип каждого набора правил. Расширение может динамически добавлять или удалять правила, вызывая updateDynamicRules() и updateSessionRules() , при условии, что ограничения правил не превышаются. Подробнее об ограничениях правил см. в разделе Ограничения правил . Пример можно увидеть в разделе Примеры кода .
Статические наборы правил
 В отличие от динамических и сеансовых правил, статические правила упаковываются, устанавливаются и обновляются при установке или обновлении расширения. Они хранятся в файлах правил в формате JSON, которые указываются расширению с помощью ключей "declarative_net_request" и "rule_resources" , как описано выше , а также одного или нескольких словарей наборов Ruleset . Словарь Ruleset содержит путь к файлу правил, идентификатор набора правил в файле и информацию о том, включен или отключен набор правил. Последние два параметра важны при программном включении или отключении набора правил.
{
  ...
  "declarative_net_request" : {
    "rule_resources" : [{
      "id": "ruleset_1",
      "enabled": true,
      "path": "rules_1.json"
    },
    ...
    ]
  }
  ...
}
Для проверки файлов правил загрузите распакованное расширение . Ошибки и предупреждения о недействительных статических правилах отображаются только для распакованных расширений. Недействительные статические правила в упакованных расширениях игнорируются.
Включение и отключение статических правил и наборов правил
Как отдельные статические правила, так и полные статические наборы правил могут быть включены или отключены во время выполнения.
Набор включённых статических правил и наборов правил сохраняется между сеансами браузера. Ни те, ни другие не сохраняются при обновлениях расширений, то есть после обновления доступны только те правила, которые вы решили оставить в файлах правил.
 Из соображений производительности также существуют ограничения на количество правил и наборов правил, которые можно включить одновременно. Вызовите метод getAvailableStaticRuleCount() чтобы проверить количество дополнительных правил, которые можно включить. Сведения об ограничениях правил см. в разделе Ограничения правил .
 Чтобы включить или отключить статические правила , вызовите метод updateStaticRules() . Этот метод принимает объект UpdateStaticRulesOptions , содержащий массивы идентификаторов правил, которые нужно включить или отключить. Идентификаторы определяются с помощью ключа "id" словаря Ruleset .
 Чтобы включить или отключить статические наборы правил , вызовите метод updateEnabledRulesets() . Этот метод принимает объект UpdateRulesetOptions , содержащий массивы идентификаторов наборов правил, которые нужно включить или отключить. Идентификаторы определяются с помощью ключа "id" словаря Ruleset .
Правила сборки
 Независимо от типа, правило начинается с четырёх полей, как показано ниже. Ключи "id" и "priority" принимают числовое значение, а ключи "action" и "condition" могут содержать несколько условий блокировки и перенаправления. Следующее правило блокирует все запросы скриптов с "foo.com" на любой URL-адрес с подстрокой "abc" .
{
  "id" : 1,
  "priority": 1,
  "action" : { "type" : "block" },
  "condition" : {
    "urlFilter" : "abc",
    "initiatorDomains" : ["foo.com"],
    "resourceTypes" : ["script"]
  }
}
urlFilter совпадающие символы
 Ключ "condition" правила позволяет ключу "urlFilter" действовать над URL-адресами в указанном домене. Шаблоны создаются с помощью токенов сопоставления с шаблонами . Ниже приведено несколько примеров.
| urlFilter | Спички | Не совпадает | 
|---|---|---|
| "abc" | https://abcd.com https://example.com/abcd | https://ab.com | 
| "abc*d" | https://abcd.com https://example.com/abcxyzd | https://abc.com | 
| "||a.example.com" | https://a.example.com/ https://baexample.com/xyz | https://example.com/ | 
| "|https*" | https://example.com | http://example.com/ http://https.com | 
| "example*^123|" | https://example.com/123 http://abc.com/example?123 | https://example.com/1234 https://abc.com/example0123 | 
Приоритизация правил
Правила активируются запросами, отправленными с веб-страниц. Если одному запросу соответствует несколько правил, им необходимо назначить приоритет. В этом разделе объясняется, как они назначаются. Приоритезация происходит в два этапа.
- Приоритет определяется для правил внутри расширения.
- Если более одного расширения могут применить правило к запросу, приоритет определяется для всех расширений, соответствующих конкретному запросу.
Рассуждая о сопоставлении таким образом: любое правило, которому определенное расширение отдает приоритет, будет иметь больший приоритет по сравнению с правилами других расширений.
Приоритизация правил в расширении
В рамках одного расширения приоритеты определяются с помощью следующего процесса:
-  Возвращается правило с наивысшим приоритетом, определенным разработчиком (другими словами, поле "priority").
- Если существует более одного правила с наивысшим приоритетом, определенным разработчиком, правила ранжируются по приоритету с использованием поля - "action"в следующем порядке:-  allow
-  allowAllRequests
-  block
-  upgradeScheme
-  redirect
 
-  
- Если тип действия не - blockили- redirect, проверяются все соответствующие правила- modifyHeaders. Имейте в виду, что если есть правила с приоритетом, заданным разработчиком, ниже приоритета, указанного для- allowи- allowAllRequests, такие правила игнорируются.
- Если несколько правил изменяют один и тот же заголовок, изменение определяется заданным разработчиком полем - "priority"и указанными операциями.- Если правило добавляется к заголовку, то правила с более низким приоритетом могут добавляться только к этому заголовку. Операции установки и удаления не допускаются.
- Если правило устанавливает заголовок, то правила с более низким приоритетом могут только добавлять данные к этому заголовку. Другие изменения не допускаются.
- Если правило удаляет заголовок, то правила с более низким приоритетом не могут дальше изменять заголовок.
 
Приоритет правил между расширениями
Если запросу соответствует только одно расширение, применяется это правило. Если запросу соответствует несколько расширений, применяется следующий процесс:
- Правила ранжируются по приоритету с помощью поля - "action"в следующем порядке:-  block
-  redirectилиupgradeScheme
-  allowилиallowAllRequests
 
-  
- Если соответствует более одного правила, приоритет имеет последнее установленное расширение. 
Пределы правил
Загрузка и оценка правил в браузере снижает производительность, поэтому при использовании API действуют некоторые ограничения. Ограничения зависят от типа используемого правила.
Статические правила
 Статические правила — это правила, указанные в файлах правил, объявленных в файле манифеста. Расширение может указать до 50 статических наборов правил в рамках ключа манифеста "rule_resources" , но только 10 из этих наборов правил могут быть включены одновременно. Последнее называется MAX_NUMBER_OF_ENABLED_STATIC_RULESETS . В совокупности эти наборы правил гарантированно содержат не менее 30 000 правил. Это называется GUARANTEED_MINIMUM_STATIC_RULES .
 Количество доступных правил после этого зависит от того, сколько правил включено во всех расширениях, установленных в браузере пользователя. Это число можно узнать во время выполнения, вызвав метод getAvailableStaticRuleCount() . Пример можно увидеть в разделе «Примеры кода» .
Динамические и сеансовые правила
 Ограничения, применяемые к динамическим и сеансовым правилам, проще, чем к статическим. Общее количество правил не может превышать 5000. Это называется MAX_NUMBER_OF_DYNAMIC_AND_SESSION_RULES .
Правила, использующие регулярные выражения
Все типы правил могут использовать регулярные выражения; однако общее количество правил регулярных выражений каждого типа не может превышать 1000. Это называется MAX_NUMBER_OF_REGEX_RULES .
Кроме того, размер каждого правила после компиляции должен быть менее 2 КБ. Это примерно соответствует сложности правила. При попытке загрузить правило, превышающее этот лимит, вы увидите предупреждение, подобное показанному ниже, и правило будет проигнорировано.
rules_1.json: Rule with id 1 specified a more complext regex than allowed
as part of the "regexFilter" key.
Взаимодействие с работниками сферы услуг
 Запрос declarativeNetRequest применяется только к запросам, достигающим сетевого стека. Это включает ответы из HTTP-кеша, но может не включать ответы, проходящие через обработчик onfetch сервис-воркера. Запрос declarativeNetRequest не повлияет на ответы, сгенерированные сервис-воркером или извлеченные из CacheStorage , но повлияет на вызовы fetch() выполняемые в сервис-воркере.
Доступные в Интернете ресурсы
 Правило declarativeNetRequest не может перенаправить запрос публичного ресурса на ресурс, недоступный через Интернет. Это приводит к ошибке. Это справедливо даже в том случае, если указанный ресурс, доступный через Интернет, принадлежит расширению, выполняющему перенаправление. Чтобы объявить ресурсы для declarativeNetRequest, используйте массив "web_accessible_resources" манифеста.
Примеры
Примеры кода
Обновление динамических правил
 В следующем примере показано, как вызвать updateDynamicRules() . Процедура для updateSessionRules() та же.
// 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
});
Обновление статических наборов правил
 В следующем примере показано, как включить и отключить наборы правил с учётом количества доступных и максимально допустимого количества включённых статических наборов правил. Это можно сделать, когда количество необходимых статических правил превышает допустимое. Для этого некоторые наборы правил должны быть установлены, а некоторые — отключены (установив параметр "Enabled" в значение false в файле манифеста).
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);
}
Примеры правил
Примеры ниже иллюстрируют, как Chrome определяет приоритет правил в расширении. При их просмотре вы можете открыть правила определения приоритета в отдельном окне.
Клавиша «приоритет»
 Для этих примеров требуется разрешение хоста на *://*.example.com/* .
 Чтобы определить приоритет конкретного URL-адреса, проверьте ключи "priority" (определённые разработчиком), "action" и "urlFilter" . Эти примеры относятся к файлу правил, приведённому ниже.
- Переход на https://google.com
-  На этот URL распространяются два правила: правила с идентификаторами 1 и 4. Правило с идентификатором 1 применяется, поскольку действия "block"имеют более высокий приоритет, чем действия"redirect". Остальные правила не применяются, поскольку они предназначены для более длинных URL.
- Переход на https://google.com/1234
-  Из-за более длинного URL-адреса теперь применяется правило с идентификатором 2 в дополнение к правилам с идентификаторами 1 и 4. Правило с идентификатором 2 применяется, поскольку "allow"имеет более высокий приоритет, чем"block"и"redirect".
- Переход на https://google.com/12345
- Все четыре правила соответствуют этому URL. Правило с идентификатором 3 применяется, поскольку его приоритет, заданный разработчиком, является наивысшим в группе.
[
  {
    "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"] }
  },
]
Перенаправления
 В примере ниже требуется разрешение хоста на *://*.example.com/* .
 В следующем примере показано, как перенаправить запрос с example.com на страницу внутри самого расширения. Путь расширения /a.jpg преобразуется в chrome-extension://EXTENSION_ID/a.jpg , где EXTENSION_ID — это идентификатор вашего расширения. Для этого в манифесте необходимо указать /a.jpg как доступный веб-ресурс .
{
  "id": 1,
  "priority": 1,
  "action": { "type": "redirect", "redirect": { "extensionPath": "/a.jpg" } },
  "condition": {
    "urlFilter": "https://www.example.com",
    "resourceTypes": ["main_frame"]
  }
}
 В следующем примере ключ "transform" используется для перенаправления на поддомен example.com. Он использует якорь доменного имени («||») для перехвата запросов с любой схемой от example.com. Ключ "scheme" в "transform" указывает, что перенаправления на поддомен всегда будут использовать протокол «https».
{
  "id": 1,
  "priority": 1,
  "action": {
    "type": "redirect",
    "redirect": {
      "transform": { "scheme": "https", "host": "new.example.com" }
    }
  },
  "condition": {
    "urlFilter": "||example.com",
    "resourceTypes": ["main_frame"]
  }
}
 В следующем примере регулярные выражения используются для перенаправления с https://www.abc.xyz.com/path на https://abc.xyz.com/path . Обратите внимание, что в ключе "regexFilter" точки экранируются, а группа захвата выбирает "abc" или "def". Ключ "regexSubstitution" указывает первое возвращённое совпадение регулярного выражения с помощью "\1". В этом случае "abc" извлекается из перенаправленного URL и добавляется в подстановку. 
{
  "id": 1,
  "priority": 1,
  "action": {
    "type": "redirect",
    "redirect": {
      "regexSubstitution": "https://\\1.xyz.com/"
    }
  },
  "condition": {
    "regexFilter": "^https://www\\.(abc|def)\\.xyz\\.com/",
    "resourceTypes": [
      "main_frame"
    ]
  }
}
Заголовки
В следующем примере удаляются все файлы cookie как из основного фрейма, так и из всех подфреймов.
{
  "id": 1,
  "priority": 1,
  "action": {
    "type": "modifyHeaders",
    "requestHeaders": [{ "header": "cookie", "operation": "remove" }]
  },
  "condition": { "resourceTypes": ["main_frame", "sub_frame"] }
}
Типы
DomainType
Это определяет, является ли запрос первичным или сторонним по отношению к фрейму, из которого он был создан. Запрос считается первичным, если он имеет тот же домен (eTLD+1), что и фрейм, из которого он был создан.
Перечисление
 "firstParty"  "третья сторона"
 Сетевой запрос является первым участником кадра, в котором он возник. 
 Сетевой запрос является третьим по отношению к фрейму, в котором он возник.
ExtensionActionOptions
Характеристики
- displayActionCountAsBadgeTextлогическое необязательное Отображать ли автоматически количество действий на странице в тексте значка расширения. Эта настройка сохраняется между сеансами. 
- вкладкаОбновлениеTabActionCountUpdate необязательно Хром 89+Подробная информация о том, как следует корректировать количество действий вкладки. 
GetDisabledRuleIdsOptions
Характеристики
- rulesetIdнить Идентификатор, соответствующий статическому Ruleset.
GetRulesFilter
Характеристики
- идентификаторы правилномер[] необязательно Если указано, включаются только правила с совпадающими идентификаторами. 
HeaderInfo
Характеристики
- исключенные значениястрока[] необязательная Если указано, это условие не выполняется, если заголовок существует, но его значение содержит хотя бы один элемент из этого списка. Используется тот же синтаксис шаблона сопоставления, что и values.
- заголовокнить Имя заголовка. Это условие выполняется только в том случае, если не указаны ни values, ниexcludedValues.
- ценностистрока[] необязательная Если указано, это условие выполняется, если значение заголовка соответствует хотя бы одному шаблону из этого списка. Поддерживается сопоставление значений заголовков без учёта регистра, а также следующие конструкции: '*' : Соответствует любому количеству символов. '?' : Соответствует нулю или одному символу(ам). Символы «*» и «?» можно экранировать обратной косой чертой, например, «\*» и «\?». 
HeaderOperation
Здесь описываются возможные операции для правила «modifyHeaders».
Перечисление
 "добавить"  "набор"  "удалять"
 Добавляет новую запись для указанного заголовка. При изменении заголовков запроса эта операция поддерживается только для определённых заголовков . 
 Устанавливает новое значение для указанного заголовка, удаляя все существующие заголовки с тем же именем. 
 Удаляет все записи для указанного заголовка.
IsRegexSupportedResult
Характеристики
- поддерживаетсябулев 
- причинаНеобязательный параметр UnsupportedRegexReason Указывает причину, по которой регулярное выражение не поддерживается. Доступно только в том случае, если isSupportedравно false.
MatchedRule
Характеристики
- ruleIdчисло Идентификатор правила сопоставления. 
- rulesetIdнить Идентификатор Rulesetк которому принадлежит данное правило. Для правила, созданного из набора динамических правил, этот идентификатор будет равенDYNAMIC_RULESET_ID.
MatchedRuleInfo
Характеристики
- правило
- tabIdчисло TabId вкладки, с которой был отправлен запрос, если вкладка всё ещё активна. В противном случае -1. 
- отметка временичисло Время срабатывания правила. Временные метки будут соответствовать соглашению Javascript для времени, то есть количеству миллисекунд с начала эпохи. 
MatchedRuleInfoDebug
Характеристики
- запросПодробная информация о запросе, для которого было выполнено правило. 
- правило
MatchedRulesFilter
Характеристики
- minTimeStampномер необязательно Если указано, сопоставляет только правила после указанной временной метки. 
- tabIdномер необязательно Если указано, сопоставляет только правила для заданной вкладки. Если указано значение -1, сопоставляет правила, не связанные ни с одной активной вкладкой. 
ModifyHeaderInfo
Характеристики
- заголовокнить Имя заголовка, который необходимо изменить. 
- операцияОперация, которая должна быть выполнена над заголовком. 
- ценитьстрока необязательная Новое значение заголовка. Необходимо указать для операций appendиset.
QueryKeyValue
Характеристики
- ключнить 
- replaceOnlyлогическое необязательное Хром 94+Если задано значение true, ключ запроса заменяется только в том случае, если он уже присутствует. В противном случае ключ также добавляется, если он отсутствует. Значение по умолчанию — false. 
- ценитьнить 
QueryTransform
Характеристики
- addOrReplaceParamsQueryKeyValue [] необязательно Список пар ключ-значение запроса, которые необходимо добавить или заменить. 
- removeParamsстрока[] необязательная Список ключей запроса, которые необходимо удалить. 
Redirect
Характеристики
- extensionPathстрока необязательная Путь относительно каталога расширения. Должен начинаться с «/». 
- regexПодстановкастрока необязательная Шаблон подстановки для правил, в которых указан фильтр regexFilter. Первое совпадение с фильтромregexFilterв URL будет заменено этим шаблоном. ВregexSubstitutionдля вставки соответствующих групп захвата можно использовать цифры, экранированные обратной косой чертой (от \1 до \9). \0 относится ко всему совпадающему тексту.
- трансформироватьURLTransform необязательно Преобразования URL для выполнения. 
- URL-адресстрока необязательная URL-адрес перенаправления. Перенаправления на URL-адреса JavaScript запрещены. 
RegexOptions
Характеристики
- isCaseSensitiveлогическое необязательное Учитывает ли указанное regex? Значение по умолчанию — true.
- регулярное выражениенить Регулярное выражение для проверки. 
- требуетсяЗахватлогическое необязательное Требуется ли захват для указанного regex. Захват требуется только для правил перенаправления, которые определяют действиеregexSubstition. Значение по умолчанию — false.
RequestDetails
Характеристики
- documentIdстрока необязательная Хром 106+Уникальный идентификатор документа фрейма, если это запрос фрейма. 
- жизненный цикл документаDocumentLifecycle (необязательно) Хром 106+Жизненный цикл документа фрейма, если это запрос на фрейм. 
- frameIdчисло Значение 0 указывает на то, что запрос выполняется в основном фрейме; положительное значение указывает идентификатор подфрейма, в котором выполняется запрос. Если загружен документ (под)фрейма ( type—main_frameилиsub_frame),frameIdуказывает идентификатор этого фрейма, а не идентификатор внешнего фрейма. Идентификаторы фреймов уникальны в пределах вкладки.
- frameTypeFrameType (необязательно) Хром 106+Тип фрейма, если это запрос фрейма. 
- инициаторстрока необязательная Источник, откуда был инициирован запрос. Не изменяется при перенаправлениях. Если это непрозрачный источник, будет использована строка «null». 
- методнить Стандартный метод HTTP. 
- parentDocumentIdстрока необязательная Хром 106+Уникальный идентификатор родительского документа фрейма, если это запрос фрейма и у него есть родительский документ. 
- parentFrameIdчисло Идентификатор кадра, который является оболочкой кадра, отправившего запрос. Установите значение -1, если родительского кадра не существует. 
- requestIdнить Идентификатор запроса. Идентификаторы запросов уникальны в пределах сеанса браузера. 
- tabIdчисло Идентификатор вкладки, в которой выполнен запрос. Установите значение -1, если запрос не связан с вкладкой. 
- типТип ресурса запроса. 
- URL-адреснить URL-адрес запроса. 
RequestMethod
Здесь описывается метод HTTP-запроса сетевого запроса.
Перечисление
 "соединять"   "удалить"   "получать"   "голова"   "параметры"   "пластырь"   "почта"   "помещать"   "другой" 
ResourceType
Здесь описывается тип ресурса сетевого запроса.
Перечисление
 "main_frame"   "sub_frame"   "таблица стилей"   "сценарий"   "изображение"   "шрифт"   "объект"   "xmlhttprequest"   "пинг"   "csp_report"   "СМИ"   "вебсокет"   "вебтранспорт"   "webbundle"   "другой" 
Rule
Характеристики
- действиеДействие, которое следует предпринять, если это правило срабатывает. 
- состояниеУсловие, при котором срабатывает это правило. 
- идентификаторчисло Идентификатор, однозначно определяющий правило. Обязательный и должен быть >= 1. 
- приоритетномер необязательно Приоритет правила. По умолчанию 1. При указании приоритета должен быть >= 1. 
RuleAction
Характеристики
- перенаправлениеПеренаправление необязательно Описывает, как должно выполняться перенаправление. Действительно только для правил перенаправления. 
- requestHeadersModifyHeaderInfo [] необязательно Хром 86+Заголовки запроса, которые необходимо изменить. Действительно только если RuleActionType — «modifyHeaders». 
- responseHeadersModifyHeaderInfo [] необязательно Хром 86+Заголовки ответа, которые необходимо изменить для запроса. Действительно только если RuleActionType — «modifyHeaders». 
- типТип действия, которое необходимо выполнить. 
RuleActionType
Описывает тип действия, которое следует предпринять, если заданное условие правила совпадает.
Перечисление
 "блокировать"  «перенаправление»  "позволять"  "upgradeScheme"  "modifyHeaders"  "allowAllRequests"
 Заблокировать сетевой запрос. 
 Перенаправить сетевой запрос. 
 Разрешить сетевой запрос. Запрос не будет перехвачен, если есть соответствующее разрешающее правило. 
 Обновите схему URL сетевого запроса до https, если запрос — http или ftp. 
 Измените заголовки запроса/ответа из сетевого запроса. 
 Разрешить все запросы внутри иерархии фрейма, включая сам запрос фрейма.
RuleCondition
Характеристики
- Тип_доменаDomainType необязательно Указывает, является ли сетевой запрос основным или сторонним по отношению к домену, с которого он был отправлен. Если этот параметр не указан, принимаются все запросы. 
- доменыстрока[] необязательная Не рекомендуется с версии Chrome 101Вместо этого используйте initiatorDomainsПравило будет соответствовать только сетевым запросам, исходящим из списка domains.
- исключенныедоменыстрока[] необязательная Не рекомендуется с версии Chrome 101Вместо этого используйте excludedInitiatorDomainsПравило не будет соответствовать сетевым запросам, исходящим из списка excludedDomains.
- исключенныеInitiatorDomainsстрока[] необязательная Хром 101+Правило не будет учитывать сетевые запросы, исходящие из списка excludedInitiatorDomains. Если список пуст или отсутствует, домены не исключаются. Это правило имеет приоритет надinitiatorDomains.Примечания: - Также разрешены поддомены типа «a.example.com».
- Записи должны состоять только из символов ASCII.
- Используйте кодировку punycode для интернационализированных доменов.
- Сопоставляется с инициатором запроса, а не с URL-адресом запроса.
- Поддомены перечисленных доменов также исключены.
 
- исключенныеRequestDomainsстрока[] необязательная Хром 101+Правило не будет учитывать сетевые запросы, если домен соответствует одному из списка excludedRequestDomains. Если список пуст или пропущен, домены не исключаются. Это правило имеет приоритет надrequestDomains.Примечания: - Также разрешены поддомены типа «a.example.com».
- Записи должны состоять только из символов ASCII.
- Используйте кодировку punycode для интернационализированных доменов.
- Поддомены перечисленных доменов также исключены.
 
- исключенныеRequestMethodsRequestMethod [] необязательно Хром 91+Список методов запроса, которые не будут соответствовать правилу. Необходимо указать только один из requestMethodsилиexcludedRequestMethods. Если не указан ни один из них, будут соответствовать все методы запроса.
- исключенныеResourceTypesResourceType [] необязательно Список типов ресурсов, которые не будут соответствовать правилу. Необходимо указать только один из resourceTypesилиexcludedResourceTypes. Если не указан ни один из них, блокируются все типы ресурсов, кроме «main_frame».
- исключенные заголовки ответовHeaderInfo [] необязательно Хром 128+Правило не срабатывает, если запрос соответствует любому условию заголовка ответа в этом списке (если указано). Если указаны оба свойства: excludedResponseHeadersиresponseHeaders, то приоритет имеет свойствоexcludedResponseHeaders.
- исключенныеTabIdsномер[] необязательно Хром 92+Список tabs.Tab.id, которым правило не должно соответствовать. Идентификаторtabs.TAB_ID_NONEисключает запросы, не исходящие из вкладки. Поддерживается только для правил, действующих в рамках сеанса.
- initiatorDomainsстрока[] необязательная Хром 101+Правило будет соответствовать только сетевым запросам, исходящим из списка initiatorDomains. Если список не указан, правило применяется к запросам со всех доменов. Пустой список не допускается.Примечания: - Также разрешены поддомены типа «a.example.com».
- Записи должны состоять только из символов ASCII.
- Используйте кодировку punycode для интернационализированных доменов.
- Сопоставляется с инициатором запроса, а не с URL-адресом запроса.
- Также сопоставляются поддомены перечисленных доменов.
 
- isUrlFilterCaseSensitiveлогическое необязательное Чувствителен ли к регистру urlFilterилиregexFilter(в зависимости от того, какой из них указан). Значение по умолчанию — false.
- regexFilterстрока необязательная Регулярное выражение для сопоставления с URL-адресом сетевого запроса. Оно соответствует синтаксису RE2 . Примечание: можно указать только один из параметров: urlFilterилиregexFilter.Примечание: regexFilterдолжен содержать только символы ASCII. Он сопоставляется с URL-адресом, в котором хост закодирован в формате punycode (в случае интернационализированных доменов), а все остальные символы, не входящие в ASCII, закодированы в формате UTF-8.
- requestDomainsстрока[] необязательная Хром 101+Правило будет применяться только к сетевым запросам, если домен совпадает с одним из списка requestDomains. Если список не указан, правило применяется к запросам со всех доменов. Пустой список не допускается.Примечания: - Также разрешены поддомены типа «a.example.com».
- Записи должны состоять только из символов ASCII.
- Используйте кодировку punycode для интернационализированных доменов.
- Также сопоставляются поддомены перечисленных доменов.
 
- requestMethodsRequestMethod [] необязательно Хром 91+Список методов HTTP-запросов, которым может соответствовать правило. Пустой список не допускается. Примечание: указание условия правила requestMethodsтакже исключит запросы, не являющиеся HTTP(s), тогда как указаниеexcludedRequestMethodsне позволит этого сделать.
- Типы ресурсовResourceType [] необязательно Список типов ресурсов, которым может соответствовать правило. Пустой список не допускается. Примечание: это необходимо указать для правил allowAllRequestsи может включать только типы ресурсовsub_frameиmain_frame.
- responseHeadersHeaderInfo [] необязательно Хром 128+Правило срабатывает, если запрос соответствует любому условию заголовка ответа в этом списке (если указано). 
- tabIdsномер[] необязательно Хром 92+Список tabs.Tab.id, которым должно соответствовать правило. Идентификаторtabs.TAB_ID_NONEсоответствует запросам, не относящимся к вкладке. Пустой список не допускается. Поддерживается только для правил, действующих в рамках сеанса.
- URL-фильтрстрока необязательная Шаблон, сопоставляемый с URL-адресом сетевого запроса. Поддерживаемые конструкции: '*' : Подстановочный знак: соответствует любому количеству символов. '|' : Левый/правый якорь: при использовании в любом из концов шаблона указывает начало/конец URL соответственно. '||' : Якорь доменного имени: если используется в начале шаблона, указывает начало (под)домена URL. «^» : Символ-разделитель. Соответствует чему угодно, кроме буквы, цифры или одного из следующих символов: _,-.. или%. Также соответствует концу URL.Таким образом, urlFilterсостоит из следующих частей: (необязательный левый/доменный якорь) + шаблон + (необязательный правый якорь).Если этот параметр пропущен, будут сопоставлены все URL-адреса. Пустая строка не допускается. Шаблон, начинающийся с ||*не допускается. Вместо него используйте*.Примечание: можно указать только один из параметров: urlFilterилиregexFilter.Примечание: urlFilterдолжен содержать только символы ASCII. Он сопоставляется с URL-адресом, в котором хост закодирован в формате punycode (в случае интернационализированных доменов), а все остальные символы, не входящие в ASCII, закодированы в формате utf-8. Например, если URL-адрес запроса — http://abc.рф?q=ф,urlFilterбудет сопоставляться с URL-адресом http://abc.xn--p1ai/?q=%D1%84.
Ruleset
Характеристики
- включенобулев Включен ли набор правил по умолчанию. 
- идентификаторнить Непустая строка, однозначно идентифицирующая набор правил. Идентификаторы, начинающиеся с «_», зарезервированы для внутреннего использования. 
- путьнить Путь к набору правил JSON относительно каталога расширения. 
RulesMatchedDetails
Характеристики
- rulesMatchedInfoПравила, соответствующие заданному фильтру. 
TabActionCountUpdate
Характеристики
- приращениечисло Величина, на которую увеличивается счётчик действий вкладки. Отрицательные значения уменьшают счётчик. 
- tabIdчисло Вкладка, для которой необходимо обновить счетчик действий. 
TestMatchOutcomeResult
Характеристики
- matchedRulesMatchedRule [] Правила (если таковые имеются), соответствующие гипотетическому запросу. 
TestMatchRequestDetails
Характеристики
- инициаторстрока необязательная URL-адрес инициатора (если есть) для гипотетического запроса. 
- методRequestMethod необязательный Стандартный HTTP-метод гипотетического запроса. По умолчанию используется метод «get» для HTTP-запросов, игнорируется для не-HTTP-запросов. 
- responseHeadersобъект необязательный Хром 129+Заголовки, предоставляемые гипотетическим ответом, если запрос не был заблокирован или перенаправлен до отправки. Представлены как объект, сопоставляющий имя заголовка со списком строковых значений. Если не указано иное, гипотетический ответ вернет пустые заголовки ответа, что может соответствовать правилам, применяемым при отсутствии заголовков. Например {"content-type": ["text/html; charset=utf-8", "multipart/form-data"]}
- tabIdномер необязательно Идентификатор вкладки, в которой выполняется гипотетический запрос. Не обязательно должен соответствовать реальному идентификатору вкладки. Значение по умолчанию -1, что означает, что запрос не связан с вкладкой. 
- типТип ресурса гипотетического запроса. 
- URL-адреснить URL гипотетического запроса. 
UnsupportedRegexReason
Описывает причину, по которой данное регулярное выражение не поддерживается.
Перечисление
 "syntaxError"  "memoryLimitExceeded"
 Регулярное выражение синтаксически неверно или использует функции, недоступные в синтаксисе RE2 . 
 Регулярное выражение превышает лимит памяти.
UpdateRuleOptions
Характеристики
- addRulesПравило [] необязательно Правила для добавления. 
- removeRuleIdsномер[] необязательно Идентификаторы правил, которые нужно удалить. Любые недействительные идентификаторы будут игнорироваться. 
UpdateRulesetOptions
Характеристики
UpdateStaticRulesOptions
Характеристики
- disableRuleIdsномер[] необязательно Набор идентификаторов, соответствующих правилам в Ruleset, которые необходимо отключить.
- enableRuleIdsномер[] необязательно Набор идентификаторов, соответствующих правилам в Ruleset, которые необходимо включить.
- rulesetIdнить Идентификатор, соответствующий статическому Ruleset.
URLTransform
Характеристики
- фрагментстрока необязательная Новый фрагмент для запроса. Должен быть либо пустым (в этом случае существующий фрагмент очищается), либо начинаться с символа «#». 
- хозяинстрока необязательная Новый хост для запроса. 
- парольстрока необязательная Новый пароль для запроса. 
- путьстрока необязательная Новый путь для запроса. Если пусто, существующий путь очищается. 
- портстрока необязательная Новый порт для запроса. Если порт пуст, существующий порт очищается. 
- запросстрока необязательная Новый запрос. Должен быть либо пустым (в этом случае существующий запрос очищается), либо начинаться с «?». 
- queryTransformQueryTransform необязательно Добавить, удалить или заменить пары ключ-значение запроса. 
- схемастрока необязательная Новая схема запроса. Допустимые значения: «http», «https», «ftp» и «chrome-extension». 
- имя пользователястрока необязательная Новое имя пользователя для запроса. 
Характеристики
DYNAMIC_RULESET_ID
Идентификатор набора правил для динамических правил, добавленных расширением.
Ценить
 "_динамичный" 
GETMATCHEDRULES_QUOTA_INTERVAL
Time interval within which MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL getMatchedRules calls can be made, specified in minutes. Additional calls will fail immediately and set runtime.lastError . Note: getMatchedRules calls associated with a user gesture are exempt from the quota. 
Ценить
 10 
GUARANTEED_MINIMUM_STATIC_RULES
The minimum number of static rules guaranteed to an extension across its enabled static rulesets. Any rules above this limit will count towards the global static rule limit .
Ценить
 30000 
MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL
The number of times getMatchedRules can be called within a period of GETMATCHEDRULES_QUOTA_INTERVAL . 
Ценить
 20 
MAX_NUMBER_OF_DYNAMIC_RULES
The maximum number of dynamic rules that an extension can add.
Ценить
 30000 
MAX_NUMBER_OF_ENABLED_STATIC_RULESETS
 The maximum number of static Rulesets an extension can enable at any one time. 
Ценить
 50 
MAX_NUMBER_OF_REGEX_RULES
The maximum number of regular expression rules that an extension can add. This limit is evaluated separately for the set of dynamic rules and those specified in the rule resources file.
Ценить
 1000 
MAX_NUMBER_OF_SESSION_RULES
The maximum number of session scoped rules that an extension can add.
Ценить
 5000 
MAX_NUMBER_OF_STATIC_RULESETS
The maximum number of static Rulesets an extension can specify as part of the "rule_resources" manifest key. 
Ценить
 100 
MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES
The maximum number of "unsafe" dynamic rules that an extension can add.
Ценить
 5000 
MAX_NUMBER_OF_UNSAFE_SESSION_RULES
The maximum number of "unsafe" session scoped rules that an extension can add.
Ценить
 5000 
SESSION_RULESET_ID
Ruleset ID for the session-scoped rules added by the extension.
Ценить
 "_session" 
Методы
getAvailableStaticRuleCount()
chrome.declarativeNetRequest.getAvailableStaticRuleCount(
callback?: function,
): Promise<number>
Returns the number of static rules an extension can enable before the global static rule limit is reached.
Параметры
- перезвонитьfunction optional The callbackparameter looks like:(count: number) => void - считатьчисло 
 
Возврат
- Promise<number> Chrome 91+- Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
getDisabledRuleIds()
chrome.declarativeNetRequest.getDisabledRuleIds(
options: GetDisabledRuleIdsOptions,
callback?: function,
): Promise<number[]>
 Returns the list of static rules in the given Ruleset that are currently disabled. 
Параметры
- параметрыSpecifies the ruleset to query. 
- перезвонитьfunction optional The callbackparameter looks like:(disabledRuleIds: number[]) => void - disabledRuleIdsчисло[] 
 
Возврат
- Promise<number[]> - Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
getDynamicRules()
chrome.declarativeNetRequest.getDynamicRules(
filter?: GetRulesFilter,
callback?: function,
): Promise<Rule[]>
 Returns the current set of dynamic rules for the extension. Callers can optionally filter the list of fetched rules by specifying a filter . 
Параметры
- фильтрGetRulesFilter optional Chrome 111+An object to filter the list of fetched rules. 
- перезвонитьfunction optional The callbackparameter looks like:(rules: Rule[]) => void - правилаRule [] 
 
Возврат
- Promise< Rule []> Chrome 91+- Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
getEnabledRulesets()
chrome.declarativeNetRequest.getEnabledRulesets(
callback?: function,
): Promise<string[]>
Returns the ids for the current set of enabled static rulesets.
Параметры
- перезвонитьfunction optional The callbackparameter looks like:(rulesetIds: string[]) => void - rulesetIdsнить[] 
 
Возврат
- Promise<string[]> Chrome 91+- Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
getMatchedRules()
chrome.declarativeNetRequest.getMatchedRules(
filter?: MatchedRulesFilter,
callback?: function,
): Promise<RulesMatchedDetails>
 Returns all rules matched for the extension. Callers can optionally filter the list of matched rules by specifying a filter . This method is only available to extensions with the "declarativeNetRequestFeedback" permission or having the "activeTab" permission granted for the tabId specified in filter . Note: Rules not associated with an active document that were matched more than five minutes ago will not be returned. 
Параметры
- фильтрMatchedRulesFilter optional An object to filter the list of matched rules. 
- перезвонитьfunction optional The callbackparameter looks like:(details: RulesMatchedDetails) => void - подробности
 
Возврат
- Promise< RulesMatchedDetails > Chrome 91+- Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
getSessionRules()
chrome.declarativeNetRequest.getSessionRules(
filter?: GetRulesFilter,
callback?: function,
): Promise<Rule[]>
 Returns the current set of session scoped rules for the extension. Callers can optionally filter the list of fetched rules by specifying a filter . 
Параметры
- фильтрGetRulesFilter optional Chrome 111+An object to filter the list of fetched rules. 
- перезвонитьfunction optional The callbackparameter looks like:(rules: Rule[]) => void - правилаRule [] 
 
Возврат
- Promise< Rule []> Chrome 91+- Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
isRegexSupported()
chrome.declarativeNetRequest.isRegexSupported(
regexOptions: RegexOptions,
callback?: function,
): Promise<IsRegexSupportedResult>
 Checks if the given regular expression will be supported as a regexFilter rule condition. 
Параметры
- regexOptionsThe regular expression to check. 
- перезвонитьfunction optional The callbackparameter looks like:(result: IsRegexSupportedResult) => void - результат
 
Возврат
- Promise< IsRegexSupportedResult > Chrome 91+- Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
setExtensionActionOptions()
chrome.declarativeNetRequest.setExtensionActionOptions(
options: ExtensionActionOptions,
callback?: function,
): Promise<void>
Configures if the action count for tabs should be displayed as the extension action's badge text and provides a way for that action count to be incremented.
Параметры
- параметры
- перезвонитьfunction optional Chrome 89+The callbackparameter looks like:() => void 
Возврат
- Promise<void> Chrome 91+- Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
testMatchOutcome()
chrome.declarativeNetRequest.testMatchOutcome(
request: TestMatchRequestDetails,
callback?: function,
): Promise<TestMatchOutcomeResult>
Checks if any of the extension's declarativeNetRequest rules would match a hypothetical request. Note: Only available for unpacked extensions as this is only intended to be used during extension development.
Параметры
- запрос
- перезвонитьfunction optional The callbackparameter looks like:(result: TestMatchOutcomeResult) => void - результат
 
Возврат
- Promise< TestMatchOutcomeResult > - Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
updateDynamicRules()
chrome.declarativeNetRequest.updateDynamicRules(
options: UpdateRuleOptions,
callback?: function,
): Promise<void>
 Modifies the current set of dynamic rules for the extension. The rules with IDs listed in options.removeRuleIds are first removed, and then the rules given in options.addRules are added. Notes:
- This update happens as a single atomic operation: either all specified rules are added and removed, or an error is returned.
- These rules are persisted across browser sessions and across extension updates.
- Static rules specified as part of the extension package can not be removed using this function.
-  MAX_NUMBER_OF_DYNAMIC_RULESis the maximum number of dynamic rules an extension can add. The number of unsafe rules must not exceedMAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES.
Параметры
- параметрыChrome 87+
- перезвонитьfunction optional The callbackparameter looks like:() => void 
Возврат
- Promise<void> Chrome 91+- Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
updateEnabledRulesets()
chrome.declarativeNetRequest.updateEnabledRulesets(
options: UpdateRulesetOptions,
callback?: function,
): Promise<void>
 Updates the set of enabled static rulesets for the extension. The rulesets with IDs listed in options.disableRulesetIds are first removed, and then the rulesets listed in options.enableRulesetIds are added. Note that the set of enabled static rulesets is persisted across sessions but not across extension updates, ie the rule_resources manifest key will determine the set of enabled static rulesets on each extension update. 
Параметры
- параметрыChrome 87+
- перезвонитьfunction optional The callbackparameter looks like:() => void 
Возврат
- Promise<void> Chrome 91+- Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
updateSessionRules()
chrome.declarativeNetRequest.updateSessionRules(
options: UpdateRuleOptions,
callback?: function,
): Promise<void>
 Modifies the current set of session scoped rules for the extension. The rules with IDs listed in options.removeRuleIds are first removed, and then the rules given in options.addRules are added. Notes:
- This update happens as a single atomic operation: either all specified rules are added and removed, or an error is returned.
- These rules are not persisted across sessions and are backed in memory.
-  MAX_NUMBER_OF_SESSION_RULESis the maximum number of session rules an extension can add.
Параметры
- параметры
- перезвонитьfunction optional The callbackparameter looks like:() => void 
Возврат
- Promise<void> Chrome 91+- Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
updateStaticRules()
chrome.declarativeNetRequest.updateStaticRules(
options: UpdateStaticRulesOptions,
callback?: function,
): Promise<void>
 Disables and enables individual static rules in a Ruleset . Changes to rules belonging to a disabled Ruleset will take effect the next time that it becomes enabled. 
Параметры
- параметры
- перезвонитьfunction optional The callbackparameter looks like:() => void 
Возврат
- Promise<void> - Promises are only supported for Manifest V3 and later, other platforms need to use callbacks. 
События
onRuleMatchedDebug
chrome.declarativeNetRequest.onRuleMatchedDebug.addListener(
callback: function,
)
 Fired when a rule is matched with a request. Only available for unpacked extensions with the "declarativeNetRequestFeedback" permission as this is intended to be used for debugging purposes only. 
Параметры
- перезвонитьфункция The callbackparameter looks like:(info: MatchedRuleInfoDebug) => void - информация