дата обновления: 2026-09-25 robots: noindex
Описание
Используйте API chrome.declarativeContent для выполнения действий в зависимости от содержимого страницы, не требуя разрешения на чтение содержимого страницы.
Разрешения
declarativeContentИспользование
Декларативный API контента позволяет включать действие вашего расширения в зависимости от URL-адреса веб-страницы или от того, соответствует ли CSS-селектор элементу на странице, без необходимости добавления разрешений хоста или внедрения скрипта контента .
Используйте разрешение activeTab для взаимодействия со страницей после того, как пользователь нажмет на действие расширения.
Правила
Правила состоят из условий и действий. Если выполняется хотя бы одно из условий, выполняются все действия. Действиями являются setIcon и showAction .
PageStateMatcher соответствует веб-страницам только в том случае, если выполняются все перечисленные критерии. Он может соответствовать URL-адресу страницы , составному CSS-селектору или состоянию закладки страницы. Следующее правило включает действие расширения на страницах Google, если присутствует поле для ввода пароля:
let rule1 = {
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { hostSuffix: '.google.com', schemes: ['https'] },
css: ["input[type='password']"]
})
],
actions: [ new chrome.declarativeContent.ShowAction() ]
};
Чтобы также включить действие расширения для сайтов Google с видео, можно добавить второе условие, поскольку каждого условия достаточно для запуска всех указанных действий:
let rule2 = {
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { hostSuffix: '.google.com', schemes: ['https'] },
css: ["input[type='password']"]
}),
new chrome.declarativeContent.PageStateMatcher({
css: ["video"]
})
],
actions: [ new chrome.declarativeContent.ShowAction() ]
};
Событие onPageChanged проверяет, выполняется ли хотя бы одно условие для какого-либо правила, и выполняет соответствующие действия. Правила сохраняются между сеансами просмотра; поэтому во время установки расширения сначала следует использовать removeRules для удаления ранее установленных правил, а затем addRules для регистрации новых.
chrome.runtime.onInstalled.addListener(function(details) {
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([rule2]);
});
});
При наличии разрешения activeTab ваше расширение не будет отображать никаких предупреждений о разрешениях, и когда пользователь нажимает на действие расширения, оно будет запускаться только на соответствующих страницах.
Сопоставление URL-адресов страниц
Объект PageStateMatcher.pageurl срабатывает, когда выполняются критерии URL. Наиболее распространенные критерии — это конкатенация хоста, пути или URL, за которой следуют Contains, Equals, Prefix или Suffix. В следующей таблице приведены несколько примеров:
| Критерии | Матчи |
|---|---|
{ hostSuffix: 'google.com' } | Все URL-адреса Google |
{ pathPrefix: '/docs/extensions' } | URL-адреса документации расширений |
{ urlContains: 'developer.chrome.com' } | Все URL-адреса документации для разработчиков Chrome |
Все критерии чувствительны к регистру. Полный список критериев см. в разделе UrlFilter .
Сопоставление CSS
Условия в PageStateMatcher.css должны быть составными селекторами , то есть вы не можете включать в селекторы такие комбинаторы, как пробелы или " > ". Это помогает Chrome более эффективно сопоставлять селекторы.
| Составные селекторы (ОК) | Сложные селекторы (недопустимо) |
|---|---|
a | div p |
iframe.special[src^='http'] | p>span.highlight |
ns|* | p + ol |
#abcd:checked | p::first-line |
Условия CSS применяются только к отображаемым элементам: если элемент, соответствующий вашему селектору, имеет display:none или один из его родительских элементов имеет display:none , это не приведет к выполнению условия. Элементы, стилизованные с помощью visibility:hidden , расположенные за пределами экрана или скрытые другими элементами, все еще могут привести к выполнению условия.
Сопоставление штатов с закладками
Условие PageStateMatcher.isBookmarked позволяет сопоставлять состояние закладок текущего URL-адреса в профиле пользователя. Для использования этого условия необходимо указать разрешение "закладки" в манифесте расширения.
Типы
ImageDataType
См. https://developer.mozilla.org/en-US/docs/Web/API/ImageData .
Тип
ImageData
PageStateMatcher
Сопоставляет состояние веб-страницы на основе различных критериев.
Характеристики
- конструктор
пустота
Функция-
constructorвыглядит следующим образом:(arg: PageStateMatcher) => {...}
- арг
- возвраты
- css
строка[] необязательный
Соответствует, если все селекторы CSS в массиве соответствуют отображаемым элементам во фрейме с тем же центром, что и основной фрейм страницы. Для ускорения сопоставления все селекторы в этом массиве должны быть составными . Примечание: перечисление сотен селекторов CSS или селекторов CSS, которые соответствуют сотни раз на странице, может замедлить работу веб-сайтов.
- isBookmarked
логический необязательный
Chrome 45+Соответствует указанному значению, если состояние закладки страницы равно заданному значению. Требует разрешения на использование закладок .
- pageUrl
UrlFilter ( необязательно)
Соответствует условиям
UrlFilter, если они выполняются для URL-адреса верхнего уровня страницы.
RequestContentScript
Декларативное событие, внедряющее скрипт содержимого.
ВНИМАНИЕ: Эта функция пока экспериментальная и не поддерживается в стабильных сборках Chrome.
Характеристики
- конструктор
пустота
Функция-
constructorвыглядит следующим образом:(arg: RequestContentScript) => {...}
- возвраты
- все кадры
логический необязательный
Определяет, выполняется ли скрипт содержимого во всех фреймах соответствующей страницы или только в верхнем фрейме. По умолчанию —
false. - css
строка[] необязательный
Названия CSS-файлов, которые будут внедрены в состав скрипта содержимого.
- js
строка[] необязательный
Названия JavaScript-файлов, которые будут внедрены в состав скрипта содержимого.
- matchAboutBlank
логический необязательный
Следует ли вставлять скрипт содержимого в поля
about:blankиabout:srcdoc. По умолчанию —false.
SetIcon
Декларативное событие, устанавливающее значок n-dip square для действия страницы или действия браузера расширения при выполнении соответствующих условий. Это действие можно использовать без разрешений хоста , но расширение должно иметь действие страницы или действия браузера.
Необходимо указать ровно один из параметров: imageData или path . Оба являются словарями, сопоставляющими количество пикселей с представлением изображения. Представление изображения в imageData — это объект ImageData ; например, из элемента canvas , а представление изображения в path — это путь к файлу изображения относительно манифеста расширения. Если scale пикселей экрана помещается в независимый от устройства пиксель, используется значок scale * n . Если этот масштаб отсутствует, другое изображение изменяется до требуемого размера.
Характеристики
- конструктор
пустота
Функция-
constructorвыглядит следующим образом:(arg: SetIcon) => {...}
- арг
- возвраты
- данные изображения
ImageData | объект необязателен
Либо объект
ImageData, либо словарь {size -> ImageData}, представляющий иконку, которую необходимо установить. Если иконка указана в виде словаря, используемое изображение выбирается в зависимости от плотности пикселей экрана. Если количество пикселей изображения, помещающихся в одну единицу экранного пространства, равноscale, то выбирается изображение размеромscale * n, где n — размер иконки в пользовательском интерфейсе. Необходимо указать как минимум одно изображение. Обратите внимание, чтоdetails.imageData = fooэквивалентноdetails.imageData = {'16': foo}.
ShowAction
Декларативное событие, которое устанавливает действие панели инструментов расширения в активное состояние при выполнении соответствующих условий. Это действие можно использовать без разрешений хоста . Если у расширения есть разрешение activeTab , щелчок по действию страницы предоставляет доступ к активной вкладке.
На страницах, где условия не соблюдены, панель инструментов расширения будет отображаться в оттенках серого, и щелчок по ней откроет контекстное меню вместо запуска действия.
Характеристики
- конструктор
пустота
Функция-
constructorвыглядит следующим образом:(arg: ShowAction) => {...}
- арг
- возвраты
ShowPageAction
Пожалуйста, используйте declarativeContent.ShowAction .
Декларативное событие, которое устанавливает действие страницы расширения в состояние "включено" при выполнении соответствующих условий. Это действие можно использовать без разрешений хоста , но расширение должно иметь действие страницы. Если расширение имеет разрешение activeTab , щелчок по действию страницы предоставляет доступ к активной вкладке.
На страницах, где условия не соблюдены, панель инструментов расширения будет отображаться в оттенках серого, и щелчок по ней откроет контекстное меню вместо запуска действия.
Характеристики
- конструктор
пустота
Функция-
constructorвыглядит следующим образом:(arg: ShowPageAction) => {...}
- арг
- возвраты
События
onPageChanged
Предоставляет декларативный API событий, включающий функции addRules , removeRules и getRules .