chrome.declarativeNetRequest API Chrome for Developers

chrome.declarativeNetRequest  |  API  |  Chrome for Developers

Excerpt

Manifest V3


Skip to main content

Chrome for Developers

bookmark_border Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

API chrome.declarativeNetRequest используется для блокировки или изменения сетевых запросов путем указания декларативных правил. Это позволяет расширениям изменять сетевые запросы, не перехватывая их и не просматривая их содержимое, обеспечивая тем самым большую конфиденциальность.

Разрешения

declarativeNetRequest
declarativeNetRequestWithHostAccess

Разрешения « declarativeNetRequest » и « declarativeNetRequestWithHostAccess » предоставляют одинаковые возможности. Разница между ними заключается в том, когда разрешения запрашиваются или предоставляются.

"declarativeNetRequest"

Вызывает предупреждение о разрешении во время установки, но обеспечивает неявный доступ к allow , allowAllRequests и правилам block . Используйте это, когда это возможно, чтобы избежать необходимости запрашивать полный доступ к хостам.

"declarativeNetRequestFeedback"

Включает функции отладки для распакованных расширений , в частности getMatchedRules() и onRuleMatchedDebug .

"declarativeNetRequestWithHostAccess"

Предупреждение о разрешении не отображается во время установки, но вы должны запросить разрешения хоста, прежде чем сможете выполнять какие-либо действия на хосте. Это подходит, если вы хотите использовать декларативные правила сетевых запросов в расширении, которое уже имеет разрешения хоста, без создания дополнительных предупреждений.

Доступность

Манифест

В дополнение к разрешениям, описанным ранее, некоторые типы наборов правил, в частности статические наборы правил, требуют объявления ключа манифеста "declarative_net_request" , который должен представлять собой словарь с единственным ключом под названием "rule_resources" . Этот ключ представляет собой массив, содержащий словари типа Ruleset , как показано ниже. (Обратите внимание, что имя «Набор правил» не отображается в JSON манифеста, поскольку это просто массив.) Статические наборы правил объясняются позже в этом документе.

<span>{</span><span><br>&nbsp; </span><span>"name"</span><span>:</span><span> </span><span>"My extension"</span><span>,</span><span><br>&nbsp; </span><span>...</span><span><br><br>&nbsp; </span><span>"declarative_net_request"</span><span> </span><span>:</span><span> </span><span>{</span><span><br>&nbsp; &nbsp; </span><span>"rule_resources"</span><span> </span><span>:</span><span> </span><span>[{</span><span><br>&nbsp; &nbsp; &nbsp; </span><span>"id"</span><span>:</span><span> </span><span>"ruleset_1"</span><span>,</span><span><br>&nbsp; &nbsp; &nbsp; </span><span>"enabled"</span><span>:</span><span> </span><span>true</span><span>,</span><span><br>&nbsp; &nbsp; &nbsp; </span><span>"path"</span><span>:</span><span> </span><span>"rules_1.json"</span><span><br>&nbsp; &nbsp; </span><span>},</span><span> </span><span>{</span><span><br>&nbsp; &nbsp; &nbsp; </span><span>"id"</span><span>:</span><span> </span><span>"ruleset_2"</span><span>,</span><span><br>&nbsp; &nbsp; &nbsp; </span><span>"enabled"</span><span>:</span><span> </span><span>false</span><span>,</span><span><br>&nbsp; &nbsp; &nbsp; </span><span>"path"</span><span>:</span><span> </span><span>"rules_2.json"</span><span><br>&nbsp; &nbsp; </span><span>}]</span><span><br>&nbsp; </span><span>},</span><span><br>&nbsp; </span><span>"permissions"</span><span>:</span><span> </span><span>[</span><span><br>&nbsp; &nbsp; </span><span>"declarativeNetRequest"</span><span>,</span><span><br>&nbsp; &nbsp; </span><span>"declarativeNetRequestFeedback"</span><span>,</span><span><br>&nbsp; </span><span>],</span><span><br>&nbsp; </span><span>"host_permissions"</span><span>:</span><span> </span><span>[</span><span><br>&nbsp; &nbsp; </span><span>"http://www.blogger.com/*"</span><span>,</span><span><br>&nbsp; &nbsp; </span><span>"http://*.google.com/*"</span><span><br>&nbsp; </span><span>],</span><span><br>&nbsp; </span><span>...</span><span><br></span><span>}</span><span><br></span>

Правила и наборы правил

Чтобы использовать этот API, укажите один или несколько наборов правил. Набор правил содержит массив правил. Одно правило выполняет одно из следующих действий:

Существует три типа наборов правил, управление которыми несколько отличается.

Динамический

Сохраняются во всех сеансах браузера и обновлениях расширений и управляются с помощью JavaScript, пока расширение используется.

Сессия

Очищается при закрытии браузера и установке новой версии расширения. Правила сеанса управляются с помощью JavaScript, пока используется расширение.

Статический

Упаковывается, устанавливается и обновляется при установке или обновлении расширения. Статические правила хранятся в файлах правил в формате JSON и перечислены в файле манифеста.

Динамические и сеансовые наборы правил

Динамические и сеансовые наборы правил управляются с помощью JavaScript, пока используется расширение.

Каждый из этих типов наборов правил существует только по одному. Расширение может добавлять или удалять правила динамически, вызывая updateDynamicRules() и updateSessionRules() , при условии, что ограничения правил не превышены. Информацию об ограничениях правил см. в разделе Ограничения правил . Вы можете увидеть пример этого в примерах кода .

Статические наборы правил

В отличие от динамических правил и правил сеанса, статические правила упаковываются, устанавливаются и обновляются при установке или обновлении расширения. Они хранятся в файлах правил в формате JSON, которые указываются расширению с помощью ключей "declarative_net_request" и "rule_resources" , как описано выше , а также в одном или нескольких словарях Ruleset . Словарь Ruleset содержит путь к файлу правил, идентификатор набора правил, содержащегося в файле, а также сведения о том, включен или отключен этот набор правил. Последние два важны при программном включении или отключении набора правил.

<span>{</span><span><br>&nbsp; </span><span>...</span><span><br>&nbsp; </span><span>"declarative_net_request"</span><span> </span><span>:</span><span> </span><span>{</span><span><br>&nbsp; &nbsp; </span><span>"rule_resources"</span><span> </span><span>:</span><span> </span><span>[{</span><span><br>&nbsp; &nbsp; &nbsp; </span><span>"id"</span><span>:</span><span> </span><span>"ruleset_1"</span><span>,</span><span><br>&nbsp; &nbsp; &nbsp; </span><span>"enabled"</span><span>:</span><span> </span><span>true</span><span>,</span><span><br>&nbsp; &nbsp; &nbsp; </span><span>"path"</span><span>:</span><span> </span><span>"rules_1.json"</span><span><br>&nbsp; &nbsp; </span><span>},</span><span><br>&nbsp; &nbsp; </span><span>...</span><span><br>&nbsp; &nbsp; </span><span>]</span><span><br>&nbsp; </span><span>}</span><span><br>&nbsp; </span><span>...</span><span><br></span><span>}</span><span><br></span>

Чтобы протестировать файлы правил, загрузите распакованное расширение . Ошибки и предупреждения о недопустимых статических правилах отображаются только для распакованных расширений. Недопустимые статические правила в упакованных расширениях игнорируются.

Ускоренная проверка

Изменения в статических наборах правил могут подлежать ускоренному рассмотрению. См. ускоренную проверку допустимых изменений .

Включение и отключение статических правил и наборов правил

Как отдельные статические правила, так и полные статические наборы правил могут быть включены или отключены во время выполнения.

Набор включенных статических правил и наборов правил сохраняется во всех сеансах браузера. Ни один из них не сохраняется при обновлении расширений, а это означает, что после обновления доступны только те правила, которые вы решили оставить в своих файлах правил.

По соображениям производительности также существуют ограничения на количество правил и наборов правил, которые можно включить одновременно. Вызовите getAvailableStaticRuleCount() чтобы проверить количество дополнительных правил, которые можно включить. Информацию об ограничениях правил см. в разделе Ограничения правил .

Чтобы включить или отключить статические правила , вызовите updateStaticRules() . Этот метод принимает объект UpdateStaticRulesOptions , который содержит массивы идентификаторов правил для включения или отключения. Идентификаторы определяются с использованием ключа "id" словаря Ruleset . Максимальный лимит отключенных статических правил — 5000.

Чтобы включить или отключить статические наборы правил , вызовите updateEnabledRulesets() . Этот метод принимает объект UpdateRulesetOptions , который содержит массивы идентификаторов наборов правил для включения или отключения. Идентификаторы определяются с использованием ключа "id" словаря Ruleset .

Правила сборки

Независимо от типа правило начинается с четырех полей, как показано ниже. Хотя ключи "id" и "priority" принимают числовые значения, клавиши "action" и "condition" могут обеспечивать несколько условий блокировки и перенаправления. Следующее правило блокирует все запросы сценариев, исходящие от "foo.com" к любому URL-адресу с "abc" в качестве подстроки.

<span>{</span><span><br>&nbsp; </span><span>"id"</span><span> </span><span>:</span><span> </span><span>1</span><span>,</span><span><br>&nbsp; </span><span>"priority"</span><span>:</span><span> </span><span>1</span><span>,</span><span><br>&nbsp; </span><span>"action"</span><span> </span><span>:</span><span> </span><span>{</span><span> </span><span>"type"</span><span> </span><span>:</span><span> </span><span>"block"</span><span> </span><span>},</span><span><br>&nbsp; </span><span>"condition"</span><span> </span><span>:</span><span> </span><span>{</span><span><br>&nbsp; &nbsp; </span><span>"urlFilter"</span><span> </span><span>:</span><span> </span><span>"abc"</span><span>,</span><span><br>&nbsp; &nbsp; </span><span>"initiatorDomains"</span><span> </span><span>:</span><span> </span><span>[</span><span>"foo.com"</span><span>],</span><span><br>&nbsp; &nbsp; </span><span>"resourceTypes"</span><span> </span><span>:</span><span> </span><span>[</span><span>"script"</span><span>]</span><span><br>&nbsp; </span><span>}</span><span><br></span><span>}</span><span><br></span>

Соответствие URL-адресов

Декларативный сетевой запрос предоставляет возможность сопоставлять URL-адреса с помощью синтаксиса сопоставления с образцом или регулярных выражений.

Синтаксис URL-фильтра

Ключ "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://baexample.com/xyz
https://a.example.company https://example.com/
`" https*"` https://example.com
http://https.com
`"example*^123 "` https://example.com/123
http://abc.com/example?123 https://example.com/1234
https://abc.com/example0123

Регулярные выражения

Условия также могут использовать регулярные выражения. См. ключ "regexFilter" . Чтобы узнать об ограничениях, применимых к этим условиям, см. Правила, использующие регулярные выражения .

Напишите хорошие условия URL

Будьте осторожны при написании правил, чтобы они всегда соответствовали всему домену. В противном случае ваше правило может сработать в непредвиденных ситуациях. Например, при использовании синтаксиса сопоставления с образцом:

Рассмотрите возможность использования:

Аналогичным образом используйте символы ^ и / для привязки регулярного выражения. Например, ^https:\/\/www\.google\.com\/ соответствует любому пути на https://www.google.com.

Оценка правил

Правила DNR применяются браузером на различных этапах жизненного цикла сетевого запроса.

Перед запросом

Прежде чем запрос будет сделан, расширение может заблокировать или перенаправить его (включая обновление схемы с HTTP на HTTPS) с помощью соответствующего правила.

Для каждого расширения браузер определяет список правил соответствия. Правила с modifyHeaders сюда не включены, поскольку они будут обработаны позже. Кроме того, правила с условием responseHeaders будут рассмотрены позже (когда будут доступны заголовки ответов) и не включены.

Затем для каждого расширения Chrome выбирает не более одного кандидата на каждый запрос. Chrome находит подходящее правило, упорядочивая все соответствующие правила по приоритету. Правила с одинаковым приоритетом упорядочены по действию ( allow allowAllRequests > block > upgradeScheme > redirect ).

Если кандидатом является allow allowAllRequests , или кадр, в котором выполняется запрос, ранее соответствовал allowAllRequests с более высоким или равным приоритетом из этого расширения, запрос считается «разрешенным», и расширение не окажет никакого влияния на запрос.

Если более одного расширения хотят заблокировать или перенаправить этот запрос, выбирается одно действие. Chrome делает это, сортируя правила в block порядка > redirect upgradeScheme > allow allowAllRequests . Если два правила относятся к одному типу, Chrome выбирает правило из последнего установленного расширения.

Прежде чем Chrome отправит заголовки запроса на сервер, заголовки обновляются на основе соответствующих правил modifyHeaders .

В рамках одного расширения Chrome создает список модификаций, которые необходимо выполнить, находя все соответствующие правила modifyHeaders . Как и раньше, включаются только те правила, которые имеют более высокий приоритет, чем любые соответствующие allow allowAllRequests .

Эти правила применяются Chrome в таком порядке, что правила из недавно установленного расширения всегда оцениваются перед правилами из более старого расширения. Кроме того, правила с более высоким приоритетом из одного расширения всегда применяются раньше правил с более низким приоритетом из того же расширения. Примечательно, что даже среди расширений:

Как только будет получен ответ

После получения заголовков ответа Chrome оценивает правила с условием responseHeaders .

После сортировки этих правил по action и priority и исключения всех правил, ставших избыточными из-за соответствующего правила allow или allowAllRequests (это происходит идентично шагам, описанным в разделе «Перед запросом»), Chrome может заблокировать или перенаправить запрос от имени расширения.

Обратите внимание: если запрос дошел до этого этапа, он уже отправлен на сервер, и сервер получил данные, такие как тело запроса. Правило блокировки или перенаправления с условием заголовков ответа по-прежнему будет работать, но не сможет фактически заблокировать или перенаправить запрос.

В случае правила блокировки это обрабатывается страницей, которая отправила запрос, получая заблокированный ответ, и Chrome досрочно завершает запрос. В случае правила перенаправления Chrome отправляет новый запрос на перенаправленный URL-адрес. Обязательно подумайте, соответствуют ли эти действия ожиданиям конфиденциальности вашего расширения.

Если запрос не заблокирован или не перенаправлен, Chrome применяет все правила modifyHeaders . Применение изменений к заголовкам ответов работает так же, как описано в разделе «Перед отправкой заголовков запроса». Применение изменений к заголовкам запроса ничего не дает, поскольку запрос уже был сделан.

Безопасные правила

Безопасные правила определяются как правила с block , allow , allowAllRequests upgradeScheme . На эти правила распространяется увеличенная квота динамических правил.

Ограничения правил

Загрузка и оценка правил в браузере приводит к увеличению производительности, поэтому при использовании API применяются некоторые ограничения. Ограничения зависят от типа используемого вами правила.

Статические правила

Статические правила — это правила, указанные в файлах правил, объявленных в файле манифеста. Расширение может указать до 100 статических наборов правил как часть ключа манифеста "rule_resources" , но одновременно можно включить только 50 из этих наборов правил. Последний называется MAX_NUMBER_OF_ENABLED_STATIC_RULESETS . В совокупности эти наборы правил гарантируют не менее 30 000 правил. Это называется GUARANTEED_MINIMUM_STATIC_RULES .

Количество правил, доступных после этого, зависит от того, сколько правил включено всеми расширениями, установленными в браузере пользователя. Вы можете найти это число во время выполнения, вызвав getAvailableStaticRuleCount() . Пример этого вы можете увидеть в разделе «Примеры кода» .

Правила сеанса

Расширение может иметь до 5000 правил сеанса. Это отображается как MAX_NUMBER_OF_SESSION_RULES .

До Chrome 120 существовало ограничение в 5000 комбинированных динамических и сеансовых правил.

Динамические правила

Расширение может иметь не менее 5000 динамических правил. Это отображается как MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES .

Начиная с Chrome 121, для безопасных динамических правил доступен более высокий лимит в 30 000, представленный как MAX_NUMBER_OF_DYNAMIC_RULES . Любые небезопасные правила, добавленные в пределах лимита в 5000, также будут учитываться в этом лимите.

До Chrome 120 существовало ограничение в 5000 комбинированных динамических и сеансовых правил.

Правила, использующие регулярные выражения

Все типы правил могут использовать регулярные выражения; однако общее количество правил регулярных выражений каждого типа не может превышать 1000. Это называется MAX_NUMBER_OF_REGEX_RULES .

Кроме того, каждое правило после компиляции должно занимать менее 2 КБ. Это примерно коррелирует со сложностью правила. Если вы попытаетесь загрузить правило, превышающее этот предел, вы увидите предупреждение, подобное следующему, и правило будет проигнорировано.

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

Взаимодействие с работниками сервиса

declarativeNetRequest применяется только к запросам, достигающим сетевого стека. Сюда входят ответы из кэша HTTP, но могут не включаться ответы, проходящие через обработчик onfetch сервисного работника. declarativeNetRequest не повлияет на ответы, сгенерированные сервисным работником или полученные из CacheStorage , но повлияет на вызовы fetch() сделанные в сервисном работнике.

Доступные веб-ресурсы

Правило declarativeNetRequest не может перенаправлять запрос общедоступного ресурса на ресурс, который недоступен через Интернет. Это вызывает ошибку. Это верно, даже если указанный доступный веб-ресурс принадлежит расширению перенаправления. Чтобы объявить ресурсы для declarativeNetRequest, используйте массив "web_accessible_resources" манифеста.

Операция добавления поддерживается только для следующих заголовков: accept , accept-encoding , accept-language , access-control-request-headers , cache-control , connection , content-language , cookie , forwarded , if-match , if-none-match , keep-alive , range , te , trailer , transfer-encoding , upgrade , user-agent , via , want-digest , x-forwarded-for .

Примеры

Примеры кода

Обновить динамические правила

В следующем примере показано, как вызвать updateDynamicRules() . Процедура updateSessionRules() такая же.

<span>// Get arrays containing new and old rules</span><span><br></span><span>const</span><span> newRules </span><span>=</span><span> await getNewRules</span><span>();</span><span><br></span><span>const</span><span> oldRules </span><span>=</span><span> await chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>getDynamicRules</span><span>();</span><span><br></span><span>const</span><span> oldRuleIds </span><span>=</span><span> oldRules</span><span>.</span><span>map</span><span>(</span><span>rule </span><span>=&gt;</span><span> rule</span><span>.</span><span>id</span><span>);</span><span><br><br></span><span>// Use the arrays to update the dynamic rules</span><span><br>await chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>updateDynamicRules</span><span>({</span><span><br>&nbsp; removeRuleIds</span><span>:</span><span> oldRuleIds</span><span>,</span><span><br>&nbsp; addRules</span><span>:</span><span> newRules<br></span><span>});</span><span><br></span>

Обновить статические наборы правил

В следующем примере показано, как включать и отключать наборы правил, учитывая количество доступных и максимальное количество включенных статических наборов правил. Это следует сделать, когда количество необходимых статических правил превышает разрешенное количество. Чтобы это работало, некоторые из ваших наборов правил должны быть установлены, а некоторые отключены (в файле манифеста "Enabled" установлено значение false ).

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

Примеры правил

Следующие примеры иллюстрируют, как 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 применяется, поскольку его приоритет, определенный разработчиком, является наивысшим в группе.

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

Перенаправления

В приведенном ниже примере требуется разрешение хоста для *://*.example.com/* .

В следующем примере показано, как перенаправить запрос с сайта example.com на страницу внутри самого расширения. Путь расширения /a.jpg преобразуется в chrome-extension://EXTENSION_ID/a.jpg , где EXTENSION_ID — это идентификатор вашего расширения. Чтобы это работало, манифест должен объявить /a.jpg как ресурс, доступный через Интернет .

<span>{</span><span><br>&nbsp; </span><span>"id"</span><span>:</span><span> </span><span>1</span><span>,</span><span><br>&nbsp; </span><span>"priority"</span><span>:</span><span> </span><span>1</span><span>,</span><span><br>&nbsp; </span><span>"action"</span><span>:</span><span> </span><span>{</span><span> </span><span>"type"</span><span>:</span><span> </span><span>"redirect"</span><span>,</span><span> </span><span>"redirect"</span><span>:</span><span> </span><span>{</span><span> </span><span>"extensionPath"</span><span>:</span><span> </span><span>"/a.jpg"</span><span> </span><span>}</span><span> </span><span>},</span><span><br>&nbsp; </span><span>"condition"</span><span>:</span><span> </span><span>{</span><span><br>&nbsp; &nbsp; </span><span>"urlFilter"</span><span>:</span><span> </span><span>"||https://www.example.com/"</span><span>,</span><span><br>&nbsp; &nbsp; </span><span>"resourceTypes"</span><span>:</span><span> </span><span>[</span><span>"main_frame"</span><span>]</span><span><br>&nbsp; </span><span>}</span><span><br></span><span>}</span><span><br></span>

Ниже используется ключ "transform" для перенаправления на поддомен example.com. Он использует привязку доменного имени («||») для перехвата запросов по любой схеме от example.com. Ключ "scheme" в "transform" указывает, что при перенаправлении на поддомен всегда будет использоваться «https».

<span>{</span><span><br>&nbsp; </span><span>"id"</span><span>:</span><span> </span><span>1</span><span>,</span><span><br>&nbsp; </span><span>"priority"</span><span>:</span><span> </span><span>1</span><span>,</span><span><br>&nbsp; </span><span>"action"</span><span>:</span><span> </span><span>{</span><span><br>&nbsp; &nbsp; </span><span>"type"</span><span>:</span><span> </span><span>"redirect"</span><span>,</span><span><br>&nbsp; &nbsp; </span><span>"redirect"</span><span>:</span><span> </span><span>{</span><span><br>&nbsp; &nbsp; &nbsp; </span><span>"transform"</span><span>:</span><span> </span><span>{</span><span> </span><span>"scheme"</span><span>:</span><span> </span><span>"https"</span><span>,</span><span> </span><span>"host"</span><span>:</span><span> </span><span>"new.example.com"</span><span> </span><span>}</span><span><br>&nbsp; &nbsp; </span><span>}</span><span><br>&nbsp; </span><span>},</span><span><br>&nbsp; </span><span>"condition"</span><span>:</span><span> </span><span>{</span><span><br>&nbsp; &nbsp; </span><span>"urlFilter"</span><span>:</span><span> </span><span>"||example.com/"</span><span>,</span><span><br>&nbsp; &nbsp; </span><span>"resourceTypes"</span><span>:</span><span> </span><span>[</span><span>"main_frame"</span><span>]</span><span><br>&nbsp; </span><span>}</span><span><br></span><span>}</span><span><br></span>

В следующем примере регулярные выражения используются для перенаправления с https://www.abc.xyz.com/path на https://abc.xyz.com/path . Обратите внимание, что в ключе "regexFilter" точки экранируются и что группа захвата выбирает либо «abc», либо «def». Ключ "regexSubstitution" указывает первое возвращаемое совпадение регулярного выражения с помощью «\1». В этом случае «abc» извлекается из перенаправленного URL-адреса и помещается в подстановку.

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

В следующем примере удаляются все файлы cookie как из основного кадра, так и из всех подкадров.

<span>{</span><span><br>&nbsp; </span><span>"id"</span><span>:</span><span> </span><span>1</span><span>,</span><span><br>&nbsp; </span><span>"priority"</span><span>:</span><span> </span><span>1</span><span>,</span><span><br>&nbsp; </span><span>"action"</span><span>:</span><span> </span><span>{</span><span><br>&nbsp; &nbsp; </span><span>"type"</span><span>:</span><span> </span><span>"modifyHeaders"</span><span>,</span><span><br>&nbsp; &nbsp; </span><span>"requestHeaders"</span><span>:</span><span> </span><span>[{</span><span> </span><span>"header"</span><span>:</span><span> </span><span>"cookie"</span><span>,</span><span> </span><span>"operation"</span><span>:</span><span> </span><span>"remove"</span><span> </span><span>}]</span><span><br>&nbsp; </span><span>},</span><span><br>&nbsp; </span><span>"condition"</span><span>:</span><span> </span><span>{</span><span> </span><span>"resourceTypes"</span><span>:</span><span> </span><span>[</span><span>"main_frame"</span><span>,</span><span> </span><span>"sub_frame"</span><span>]</span><span> </span><span>}</span><span><br></span><span>}</span><span><br></span>

Типы

DomainType

Здесь указывается, является ли запрос первой или третьей стороной по отношению к кадру, в котором он был создан. Запрос считается первичным, если он имеет тот же домен (eTLD+1), что и кадр, в котором возник запрос.

Перечисление

"первая вечеринка"
Сетевой запрос является первой стороной кадра, в котором он был создан.

"третья сторона"
Сетевой запрос является третьей стороной по отношению к кадру, в котором он был создан.

ExtensionActionOptions

Характеристики

GetDisabledRuleIdsOptions

Характеристики

GetRulesFilter

Характеристики

Характеристики

Здесь описаны возможные операции для правила «modifyHeaders».

Перечисление

"добавить"
Добавляет новую запись для указанного заголовка. Эта операция не поддерживается для заголовков запросов.

"набор"
Устанавливает новое значение для указанного заголовка, удаляя все существующие заголовки с тем же именем.

"удалять"
Удаляет все записи для указанного заголовка.

IsRegexSupportedResult

Характеристики

MatchedRule

Характеристики

MatchedRuleInfo

Характеристики

MatchedRuleInfoDebug

Характеристики

MatchedRulesFilter

Характеристики

Характеристики

QueryKeyValue

Характеристики

QueryTransform

Характеристики

Redirect

Характеристики

RegexOptions

Характеристики

RequestDetails

Характеристики

RequestMethod

Здесь описывается метод HTTP-запроса сетевого запроса.

Перечисление

"соединять"

"удалить"

"получать"

"голова"

"параметры"

"пластырь"

"почта"

"помещать"

"другой"

ResourceType

Это описывает тип ресурса сетевого запроса.

Перечисление

"основной_фрейм"

"под_кадр"

"таблица стилей"

"сценарий"

"изображение"

"шрифт"

"объект"

"xmlhttprequest"

"пинг"

"csp_report"

"СМИ"

"веб-сокет"

"вебтранспорт"

"паутина"

"другой"

Rule

Характеристики

RuleAction

Характеристики

RuleActionType

Описывает тип действия, которое необходимо предпринять, если заданное RuleCondition соответствует.

Перечисление

"блокировать"
Заблокируйте сетевой запрос.

"перенаправление"
Перенаправить сетевой запрос.

"позволять"
Разрешите сетевой запрос. Запрос не будет перехвачен, если существует разрешающее правило, соответствующее ему.

"схема обновления"
Обновите схему URL-адреса сетевого запроса на https, если запрос http или ftp.

"изменить заголовки"
Измените заголовки запроса/ответа из сетевого запроса.

"разрешитьВсе запросы"
Разрешить все запросы в иерархии кадров, включая сам запрос кадра.

RuleCondition

Характеристики

Ruleset

Характеристики

RulesMatchedDetails

Характеристики

TabActionCountUpdate

Характеристики

TestMatchOutcomeResult

Характеристики

TestMatchRequestDetails

Характеристики

UnsupportedRegexReason

Описывает причину, по которой данное регулярное выражение не поддерживается.

Перевозить

"Синтаксиртор"
Регулярное выражение является синтаксически неверным или использует функции, недоступные в синтаксисе RE2 .

"MemoryLimitexeded"
Регулярное выражение превышает предел памяти.

UpdateRuleOptions

Характеристики

UpdateRulesetOptions

Характеристики

UpdateStaticRulesOptions

Характеристики

URLTransform

Характеристики

Характеристики

DYNAMIC_RULESET_ID

Идентификатор набора правил для динамических правил, добавленных расширением.

GETMATCHEDRULES_QUOTA_INTERVAL

Временный интервал, в котором могут быть сделаны вызовы MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL getMatchedRules , указаны в минуты. Дополнительные вызовы сразу не будут сбой и установят runtime.lastError . LasterRor. ПРИМЕЧАНИЕ. Вызовы getMatchedRules , связанные с жестом пользователя, освобождены от квоты.

GUARANTEED_MINIMUM_STATIC_RULES

Минимальное количество статических правил гарантированно продление на его включенных статических наборах правил. Любые правила выше этого предела будут учитываться в отношении глобального ограничения статического правила .

MAX_GETMATCHEDRULES_CALLS_PER_INTERVAL

Количество раз, когда getMatchedRules можно вызывать в течение периода GETMATCHEDRULES_QUOTA_INTERVAL .

MAX_NUMBER_OF_DYNAMIC_RULES

Максимальное количество динамических правил, которые может добавить расширение.

MAX_NUMBER_OF_ENABLED_STATIC_RULESETS

Максимальное количество статических Rulesets которые расширение может включить в любое время.

MAX_NUMBER_OF_REGEX_RULES

Максимальное количество правил регулярного выражения, которые может добавить расширение. Этот предел оценивается отдельно для набора динамических правил и указанных в файле ресурсов правил.

MAX_NUMBER_OF_SESSION_RULES

Максимальное количество правил сферы сеанса, которые может добавить расширение.

MAX_NUMBER_OF_STATIC_RULESETS

Максимальное количество статических Rulesets расширение может указать как часть манифестного ключа "rule_resources" .

MAX_NUMBER_OF_UNSAFE_DYNAMIC_RULES

Максимальное количество «небезопасных» динамических правил, которые может добавить расширение.

MAX_NUMBER_OF_UNSAFE_SESSION_RULES

Максимальное количество «небезопасных» сессионных правил, которые может добавить расширение.

SESSION_RULESET_ID

Идентификатор набора правил для правил с сеансом, добавленным расширением.

Методы

getAvailableStaticRuleCount()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>getAvailableStaticRuleCount</span><span>(</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Возвращает количество статических правил, которые может включить расширение до достижения глобального ограничения статического правила .

Параметры

Возврат

getDisabledRuleIds()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>getDisabledRuleIds</span><span>(</span><span><br>&nbsp; options</span><span>:</span><span> </span><a href="https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=ru#type-GetDisabledRuleIdsOptions"><span>GetDisabledRuleIdsOptions</span></a><span>,</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Возвращает список статических правил в данном Ruleset , которые в настоящее время отключены.

Параметры

Возврат

getDynamicRules()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>getDynamicRules</span><span>(</span><span><br>&nbsp; filter</span><span>?:</span><span> </span><a href="https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=ru#type-GetRulesFilter"><span>GetRulesFilter</span></a><span>,</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Возвращает текущий набор динамических правил для расширения. Абоненты могут необязательно отфильтровать список извлеченных правил, указав filter .

Параметры

Возврат

getEnabledRulesets()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>getEnabledRulesets</span><span>(</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Возвращает идентификаторы для текущего набора включенных статических наборов правил.

Параметры

Возврат

getMatchedRules()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>getMatchedRules</span><span>(</span><span><br>&nbsp; filter</span><span>?:</span><span> </span><a href="https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=ru#type-MatchedRulesFilter"><span>MatchedRulesFilter</span></a><span>,</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Возвращает все правила, соответствующие расширению. Абоненты могут необязательно отфильтровать список соответствующих правил, указав filter . Этот метод доступен только для расширений с разрешением "declarativeNetRequestFeedback" или с разрешением "activeTab" , предоставленным для tabId , указанного в filter . ПРИМЕЧАНИЕ. Правила, не связанные с активным документом, который соответствовал более пяти минутам назад, не будут возвращены.

Параметры

Возврат

getSessionRules()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>getSessionRules</span><span>(</span><span><br>&nbsp; filter</span><span>?:</span><span> </span><a href="https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=ru#type-GetRulesFilter"><span>GetRulesFilter</span></a><span>,</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Возвращает текущий набор правил сферы сеанса для расширения. Абоненты могут необязательно отфильтровать список извлеченных правил, указав filter .

Параметры

Возврат

isRegexSupported()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>isRegexSupported</span><span>(</span><span><br>&nbsp; regexOptions</span><span>:</span><span> </span><a href="https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=ru#type-RegexOptions"><span>RegexOptions</span></a><span>,</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Проверяет, если данное регулярное выражение будет поддерживаться как условие правила regexFilter .

Параметры

Возврат

setExtensionActionOptions()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>setExtensionActionOptions</span><span>(</span><span><br>&nbsp; options</span><span>:</span><span> </span><a href="https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=ru#type-ExtensionActionOptions"><span>ExtensionActionOptions</span></a><span>,</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Настройка, если количество действий для вкладок должно отображаться в качестве текста значка действия расширения и предоставляет способ увеличить количество действий.

Параметры

Возврат

testMatchOutcome()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>testMatchOutcome</span><span>(</span><span><br>&nbsp; request</span><span>:</span><span> </span><a href="https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=ru#type-TestMatchRequestDetails"><span>TestMatchRequestDetails</span></a><span>,</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Проверяет, что какое -либо из правил DeclarativenetRequest в продлении соответствует гипотетическому запросу. Примечание. Доступно только для распакованных расширений, так как это предназначено только для развития расширения.

Параметры

Возврат

updateDynamicRules()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>updateDynamicRules</span><span>(</span><span><br>&nbsp; options</span><span>:</span><span> </span><a href="https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=ru#type-UpdateRuleOptions"><span>UpdateRuleOptions</span></a><span>,</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Изменяет текущий набор динамических правил для расширения. Правила с идентификаторами, перечисленными в options.removeRuleIds сначала удаляются, а затем добавляются правила, приведенные в options.addRules . Примечания:

Параметры

Возврат

updateEnabledRulesets()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>updateEnabledRulesets</span><span>(</span><span><br>&nbsp; options</span><span>:</span><span> </span><a href="https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=ru#type-UpdateRulesetOptions"><span>UpdateRulesetOptions</span></a><span>,</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Обновляет набор включенных статических наборов правил для расширения. Наборы правил с идентификаторами, перечисленными в options.disableRulesetIds , сначала удаляются, а затем добавляются наборы правил, перечисленные в options.enableRulesetIds . Обратите внимание, что набор включенных статических наборов правил сохраняется в разных сеансах, но не по обновлениям расширения, то есть ключ Manifest rule_resources будет определять набор включенных статических наборов правил при каждом обновлении расширения.

Параметры

Возврат

updateSessionRules()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>updateSessionRules</span><span>(</span><span><br>&nbsp; options</span><span>:</span><span> </span><a href="https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=ru#type-UpdateRuleOptions"><span>UpdateRuleOptions</span></a><span>,</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Изменяет текущий набор правил сферы сеанса для расширения. Правила с идентификаторами, перечисленными в options.removeRuleIds сначала удаляются, а затем добавляются правила, приведенные в options.addRules . Примечания:

Параметры

Возврат

updateStaticRules()

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>updateStaticRules</span><span>(</span><span><br>&nbsp; options</span><span>:</span><span> </span><a href="https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=ru#type-UpdateStaticRulesOptions"><span>UpdateStaticRulesOptions</span></a><span>,</span><span><br>&nbsp; callback</span><span>?:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Отключает и позволяет отдельным статическим правилам на Ruleset . Изменения в правилах, принадлежащих к сбору Ruleset отключения, вступят в силу в следующий раз, когда он станет включенным.

Параметры

Возврат

События

onRuleMatchedDebug

<span>chrome</span><span>.</span><span>declarativeNetRequest</span><span>.</span><span>onRuleMatchedDebug</span><span>.</span><span>addListener</span><span>(</span><span><br>&nbsp; callback</span><span>:</span><span> </span><span>function</span><span>,</span><span><br></span><span>)</span>

Уволен, когда правило сопоставлено с запросом. Доступно только для распакованных расширений с разрешением "declarativeNetRequestFeedback" поскольку это предназначено для использования только для целей отладки.

Параметры

Если не указано иное, контент на этой странице предоставляется по лицензии Creative Commons "С указанием авторства 4.0", а примеры кода – по лицензии Apache 2.0. Подробнее об этом написано в правилах сайта. Java – это зарегистрированный товарный знак корпорации Oracle и ее аффилированных лиц.

Последнее обновление: 2025-01-08 UTC.