Описание
API chrome.declarativeNetRequest
используется для блокировки или изменения сетевых запросов путем указания декларативных правил. Это позволяет расширениям изменять сетевые запросы, не перехватывая их и не просматривая их содержимое, обеспечивая тем самым большую конфиденциальность.
Разрешения
declarativeNetRequest
declarativeNetRequestWithHostAccess
declarativeNetRequestFeedback
host_permissions
Доступность
Манифест
В дополнение к разрешениям, описанным выше, некоторые типы наборов правил, в частности статические наборы правил, требуют объявления ключа манифеста "declarative_net_request"
, который должен представлять собой словарь с единственным ключом, называемым "rule_resources"
. Этот ключ представляет собой массив, содержащий словари типа 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), что и кадр, в котором возник запрос.
Перечисление
"первая вечеринка" "третья сторона"
Сетевой запрос является первой стороной кадра, в котором он был создан.
Сетевой запрос является третьей стороной по отношению к кадру, в котором он был создан.
ExtensionActionOptions
Характеристики
- displayActionCountAsBadgeText
логическое значение необязательно
Следует ли автоматически отображать количество действий для страницы в виде текста значка расширения. Это предпочтение сохраняется во всех сеансах.
- tabUpdate
TabActionCountUpdate необязательно.
Хром 89+Подробная информация о том, как следует настроить количество действий на вкладке.
GetDisabledRuleIdsOptions
Характеристики
- Идентификатор набора правил
нить
Идентификатор, соответствующий статическому
Ruleset
.
GetRulesFilter
Характеристики
- идентификаторы правил
номер[] необязательно
Если указано, включаются только правила с совпадающими идентификаторами.
HeaderInfo
Характеристики
- исключенные значения
строка[] необязательно
Если указано, это условие не выполняется, если заголовок существует, но его значение содержит хотя бы один элемент в этом списке. Здесь используется тот же синтаксис шаблона соответствия, что и
values
. - заголовок
нить
Название заголовка. Это условие соответствует имени, только если не указаны ни
values
, ниexcludedValues
. - ценности
строка[] необязательно
Если указано, это условие соответствует, если значение заголовка соответствует хотя бы одному шаблону в этом списке. Это поддерживает сопоставление значений заголовков без учета регистра, а также следующие конструкции:
'*' : Соответствует любому количеству символов.
'?' : Соответствует нулю или одному символу(ам).
'*' и '?' можно экранировать обратной косой чертой, например, '\*' и '\?'
HeaderOperation
Здесь описаны возможные операции для правила «modifyHeaders».
Перечисление
"добавить" "набор" "удалять"
Добавляет новую запись для указанного заголовка. Эта операция не поддерживается для заголовков запросов.
Устанавливает новое значение для указанного заголовка, удаляя все существующие заголовки с тем же именем.
Удаляет все записи для указанного заголовка.
IsRegexSupportedResult
Характеристики
- isSupported
логическое значение
- причина
UnsupportedRegexReason необязательно
Указывает причину, по которой регулярное выражение не поддерживается. Предоставляется только в том случае, если
isSupported
имеет значение false.
MatchedRule
Характеристики
- идентификатор правила
число
Идентификатор соответствующего правила.
- Идентификатор набора правил
нить
Идентификатор
Ruleset
, которому принадлежит это правило. Для правила, происходящего из набора динамических правил, это значение будет равноDYNAMIC_RULESET_ID
.
MatchedRuleInfo
Характеристики
- правило
- идентификатор табуляции
число
tabId вкладки, из которой поступил запрос, если вкладка все еще активна. Остальное -1.
- метка времени
число
Время совпадения правила. Временные метки будут соответствовать соглашению Javascript для времени, то есть количеству миллисекунд с начала эпохи.
MatchedRuleInfoDebug
Характеристики
- запрос
Подробная информация о запросе, для которого было сопоставлено правило.
- правило
MatchedRulesFilter
Характеристики
- минтиместамп
номер необязательно
Если указано, соответствует правилам только после указанной отметки времени.
- идентификатор табуляции
номер необязательно
Если указано, соответствует только правилам для данной вкладки. Соответствует правилам, не связанным ни с одной активной вкладкой, если установлено значение -1.
ModifyHeaderInfo
Характеристики
- заголовок
нить
Имя заголовка, который нужно изменить.
- операция
Операция, выполняемая над заголовком.
- ценить
строка необязательна
Новое значение для заголовка. Должен быть указан для операций
append
иset
.
QueryKeyValue
Характеристики
- ключ
нить
- replaceOnly
логическое значение необязательно
Хром 94+Если это правда, ключ запроса заменяется, только если он уже существует. В противном случае ключ также добавляется, если он отсутствует. По умолчанию ложь.
- ценить
нить
QueryTransform
Характеристики
- аддонзаменепарамс
QueryKeyValue [] необязательно
Список пар ключ-значение запроса, которые необходимо добавить или заменить.
- удалитьПарамс
строка[] необязательно
Список ключей запроса, которые необходимо удалить.
Redirect
Характеристики
- путь расширения
строка необязательна
Путь относительно каталога расширения. Должно начинаться с '/'.
- регулярное выражениеЗамена
строка необязательна
Шаблон подстановки для правил, определяющих
regexFilter
. Первое совпадениеregexFilter
в URL-адресе будет заменено этим шаблоном. ВregexSubstitution
цифры с обратной косой чертой (от \1 до \9) можно использовать для вставки соответствующих групп захвата. \0 относится ко всему совпадающему тексту. - трансформировать
URLTransform необязательно
Преобразования URL-адресов, которые необходимо выполнить.
- URL
строка необязательна
URL-адрес перенаправления. Перенаправления на URL-адреса JavaScript не разрешены.
RegexOptions
Характеристики
- isCaseSensitive
логическое значение необязательно
Является ли указанное
regex
выражение чувствительным к регистру. По умолчанию верно. - регулярное выражение
нить
Регулярное выражение для проверки.
- требуется захват
логическое значение необязательно
Требуется ли захват указанного
regex
. Захват требуется только для правил перенаправления, которые определяют действиеregexSubstition
. По умолчанию — ложь.
RequestDetails
Характеристики
- идентификатор документа
строка необязательна
Хром 106+Уникальный идентификатор документа фрейма, если этот запрос относится к фрейму.
- Жизненный цикл документа
Жизненный цикл документа необязательно
Хром 106+Жизненный цикл документа фрейма, если этот запрос относится к фрейму.
- идентификатор кадра
число
Значение 0 указывает, что запрос происходит в основном кадре; положительное значение указывает идентификатор подкадра, в котором происходит запрос. Если загружен документ (под)кадра (
type
—main_frame
илиsub_frame
),frameId
указывает идентификатор этого кадра, а не идентификатор внешнего кадра. Идентификаторы кадров уникальны в пределах вкладки. - Тип рамки
Тип кадра необязательно
Хром 106+Тип кадра, если это запрос на кадр.
- инициатор
строка необязательна
Источник, из которого был инициирован запрос. Это не меняется при перенаправлении. Если это непрозрачное происхождение, будет использоваться строка «null».
- метод
нить
Стандартный метод HTTP.
- родительскийDocumentId
строка необязательна
Хром 106+Уникальный идентификатор родительского документа фрейма, если этот запрос относится к фрейму и имеет родительский элемент.
- родительскийFrameId
число
Идентификатор кадра, который заключает в себе кадр, отправивший запрос. Установите значение -1, если родительский фрейм не существует.
- идентификатор запроса
нить
Идентификатор запроса. Идентификаторы запросов уникальны в рамках сеанса браузера.
- идентификатор табуляции
число
Идентификатор вкладки, в которой происходит запрос. Установите значение -1, если запрос не связан с вкладкой.
- тип
Тип ресурса запроса.
- URL
нить
URL-адрес запроса.
RequestMethod
Здесь описывается метод HTTP-запроса сетевого запроса.
Перечисление
"соединять" "удалить" "получать" "голова" "параметры" "пластырь" "почта" "помещать" "другой"
ResourceType
Это описывает тип ресурса сетевого запроса.
Перечисление
"основной_фрейм" "под_кадр" "таблица стилей" "сценарий" "изображение" "шрифт" "объект" "xmlhttprequest" "пинг" "csp_report" "СМИ" "веб-сокет" "вебтранспорт" "паутина" "другой"
Rule
Характеристики
- действие
Действие, которое необходимо предпринять, если это правило соответствует.
- состояние
Условие, при котором срабатывает это правило.
- идентификатор
число
Идентификатор, который однозначно идентифицирует правило. Обязательный и должен быть >= 1.
- приоритет
номер необязательно
Приоритет правила. По умолчанию — 1. Если указано, должно быть >= 1.
RuleAction
Характеристики
- перенаправить
Перенаправление необязательно
Описывает, как должно выполняться перенаправление. Действует только для правил перенаправления.
- Заголовки запроса
ModifyHeaderInfo [] необязательно
Хром 86+Заголовки запроса, которые необходимо изменить для запроса. Допустимо только в том случае, если RuleActionType имеет значение «modifyHeaders».
- Заголовки ответа
ModifyHeaderInfo [] необязательно
Хром 86+Заголовки ответов, которые необходимо изменить для запроса. Допустимо только в том случае, если RuleActionType имеет значение «modifyHeaders».
- тип
Тип действия, которое необходимо выполнить.
RuleActionType
Описывает тип действия, которое необходимо предпринять, если заданное RuleCondition соответствует.
Перечисление
"блокировать" "перенаправление" "позволять" "схема обновления" "изменить заголовки" "allowAllRequests"
Заблокируйте сетевой запрос.
Перенаправить сетевой запрос.
Разрешите сетевой запрос. Запрос не будет перехвачен, если существует разрешающее правило, соответствующее ему.
Обновите схему URL-адреса сетевого запроса на https, если запрос http или ftp.
Измените заголовки запроса/ответа из сетевого запроса.
Разрешить все запросы в иерархии кадров, включая сам запрос кадра.
RuleCondition
Характеристики
- тип домена
Тип домена необязательно
Указывает, является ли сетевой запрос собственным или сторонним по отношению к домену, из которого он исходит. Если этот параметр опущен, все запросы принимаются.
- домены
строка[] необязательно
Устарело с версии Chrome 101.Вместо этого используйте
initiatorDomains
Правило будет соответствовать только сетевым запросам, исходящим из списка
domains
. - исключенные домены
строка[] необязательно
Устарело с версии Chrome 101.Вместо этого используйте
excludedInitiatorDomains
.Правило не будет соответствовать сетевым запросам, исходящим из списка
excludedDomains
. - исключенные инициатордомены
строка[] необязательно
Хром 101+Правило не будет соответствовать сетевым запросам, исходящим из списка
excludedInitiatorDomains
. Если список пуст или опущен, домены не исключаются. Это имеет приоритет надinitiatorDomains
.Примечания:
- Также разрешены субдомены, такие как «a.example.com».
- Записи должны состоять только из символов ASCII.
- Используйте кодировку punycode для интернационализированных доменов.
- Это соответствует инициатору запроса, а не URL-адресу запроса.
- Субдомены перечисленных доменов также исключены.
- исключенный запросдомены
строка[] необязательно
Хром 101+Правило не будет соответствовать сетевым запросам, если домены соответствуют одному из списка
excludedRequestDomains
. Если список пуст или опущен, домены не исключаются. Это имеет приоритет надrequestDomains
.Примечания:
- Также разрешены субдомены, такие как «a.example.com».
- Записи должны состоять только из символов ASCII.
- Используйте кодировку punycode для интернационализированных доменов.
- Субдомены перечисленных доменов также исключены.
- исключенные методы запроса
RequestMethod [] необязательный
Хром 91+Список методов запроса, которым правило не соответствует. Должен быть указан только один из
requestMethods
иexcludedRequestMethods
. Если ни один из них не указан, сопоставляются все методы запроса. - исключенныеResourceTypes
ТипРесурса [] необязательно
Список типов ресурсов, которым правило не соответствует. Должен быть указан только один из
resourceTypes
иexcludedResourceTypes
. Если ни один из них не указан, блокируются все типы ресурсов, кроме «main_frame». - исключенные заголовки ответа
HeaderInfo [] необязательно
Хром 128+Правило не соответствует, если запрос соответствует какому-либо условию заголовка ответа в этом списке (если указано). Если указаны оба
excludedResponseHeaders
иresponseHeaders
, то свойствоexcludedResponseHeaders
имеет приоритет. - исключенныеTabIds
номер[] необязательно
Хром 92+Список
tabs.Tab.id
, которым правило не должно соответствовать. Идентификаторtabs.TAB_ID_NONE
исключает запросы, исходящие не от вкладки. Поддерживается только для правил на уровне сеанса. - домены инициатора
строка[] необязательно
Хром 101+Правило будет соответствовать только сетевым запросам, исходящим из списка
initiatorDomains
. Если список опущен, правило применяется к запросам со всех доменов. Пустой список не допускается.Примечания:
- Также разрешены субдомены, такие как «a.example.com».
- Записи должны состоять только из символов ASCII.
- Используйте кодировку punycode для интернационализированных доменов.
- Это соответствует инициатору запроса, а не URL-адресу запроса.
- Субдомены перечисленных доменов также совпадают.
- isUrlFilterCaseSensitive
логическое значение необязательно
Учитывает ли
urlFilter
илиregexFilter
(в зависимости от того, что указано) регистр. По умолчанию — ложь. - регулярное выражениеФильтр
строка необязательна
Регулярное выражение для сопоставления с URL-адресом сетевого запроса. Это соответствует синтаксису RE2 .
Примечание. Можно указать только один из
urlFilter
илиregexFilter
.Примечание.
regexFilter
должен состоять только из символов ASCII. Это сопоставляется с URL-адресом, в котором хост закодирован в формате punycode (в случае интернационализированных доменов), а любые другие символы, отличные от ascii, имеют URL-адрес, закодированный в utf-8. - запросДомены
строка[] необязательно
Хром 101+Правило будет соответствовать сетевым запросам только в том случае, если домен соответствует одному из списка
requestDomains
. Если список опущен, правило применяется к запросам со всех доменов. Пустой список не допускается.Примечания:
- Также разрешены субдомены, такие как «a.example.com».
- Записи должны состоять только из символов ASCII.
- Используйте кодировку punycode для интернационализированных доменов.
- Субдомены перечисленных доменов также совпадают.
- Методы запроса
RequestMethod [] необязательный
Хром 91+Список методов HTTP-запросов, которым может соответствовать правило. Пустой список не допускается.
Примечание. Указание условия правила
requestMethods
также будет исключать запросы, отличные от HTTP, тогда как указаниеexcludedRequestMethods
— нет. - типы ресурсов
ТипРесурса [] необязательно
Список типов ресурсов, которым может соответствовать правило. Пустой список не допускается.
Примечание. Это значение должно быть указано для
allowAllRequests
и может включать только типы ресурсовsub_frame
иmain_frame
. - Заголовки ответа
HeaderInfo [] необязательно
Хром 128+Правило соответствует, если запрос соответствует какому-либо условию заголовка ответа в этом списке (если указано).
- tabIds
номер[] необязательно
Хром 92+Список
tabs.Tab.id
, которым должно соответствовать правило. Идентификаторtabs.TAB_ID_NONE
соответствует запросам, исходящим не от вкладки. Пустой список не допускается. Поддерживается только для правил на уровне сеанса. - urlFilter
строка необязательна
Шаблон, который сопоставляется с URL-адресом сетевого запроса. Поддерживаемые конструкции:
'*' : Подстановочный знак: соответствует любому количеству символов.
'|' : Левая/правая привязка: если используется в любом конце шаблона, указывает начало/конец URL-адреса соответственно.
'||' : Привязка имени домена: если используется в начале шаблона, указывает начало (суб)домена URL-адреса.
'^' : Символ-разделитель: соответствует чему угодно, кроме буквы, цифры или одного из следующих символов:
_
,-
,.
, или%
. Это также соответствует концу URL-адреса.Поэтому
urlFilter
состоит из следующих частей: (необязательная привязка слева/доменного имени) + шаблон + (необязательная правая привязка).Если этот параметр опущен, все URL-адреса совпадают. Пустая строка не допускается.
Шаблон, начинающийся с
||*
не допускается. Вместо этого используйте*
.Примечание. Можно указать только один из
urlFilter
илиregexFilter
.Примечание.
urlFilter
должен состоять только из символов ASCII. Это сопоставляется с URL-адресом, в котором хост закодирован в формате punycode (в случае интернационализированных доменов), а любые другие символы, отличные от ascii, имеют URL-адрес, закодированный в utf-8. Например, если URL-адрес запроса — http://abc.рф?q=ф,urlFilter
будет сопоставляться с URL-адресом http://abc.xn--p1ai/?q=%D1%84.
Ruleset
Характеристики
- включено
логическое значение
Включен ли набор правил по умолчанию.
- идентификатор
нить
Непустая строка, однозначно идентифицирующая набор правил. Идентификаторы, начинающиеся с «_», зарезервированы для внутреннего использования.
- путь
нить
Путь к набору правил JSON относительно каталога расширения.
RulesMatchedDetails
Характеристики
- правилаMatchedInfo
Правила, соответствующие данному фильтру.
TabActionCountUpdate
Характеристики
- приращение
число
Сумма, на которую нужно увеличить количество действий на вкладке. Отрицательные значения уменьшат счетчик.
- идентификатор табуляции
число
Вкладка, для которой обновляется количество действий.
TestMatchOutcomeResult
Характеристики
- сопоставленные правила
Правила (если есть), соответствующие гипотетическому запросу.
TestMatchRequestDetails
Характеристики
- инициатор
строка необязательна
URL-адрес инициатора (если есть) гипотетического запроса.
- метод
RequestMethod необязательный
Стандартный HTTP-метод гипотетического запроса. По умолчанию используется значение «get» для HTTP-запросов и игнорируется для запросов, отличных от HTTP.
- Заголовки ответа
объект необязательный
Хром 129+Заголовки, предоставляемые гипотетическим ответом, если запрос не блокируется или не перенаправляется до его отправки. Представлен как объект, который сопоставляет имя заголовка со списком строковых значений. Если не указано иное, гипотетический ответ будет возвращать пустые заголовки ответа, которые могут соответствовать правилам, которые совпадают в случае отсутствия заголовков. Например
{"content-type": ["text/html; charset=utf-8", "multipart/form-data"]}
- идентификатор табуляции
номер необязательно
Идентификатор вкладки, в которой происходит гипотетический запрос. Не обязательно должен соответствовать реальному идентификатору вкладки. По умолчанию установлено значение -1, что означает, что запрос не связан с вкладкой.
- тип
Тип ресурса гипотетического запроса.
- URL
нить
URL-адрес гипотетического запроса.
UnsupportedRegexReason
Описывает причину, по которой данное регулярное выражение не поддерживается.
Перечисление
«синтаксическая ошибка» «Превышение лимита памяти»
Регулярное выражение синтаксически неверно или использует функции, недоступные в синтаксисе RE2 .
Регулярное выражение превышает лимит памяти.
UpdateRuleOptions
Характеристики
- добавитьправила
Правило [] необязательно
Правила добавить.
- удалитьRuleIds
номер[] необязательно
Идентификаторы правил, которые необходимо удалить. Любые недействительные идентификаторы будут игнорироваться.
UpdateRulesetOptions
Характеристики
UpdateStaticRulesOptions
Характеристики
- отключитьрулеидс
номер[] необязательно
Набор идентификаторов, соответствующих правилам в
Ruleset
, которые необходимо отключить. - EnableRuleIds
номер[] необязательно
Набор идентификаторов, соответствующих правилам в
Ruleset
, которые необходимо включить. - Идентификатор набора правил
нить
Идентификатор, соответствующий статическому
Ruleset
.
URLTransform
Характеристики
- фрагмент
строка необязательна
Новый фрагмент запроса. Должно быть либо пустым, в этом случае существующий фрагмент очищается; или должен начинаться с '#'.
- хозяин
строка необязательна
Новый хост для запроса.
- пароль
строка необязательна
Новый пароль для запроса.
- путь
строка необязательна
Новый путь для запроса. Если пусто, существующий путь очищается.
- порт
строка необязательна
Новый порт для запроса. Если пусто, существующий порт очищается.
- запрос
строка необязательна
Новый запрос для запроса. Должно быть либо пустым, в этом случае существующий запрос очищается; или должно начинаться с '?'.
- запросПреобразование
QueryTransform необязательно
Добавляйте, удаляйте или заменяйте пары ключ-значение запроса.
- схема
строка необязательна
Новая схема запроса. Допустимые значения: «http», «https», «ftp» и «chrome-extension».
- имя пользователя
строка необязательна
Новое имя пользователя для запроса.
Характеристики
DYNAMIC_RULESET_ID
Идентификатор набора правил для динамических правил, добавляемых расширением.
Ценить
"_динамический"
GETMATCHEDRULES_QUOTA_INTERVAL
Интервал времени, в течение которого могут быть выполнены вызовы MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL getMatchedRules
, указан в минутах. Дополнительные вызовы немедленно завершатся ошибкой и будут установлены runtime.lastError
. Примечание. Вызовы getMatchedRules
, связанные с жестом пользователя, не подпадают под действие квоты.
Ценить
10
GUARANTEED_MINIMUM_STATIC_RULES
Минимальное количество статических правил, гарантированное расширению во всех включенных статических наборах правил. Любые правила, превышающие этот предел, будут учитываться в глобальном лимите статических правил .
Ценить
30000
MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL
Сколько раз getMatchedRules
можно вызывать в течение периода GETMATCHEDRULES_QUOTA_INTERVAL
.
Ценить
20
MAX_NUMBER_OF_DYNAMIC_RULES
Максимальное количество динамических правил, которые может добавить расширение.
Ценить
30000
MAX_NUMBER_OF_ENABLED_STATIC_RULESETS
Максимальное количество статических Rulesets
которые расширение может включить одновременно.
Ценить
50
MAX_NUMBER_OF_REGEX_RULES
Максимальное количество правил регулярных выражений, которое может добавить расширение. Это ограничение оценивается отдельно для набора динамических правил и правил, указанных в файле ресурсов правил.
Ценить
1000
MAX_NUMBER_OF_SESSION_RULES
Максимальное количество правил области сеанса, которое может добавить расширение.
Ценить
5000
MAX_NUMBER_OF_STATIC_RULESETS
Максимальное количество статических Rulesets
расширение может указать как часть ключа манифеста "rule_resources"
.
Ценить
100
MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES
Максимальное количество «небезопасных» динамических правил, которые может добавить расширение.
Ценить
5000
MAX_NUMBER_OF_UNSAFE_SESSION_RULES
Максимальное количество «небезопасных» правил области сеанса, которые может добавить расширение.
Ценить
5000
SESSION_RULESET_ID
Идентификатор набора правил для правил на уровне сеанса, добавленных расширением.
Ценить
"_сессия"
Методы
getAvailableStaticRuleCount()
chrome.declarativeNetRequest.getAvailableStaticRuleCount(
callback?: function,
)
Возвращает количество статических правил, которые расширение может включить до того, как будет достигнут глобальный предел статических правил .
Параметры
- перезвонить
функция необязательна
Параметр
callback
выглядит так:(count: number) => void
- считать
число
Возврат
Обещание<число>
Хром 91+Промисы поддерживаются только для Manifest V3 и более поздних версий, на других платформах необходимо использовать обратные вызовы.
getDisabledRuleIds()
chrome.declarativeNetRequest.getDisabledRuleIds(
options: GetDisabledRuleIdsOptions,
callback?: function,
)
Возвращает список статических правил в данном Ruleset
, которые в данный момент отключены.
Параметры
- параметры
Определяет набор правил для запроса.
- перезвонить
функция необязательно
Параметр
callback
выглядит как:(disabledRuleIds: number[]) => void
- инвалиды
число[]
Возврат
Обещание <номер []>
Обещания поддерживаются только для Manifest V3, а затем другие платформы должны использовать обратные вызовы.
getDynamicRules()
chrome.declarativeNetRequest.getDynamicRules(
filter?: GetRulesFilter,
callback?: function,
)
Возвращает текущий набор динамических правил для расширения. Абоненты могут необязательно отфильтровать список извлеченных правил, указав filter
.
Параметры
- фильтр
GetRulesFilter необязательно
Хром 111+Объект для фильтрации списка извлеченных правил.
- перезвонить
функция необязательно
Параметр
callback
выглядит как:(rules: Rule[]) => void
- правила
Правило []
Возврат
Обещание < Правило []>
Хром 91+Обещания поддерживаются только для Manifest V3, а затем другие платформы должны использовать обратные вызовы.
getEnabledRulesets()
chrome.declarativeNetRequest.getEnabledRulesets(
callback?: function,
)
Возвращает идентификаторы для текущего набора включенных статических наборов правил.
Параметры
- перезвонить
функция необязательно
Параметр
callback
выглядит как:(rulesetIds: string[]) => void
- Правила
нить[]
Возврат
Обещание <string []>
Хром 91+Обещания поддерживаются только для Manifest V3, а затем другие платформы должны использовать обратные вызовы.
getMatchedRules()
chrome.declarativeNetRequest.getMatchedRules(
filter?: MatchedRulesFilter,
callback?: function,
)
Возвращает все правила, соответствующие расширению. Абоненты могут необязательно отфильтровать список соответствующих правил, указав filter
. Этот метод доступен только для расширений с разрешением "declarativeNetRequestFeedback"
или с разрешением "activeTab"
предоставленным для tabId
, указанного в filter
. ПРИМЕЧАНИЕ. Правила, не связанные с активным документом, который соответствовал более пяти минутам назад, не будут возвращены.
Параметры
- фильтр
MatchedRulesfilter необязательно
Объект для фильтрации списка соответствующих правил.
- перезвонить
функция необязательно
Параметр
callback
выглядит как:(details: RulesMatchedDetails) => void
- подробности
Возврат
Обещание < правила MatchedDetails >
Хром 91+Обещания поддерживаются только для Manifest V3, а затем другие платформы должны использовать обратные вызовы.
getSessionRules()
chrome.declarativeNetRequest.getSessionRules(
filter?: GetRulesFilter,
callback?: function,
)
Возвращает текущий набор правил сферы сеанса для расширения. Абоненты могут необязательно отфильтровать список извлеченных правил, указав filter
.
Параметры
- фильтр
GetRulesFilter необязательно
Хром 111+Объект для фильтрации списка извлеченных правил.
- перезвонить
функция необязательно
Параметр
callback
выглядит как:(rules: Rule[]) => void
- правила
Правило []
Возврат
Обещание < Правило []>
Хром 91+Обещания поддерживаются только для Manifest V3, а затем другие платформы должны использовать обратные вызовы.
isRegexSupported()
chrome.declarativeNetRequest.isRegexSupported(
regexOptions: RegexOptions,
callback?: function,
)
Проверяет, если данное регулярное выражение будет поддерживаться как условие правила regexFilter
.
Параметры
- regexoptions
Регулярное выражение для проверки.
- перезвонить
функция необязательно
Параметр
callback
выглядит как:(result: IsRegexSupportedResult) => void
- результат
Возврат
Обещание <ISREGEXSUPPORTEDRESULT>
Хром 91+Обещания поддерживаются только для Manifest V3, а затем другие платформы должны использовать обратные вызовы.
setExtensionActionOptions()
chrome.declarativeNetRequest.setExtensionActionOptions(
options: ExtensionActionOptions,
callback?: function,
)
Настройка, если количество действий для вкладок должно отображаться в качестве текста значка действия расширения и предоставляет способ увеличить количество действий.
Параметры
- параметры
- перезвонить
функция необязательно
Хром 89+Параметр
callback
выглядит как:() => void
Возврат
Обещание <Void>
Хром 91+Обещания поддерживаются только для Manifest V3, а затем другие платформы должны использовать обратные вызовы.
testMatchOutcome()
chrome.declarativeNetRequest.testMatchOutcome(
request: TestMatchRequestDetails,
callback?: function,
)
Проверяет, что какое -либо из правил DeclarativenetRequest в продлении соответствует гипотетическому запросу. Примечание. Доступно только для распакованных расширений, так как это предназначено только для развития расширения.
Параметры
- запрос
- перезвонить
функция необязательно
Параметр
callback
выглядит как:(result: TestMatchOutcomeResult) => void
- результат
Возврат
Обещание <testmatchoutcomeresult>
Обещания поддерживаются только для Manifest V3, а затем другие платформы должны использовать обратные вызовы.
updateDynamicRules()
chrome.declarativeNetRequest.updateDynamicRules(
options: UpdateRuleOptions,
callback?: function,
)
Изменяет текущий набор динамических правил для расширения. Правила с идентификаторами, перечисленными в options.removeRuleIds
сначала удаляются, а затем добавляются правила, приведенные в options.addRules
. Примечания:
- Это обновление происходит как одна атомная операция: либо добавляются и удаляются все указанные правила, либо возвращается ошибка.
- Эти правила сохраняются между сеансами браузера и по обновлениям расширения.
- Статические правила, указанные как часть пакета расширения, не могут быть удалены с использованием этой функции.
-
MAX_NUMBER_OF_DYNAMIC_RULES
- это максимальное количество динамических правил, которые может добавить расширение. Количество небезопасных правил не должно превышатьMAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES
.
Параметры
- параметрыХром 87+
- перезвонить
функция необязательно
Параметр
callback
выглядит как:() => void
Возврат
Обещание <Void>
Хром 91+Обещания поддерживаются только для Manifest V3, а затем другие платформы должны использовать обратные вызовы.
updateEnabledRulesets()
chrome.declarativeNetRequest.updateEnabledRulesets(
options: UpdateRulesetOptions,
callback?: function,
)
Обновляет набор включенных статических наборов правил для расширения. Наборы правил с идентификаторами, перечисленными в options.disableRulesetIds
, сначала удаляются, а затем добавляются наборы правил, перечисленные в options.enableRulesetIds
. Обратите внимание, что набор включенных статических наборов правил сохраняется в разных сеансах, но не по обновлениям расширения, то есть ключ Manifest rule_resources
будет определять набор включенных статических наборов правил при каждом обновлении расширения.
Параметры
- параметрыХром 87+
- перезвонить
функция необязательно
Параметр
callback
выглядит как:() => void
Возврат
Обещание <Void>
Хром 91+Обещания поддерживаются только для Manifest V3, а затем другие платформы должны использовать обратные вызовы.
updateSessionRules()
chrome.declarativeNetRequest.updateSessionRules(
options: UpdateRuleOptions,
callback?: function,
)
Изменяет текущий набор правил сферы сеанса для расширения. Правила с идентификаторами, перечисленными в options.removeRuleIds
сначала удаляются, а затем добавляются правила, приведенные в options.addRules
. Примечания:
- Это обновление происходит как одна атомная операция: либо добавляются и удаляются все указанные правила, либо возвращается ошибка.
- Эти правила не сохраняются в разных сессиях и поддерживаются в памяти.
-
MAX_NUMBER_OF_SESSION_RULES
- это максимальное количество правил сеанса, которое может добавить расширение.
Параметры
- параметры
- перезвонить
функция необязательно
Параметр
callback
выглядит как:() => void
Возврат
Обещание <Void>
Хром 91+Обещания поддерживаются только для Manifest V3, а затем другие платформы должны использовать обратные вызовы.
updateStaticRules()
chrome.declarativeNetRequest.updateStaticRules(
options: UpdateStaticRulesOptions,
callback?: function,
)
Отключает и позволяет отдельным статическим правилам на Ruleset
. Изменения в правилах, принадлежащих к сбору Ruleset
отключения, вступят в силу в следующий раз, когда он станет включенным.
Параметры
- параметры
- перезвонить
функция необязательно
Параметр
callback
выглядит как:() => void
Возврат
Обещание <Void>
Обещания поддерживаются только для Manifest V3, а затем другие платформы должны использовать обратные вызовы.
События
onRuleMatchedDebug
chrome.declarativeNetRequest.onRuleMatchedDebug.addListener(
callback: function,
)
Уволен, когда правило сопоставлено с запросом. Доступно только для распакованных расширений с разрешением "declarativeNetRequestFeedback"
поскольку это предназначено для использования только для целей отладки.
Параметры
- перезвонить
функция
Параметр
callback
выглядит как:(info: MatchedRuleInfoDebug) => void
- информация