Описание
Пространство имен chrome.events содержит общие типы, используемые API для отправки событий, чтобы уведомлять вас о происходящих интересных событиях.
Понятия и применение
Event — это объект, позволяющий получать уведомления о важных событиях. Вот пример использования события browser.alarms.onAlarm для получения уведомлений по истечении времени срабатывания будильника:
browser.alarms.onAlarm.addListener((alarm) => {
appendToLog(`alarms.onAlarm -- name: ${alarm.name}, scheduledTime: ${alarm.scheduledTime}`);
});
Как показано в примере, регистрация для получения уведомлений осуществляется с помощью addListener() . Аргументом функции addListener() всегда является функция, которую вы определяете для обработки события, но параметры функции зависят от того, какое событие вы обрабатываете. Проверив документацию по alarms.onAlarm , вы увидите, что у этой функции всего один параметр: объект alarms.Alarm , содержащий подробную информацию о прошедшем тревожном сигнале.
Примеры API, использующих события: alarms , i18n , identity , runtime . Большинство API Chrome это делают.
Декларативные обработчики событий
Декларативные обработчики событий предоставляют средства для определения правил, состоящих из декларативных условий и действий. Условия оцениваются в браузере, а не в движке JavaScript, что уменьшает задержки при передаче данных и обеспечивает очень высокую эффективность.
Декларативные обработчики событий используются, например, в Declarative Content API . На этой странице описаны основные концепции всех декларативных обработчиков событий.
Правила
Простейшее правило состоит из одного или нескольких условий и одного или нескольких действий:
const rule = {
conditions: [ /* my conditions */ ],
actions: [ /* my actions */ ]
};
Если выполняется хотя бы одно из условий, все действия выполняются.
Помимо условий и действий, каждому правилу можно присвоить идентификатор, что упрощает отмену регистрации ранее зарегистрированных правил, а также приоритет для определения порядка выполнения правил. Приоритеты учитываются только в том случае, если правила противоречат друг другу или должны выполняться в определенном порядке. Действия выполняются в порядке убывания приоритета соответствующих правил.
const rule = {
id: "my rule", // optional, will be generated if not set.
priority: 100, // optional, defaults to 100.
conditions: [ /* my conditions */ ],
actions: [ /* my actions */ ]
};
Объекты событий
Объекты событий могут поддерживать правила. Эти объекты событий не вызывают функцию обратного вызова при возникновении событий, а проверяют, выполняется ли хотя бы одно условие для любого зарегистрированного правила, и выполняют действия, связанные с этим правилом. Объекты событий, поддерживающие декларативный API, имеют три соответствующих метода: events.Event.addRules() , events.Event.removeRules() и events.Event.getRules() .
Добавить правила
Для добавления правил вызовите функцию addRules() объекта события. В качестве первого параметра она принимает массив экземпляров правил, а в качестве результата — функцию обратного вызова, которая вызывается по завершении.
const rule_list = [rule1, rule2, ...];
addRules(rule_list, (details) => {...});
Если правила были успешно добавлены, параметр details содержит массив добавленных правил, расположенных в том же порядке, что и в переданном rule_list где необязательные параметры id и priority были заполнены сгенерированными значениями. Если какое-либо правило недействительно, например, из-за наличия недопустимого условия или действия, ни одно из правил не добавляется, и переменная runtime.lastError устанавливается при вызове функции обратного вызова. Каждое правило в rule_list должно содержать уникальный идентификатор, который еще не используется другим правилом, или пустой идентификатор.
Удалить правила
Для удаления правил вызовите функцию removeRules() . Она принимает в качестве первого параметра необязательный массив идентификаторов правил, а в качестве второго параметра — функцию обратного вызова.
const rule_ids = ["id1", "id2", ...];
removeRules(rule_ids, () => {...});
Если rule_ids представляет собой массив идентификаторов, удаляются все правила, имеющие идентификаторы, перечисленные в массиве. Если rule_ids содержит неизвестный идентификатор, он молча игнорируется. Если rule_ids undefined , удаляются все зарегистрированные правила этого расширения. Функция callback() вызывается при удалении правил.
Получить правила
Для получения списка зарегистрированных правил вызовите функцию getRules() . Она принимает необязательный массив идентификаторов правил с той же семантикой, что и removeRules() , и функцию обратного вызова.
const rule_ids = ["id1", "id2", ...];
getRules(rule_ids, (details) => {...});
Параметр details , передаваемый в функцию callback() представляет собой массив правил, включающий заполненные необязательные параметры.
Производительность
Для достижения максимальной производительности следует учитывать следующие рекомендации.
Регистрируйте и отменяйте регистрацию правил одновременно. После каждой регистрации или отмены регистрации Chrome необходимо обновлять внутренние структуры данных. Это обновление является ресурсоемкой операцией.
const rule1 = {...}; const rule2 = {...}; browser.declarativeWebRequest.onRequest.addRules([rule1]); browser.declarativeWebRequest.onRequest.addRules([rule2]);
const rule1 = {...}; const rule2 = {...}; browser.declarativeWebRequest.onRequest.addRules([rule1, rule2]);
В events.UrlFilter предпочтительнее использовать сопоставление подстрок, а не регулярные выражения. Сопоставление на основе подстрок выполняется чрезвычайно быстро.
const match = new browser.declarativeWebRequest.RequestMatcher({ url: {urlMatches: "example.com/[^?]*foo" } });
const match = new browser.declarativeWebRequest.RequestMatcher({ url: {hostSuffix: "example.com", pathContains: "foo"} });
Если существует много правил, выполняющих одни и те же действия, объедините их в одно. Правила запускают свои действия, как только выполняется одно условие. Это ускоряет сопоставление и снижает потребление памяти для повторяющихся наборов действий.
const condition1 = new browser.declarativeWebRequest.RequestMatcher({ url: { hostSuffix: 'example.com' } }); const condition2 = new browser.declarativeWebRequest.RequestMatcher({ url: { hostSuffix: 'foobar.com' } }); const rule1 = { conditions: [condition1], actions: [new browser.declarativeWebRequest.CancelRequest()] }; const rule2 = { conditions: [condition2], actions: [new browser.declarativeWebRequest.CancelRequest()] }; browser.declarativeWebRequest.onRequest.addRules([rule1, rule2]);
const condition1 = new browser.declarativeWebRequest.RequestMatcher({ url: { hostSuffix: 'example.com' } }); const condition2 = new browser.declarativeWebRequest.RequestMatcher({ url: { hostSuffix: 'foobar.com' } }); const rule = { conditions: [condition1, condition2], actions: [new browser.declarativeWebRequest.CancelRequest()] }; browser.declarativeWebRequest.onRequest.addRules([rule]);
Отфильтрованные события
Фильтрованные события — это механизм, позволяющий слушателям указывать подмножество событий, которые их интересуют. Слушатель, использующий фильтр, не будет вызываться для событий, не прошедших фильтр, что делает код прослушивания более декларативным и эффективным. Сервис-воркер не нужно пробуждать для обработки событий, которые его не интересуют.
Фильтрованные события предназначены для обеспечения плавного перехода от ручной фильтрации кода.
browser.webNavigation.onCommitted.addListener((event) => { if (hasHostSuffix(event.url, 'google.com') || hasHostSuffix(event.url, 'google.com.au')) { // ... } });
browser.webNavigation.onCommitted.addListener((event) => { // ... }, {url: [{hostSuffix: 'google.com'}, {hostSuffix: 'google.com.au'}]});
События поддерживают определенные фильтры, имеющие значение для данного события. Список фильтров, поддерживаемых событием, будет указан в документации к этому событию в разделе «Фильтры».
При сопоставлении URL-адресов (как в приведенном выше примере) фильтры событий поддерживают те же возможности сопоставления URL-адресов, что и при использовании events.UrlFilter , за исключением сопоставления схемы и порта.
Типы
Event
Объект, позволяющий добавлять и удалять обработчики событий Chrome.
Характеристики
- addListener
пустота
Регистрирует обработчик события (обратный вызов ).
Функция
addListenerвыглядит следующим образом:(callback: H) => {...}
- перезвонить
ЧАС
Вызывается при возникновении события. Параметры этой функции зависят от типа события.
- addRules
пустота
Регистрирует правила для обработки событий.
Функция
addRulesвыглядит следующим образом: [], callback?: function) => {...}(rules: Rule<anyany>
- правила
Правило <anyany>[]
Правила подлежат регистрации. Они не заменяют ранее зарегистрированные правила.
- перезвонить
функция необязательна
Параметр
callbackвыглядит следующим образом: []) => void(rules: Rule<anyany>
- правила
Правило <anyany>[]
В зарегистрированных правилах необязательные параметры заполняются значениями.
- getRules
пустота
Возвращает зарегистрированные в данный момент правила.
Функция
getRulesвыглядит следующим образом:(ruleIdentifiers?: string[], callback: function) => {...}
- ruleIdentifiers
строка[] необязательный
Если передан массив, возвращаются только правила, идентификаторы которых содержатся в этом массиве.
- перезвонить
функция
Параметр
callbackвыглядит следующим образом: []) => void(rules: Rule<anyany>
- правила
Правило <anyany>[]
В зарегистрированных правилах необязательные параметры заполняются значениями.
- hasListener
пустота
Функция
hasListenerвыглядит следующим образом:(callback: H) => {...}
- перезвонить
ЧАС
Слушатель, чей регистрационный статус подлежит проверке.
- возвраты
логический
Возвращает true, если функция обратного вызова зарегистрирована для события.
- hasListeners
пустота
Функция
hasListenersвыглядит следующим образом:() => {...}- возвраты
логический
Возвращает true, если на мероприятие зарегистрированы какие-либо слушатели события.
- удалитьСлушатель
пустота
Отменяет регистрацию обратного вызова обработчика события.
Функция
removeListenerвыглядит следующим образом:(callback: H) => {...}
- перезвонить
ЧАС
Слушатель, который не должен быть зарегистрирован.
- removeRules
пустота
Отменяет регистрацию уже зарегистрированных правил.
Функция
removeRulesвыглядит следующим образом:(ruleIdentifiers?: string[], callback?: function) => {...}
- ruleIdentifiers
строка[] необязательный
Если передан массив, то отменяются только правила, идентификаторы которых содержатся в этом массиве.
- перезвонить
функция необязательна
Параметр
callbackвыглядит следующим образом:() => void
Rule
Описание декларативного правила обработки событий.
Характеристики
- действия
любой[]
Список действий, которые запускаются при выполнении одного из условий.
- условия
любой[]
Список условий, которые могут инициировать действия.
- идентификатор
строка необязательный
Необязательный идентификатор, позволяющий ссылаться на это правило.
- приоритет
число необязательно
Приоритет этого правила необязателен. По умолчанию — 100.
- теги
строка[] необязательный
Теги можно использовать для аннотирования правил и выполнения операций над наборами правил.
UrlFilter
Фильтрует URL-адреса по различным критериям. См. фильтрацию событий . Все критерии чувствительны к регистру.
Характеристики
- cidrBlocks
строка[] необязательный
Chrome 123+Совпадение происходит, если хостовая часть URL-адреса представляет собой IP-адрес и содержится в любом из блоков CIDR, указанных в массиве.
- hostContains
строка необязательный
Соответствует, если имя хоста URL содержит указанную строку. Чтобы проверить, имеет ли компонент имени хоста префикс 'foo', используйте hostContains: '.foo'. Это соответствует 'www.foobar.com' и 'foo.com', поскольку в начале имени хоста добавляется неявная точка. Аналогично, hostContains можно использовать для сопоставления с суффиксом компонента ('foo.') и для точного сопоставления с компонентами ('.foo.'). Суффиксное и точное сопоставление для последних компонентов необходимо выполнять отдельно с помощью hostSuffix, поскольку в конце имени хоста не добавляется неявная точка.
- hostEquals
строка необязательный
Срабатывает, если имя хоста в URL-адресе совпадает с указанной строкой.
- hostPrefix
строка необязательный
Срабатывает, если имя хоста в URL-адресе начинается с указанной строки.
- hostSuffix
строка необязательный
Совпадение происходит, если имя хоста в URL-адресе заканчивается указанной строкой.
- originAndPathMatches
строка необязательный
Совпадение происходит, если URL-адрес без идентификаторов сегмента запроса и фрагмента соответствует указанному регулярному выражению. Номера портов удаляются из URL-адреса, если они совпадают с номером порта по умолчанию. В регулярных выражениях используется синтаксис RE2 .
- pathContains
строка необязательный
Срабатывает, если сегмент пути URL содержит указанную строку.
- pathEquals
строка необязательный
Срабатывает, если сегмент пути URL-адреса равен указанной строке.
- pathPrefix
строка необязательный
Срабатывает, если сегмент пути URL начинается с указанной строки.
- pathSuffix
строка необязательный
Срабатывает, если сегмент пути URL заканчивается указанной строкой.
- порты
(число | число[])[] необязательно
Соответствует запросу, если порт URL-адреса содержится в каком-либо из указанных списков портов. Например,
[80, 443, [1000, 1200]]соответствует всем запросам на портах 80, 443 и в диапазоне 1000-1200. - queryContains
строка необязательный
Срабатывает, если сегмент запроса URL содержит указанную строку.
- queryEquals
строка необязательный
Совпадение происходит, если сегмент запроса URL-адреса равен указанной строке.
- queryPrefix
строка необязательный
Совпадение происходит, если сегмент запроса URL начинается с указанной строки.
- querySuffix
строка необязательный
Совпадение происходит, если сегмент запроса URL заканчивается указанной строкой.
- схемы
строка[] необязательный
Совпадение происходит, если схема URL-адреса совпадает с любой из схем, указанных в массиве.
- urlContains
строка необязательный
Совпадение происходит, если URL (без идентификатора фрагмента) содержит указанную строку. Номера портов удаляются из URL, если они совпадают с номером порта по умолчанию.
- urlEquals
строка необязательный
Совпадение происходит, если URL (без идентификатора фрагмента) равен указанной строке. Номера портов удаляются из URL, если они совпадают с номером порта по умолчанию.
- urlMatches
строка необязательный
Совпадение происходит, если URL-адрес (без идентификатора фрагмента) соответствует указанному регулярному выражению. Номера портов удаляются из URL-адреса, если они совпадают с номером порта по умолчанию. В регулярных выражениях используется синтаксис RE2 .
- urlPrefix
строка необязательный
Совпадение происходит, если URL-адрес (без идентификатора фрагмента) начинается с указанной строки. Номера портов удаляются из URL-адреса, если они совпадают с номером порта по умолчанию.
- urlSuffix
строка необязательный
Совпадение происходит, если URL-адрес (без идентификатора фрагмента) заканчивается указанной строкой. Номера портов удаляются из URL-адреса, если они совпадают с номером порта по умолчанию.