Сервисные обработчики расширений поддерживают как стандартные события сервисных обработчиков , так и множество событий в API расширений . В этом разделе описывается, что доступно, и даются советы по их использованию.
Объявить события расширения
Обработчики событий в сервис-воркерах должны быть объявлены в глобальной области видимости, то есть они должны находиться на верхнем уровне скрипта и не быть вложенными в функции. Это гарантирует их синхронную регистрацию при первоначальном выполнении скрипта, что позволяет Chrome отправлять события сервис-воркеру сразу после его запуска. Например:
browser.storage.local.get(["badgeText"], ({ badgeText }) => { browser.action.setBadgeText({ text: badgeText }); browser.action.onClicked.addListener(handleActionClick); });
browser.action.onClicked.addListener(handleActionClick); browser.storage.local.get(["badgeText"], ({ badgeText }) => { browser.action.setBadgeText({ text: badgeText }); });
Общие события
Сервисные обработчики расширений поддерживают события в определенных API. Несколько распространенных из них описаны ниже. Обратите внимание, что для использования некоторых из этих API требуются разрешения, а другие могут иметь события, методы или свойства, которые недоступны во всех версиях Chrome. Для получения подробной информации см. документацию по API по ссылке, особенно информацию о событиях, методах или свойствах, которые вы хотите использовать.
-
browser.action - Этот код срабатывает в ответ на взаимодействие пользователя со значком вашего расширения на панели инструментов, независимо от того, относится ли это действие к конкретной странице (вкладке) или ко всему расширению.
-
browser.management - Предоставляет информацию о событиях, связанных с установкой, удалением, включением и отключением расширений.
-
browser.notifications - Предоставляет информацию о событиях, связанных с взаимодействием пользователя с системными уведомлениями, генерируемыми расширением.
-
browser.permissions - Указывает, когда пользователь предоставляет или отзывает разрешения на использование расширений.
-
browser.runtime - Предоставляет информацию о событиях, связанных с жизненным циклом расширения, сообщениях, отправляемых из других частей расширения, а также уведомлениях о доступных обновлениях расширения или Chrome.
-
browser.storage.onChanged - Событие срабатывает всякий раз, когда очищается любой объект
StorageAreaили когда изменяется или устанавливается значение ключа. Обратите внимание, что каждый экземплярStorageAreaимеет собственное событиеonChanged. -
browser.webNavigation - Предоставляет информацию о статусе запросов на навигацию в полете.
Фильтры
Чтобы ограничить события определенным сценарием использования или исключить ненужные вызовы событий, используйте API, поддерживающие фильтры событий . Например, рассмотрите расширение, которое будет отслеживать событие tabs.onUpdated , чтобы определять, когда пользователь переходит на определенный веб-сайт. Это событие будет вызываться при каждом переходе по каждой вкладке. Вместо этого используйте webNavigation.onCompleted с фильтром. Например:
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
browser.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
События веб-сервис-воркера
Сотрудники службы распространения сельскохозяйственных знаний оказывают поддержку не только на этапах жизненного цикла , описанных в других разделах .
ServiceWorkerGlobal.fetch
Событие срабатывает при получении чего-либо из пакета расширения или при вызове fetch() и XMLHttpRequest() из скрипта расширения или всплывающего окна. (Вызовы из скриптов контента не перехватываются обработчиком fetch из сервис-воркера.) В последних случаях вам потребуется добавить URL-адреса страниц, которые вы хотите получить, в ключ "host_permissions" в файле manifest.json .
ServiceWorkerGlobal.message
Помимо передачи сообщений через расширения, доступна и передача сообщений через расширенные обработчики, но эти две системы несовместимы. Это означает, что сообщения, отправленные с помощью sendMessage() (доступного в нескольких API расширений), не перехватываются обработчиками сообщений сервисных работников. Аналогично, сообщения, отправленные с помощью postMessage() не перехватываются обработчиками сообщений расширений. Оба типа обработчиков сообщений — то есть ServiceWorkerGlobal.message и browser.runtime.onMessage — поддерживаются в сервисных работниках расширений.
Следует отдавать предпочтение обмену сообщениями через расширения, если только у вас нет особой причины использовать обмен сообщениями через сервис-воркеры.
,Сервисные обработчики расширений поддерживают как стандартные события сервисных обработчиков , так и множество событий в API расширений . В этом разделе описывается, что доступно, и даются советы по их использованию.
Объявить события расширения
Обработчики событий в сервис-воркерах должны быть объявлены в глобальной области видимости, то есть они должны находиться на верхнем уровне скрипта и не быть вложенными в функции. Это гарантирует их синхронную регистрацию при первоначальном выполнении скрипта, что позволяет Chrome отправлять события сервис-воркеру сразу после его запуска. Например:
browser.storage.local.get(["badgeText"], ({ badgeText }) => { browser.action.setBadgeText({ text: badgeText }); browser.action.onClicked.addListener(handleActionClick); });
browser.action.onClicked.addListener(handleActionClick); browser.storage.local.get(["badgeText"], ({ badgeText }) => { browser.action.setBadgeText({ text: badgeText }); });
Общие события
Сервисные обработчики расширений поддерживают события в определенных API. Несколько распространенных из них описаны ниже. Обратите внимание, что для использования некоторых из этих API требуются разрешения, а другие могут иметь события, методы или свойства, которые недоступны во всех версиях Chrome. Для получения подробной информации см. документацию по API по ссылке, особенно информацию о событиях, методах или свойствах, которые вы хотите использовать.
-
browser.action - Этот код срабатывает в ответ на взаимодействие пользователя со значком вашего расширения на панели инструментов, независимо от того, относится ли это действие к конкретной странице (вкладке) или ко всему расширению.
-
browser.management - Предоставляет информацию о событиях, связанных с установкой, удалением, включением и отключением расширений.
-
browser.notifications - Предоставляет информацию о событиях, связанных с взаимодействием пользователя с системными уведомлениями, генерируемыми расширением.
-
browser.permissions - Указывает, когда пользователь предоставляет или отзывает разрешения на использование расширений.
-
browser.runtime - Предоставляет информацию о событиях, связанных с жизненным циклом расширения, сообщениях, отправляемых из других частей расширения, а также уведомлениях о доступных обновлениях расширения или Chrome.
-
browser.storage.onChanged - Событие срабатывает всякий раз, когда очищается любой объект
StorageAreaили когда изменяется или устанавливается значение ключа. Обратите внимание, что каждый экземплярStorageAreaимеет собственное событиеonChanged. -
browser.webNavigation - Предоставляет информацию о статусе запросов на навигацию в полете.
Фильтры
Чтобы ограничить события определенным сценарием использования или исключить ненужные вызовы событий, используйте API, поддерживающие фильтры событий . Например, рассмотрите расширение, которое будет отслеживать событие tabs.onUpdated , чтобы определять, когда пользователь переходит на определенный веб-сайт. Это событие будет вызываться при каждом переходе по каждой вкладке. Вместо этого используйте webNavigation.onCompleted с фильтром. Например:
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
browser.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
События веб-сервис-воркера
Сотрудники службы распространения сельскохозяйственных знаний оказывают поддержку не только на этапах жизненного цикла , описанных в других разделах .
ServiceWorkerGlobal.fetch
Событие срабатывает при получении чего-либо из пакета расширения или при вызове fetch() и XMLHttpRequest() из скрипта расширения или всплывающего окна. (Вызовы из скриптов контента не перехватываются обработчиком fetch из сервис-воркера.) В последних случаях вам потребуется добавить URL-адреса страниц, которые вы хотите получить, в ключ "host_permissions" в файле manifest.json .
ServiceWorkerGlobal.message
Помимо передачи сообщений через расширения, доступна и передача сообщений через расширенные обработчики, но эти две системы несовместимы. Это означает, что сообщения, отправленные с помощью sendMessage() (доступного в нескольких API расширений), не перехватываются обработчиками сообщений сервисных работников. Аналогично, сообщения, отправленные с помощью postMessage() не перехватываются обработчиками сообщений расширений. Оба типа обработчиков сообщений — то есть ServiceWorkerGlobal.message и browser.runtime.onMessage — поддерживаются в сервисных работниках расширений.
Следует отдавать предпочтение обмену сообщениями через расширения, если только у вас нет особой причины использовать обмен сообщениями через сервис-воркеры.
,Сервисные обработчики расширений поддерживают как стандартные события сервисных обработчиков , так и множество событий в API расширений . В этом разделе описывается, что доступно, и даются советы по их использованию.
Объявить события расширения
Обработчики событий в сервис-воркерах должны быть объявлены в глобальной области видимости, то есть они должны находиться на верхнем уровне скрипта и не быть вложенными в функции. Это гарантирует их синхронную регистрацию при первоначальном выполнении скрипта, что позволяет Chrome отправлять события сервис-воркеру сразу после его запуска. Например:
browser.storage.local.get(["badgeText"], ({ badgeText }) => { browser.action.setBadgeText({ text: badgeText }); browser.action.onClicked.addListener(handleActionClick); });
browser.action.onClicked.addListener(handleActionClick); browser.storage.local.get(["badgeText"], ({ badgeText }) => { browser.action.setBadgeText({ text: badgeText }); });
Общие события
Сервисные обработчики расширений поддерживают события в определенных API. Несколько распространенных из них описаны ниже. Обратите внимание, что для использования некоторых из этих API требуются разрешения, а другие могут иметь события, методы или свойства, которые недоступны во всех версиях Chrome. Для получения подробной информации см. документацию по API по ссылке, особенно информацию о событиях, методах или свойствах, которые вы хотите использовать.
-
browser.action - Этот код срабатывает в ответ на взаимодействие пользователя со значком вашего расширения на панели инструментов, независимо от того, относится ли это действие к конкретной странице (вкладке) или ко всему расширению.
-
browser.management - Предоставляет информацию о событиях, связанных с установкой, удалением, включением и отключением расширений.
-
browser.notifications - Предоставляет информацию о событиях, связанных с взаимодействием пользователя с системными уведомлениями, генерируемыми расширением.
-
browser.permissions - Указывает, когда пользователь предоставляет или отзывает разрешения на использование расширений.
-
browser.runtime - Предоставляет информацию о событиях, связанных с жизненным циклом расширения, сообщениях, отправляемых из других частей расширения, а также уведомлениях о доступных обновлениях расширения или Chrome.
-
browser.storage.onChanged - Событие срабатывает всякий раз, когда очищается любой объект
StorageAreaили когда изменяется или устанавливается значение ключа. Обратите внимание, что каждый экземплярStorageAreaимеет собственное событиеonChanged. -
browser.webNavigation - Предоставляет информацию о статусе запросов на навигацию в полете.
Фильтры
Чтобы ограничить события определенным сценарием использования или исключить ненужные вызовы событий, используйте API, поддерживающие фильтры событий . Например, рассмотрите расширение, которое будет отслеживать событие tabs.onUpdated , чтобы определять, когда пользователь переходит на определенный веб-сайт. Это событие будет вызываться при каждом переходе по каждой вкладке. Вместо этого используйте webNavigation.onCompleted с фильтром. Например:
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
browser.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
События веб-сервис-воркера
Сотрудники службы распространения сельскохозяйственных знаний оказывают поддержку не только на этапах жизненного цикла , описанных в других разделах .
ServiceWorkerGlobal.fetch
Событие срабатывает при получении чего-либо из пакета расширения или при вызове fetch() и XMLHttpRequest() из скрипта расширения или всплывающего окна. (Вызовы из скриптов контента не перехватываются обработчиком fetch из сервис-воркера.) В последних случаях вам потребуется добавить URL-адреса страниц, которые вы хотите получить, в ключ "host_permissions" в файле manifest.json .
ServiceWorkerGlobal.message
Помимо передачи сообщений через расширения, доступна и передача сообщений через расширенные обработчики, но эти две системы несовместимы. Это означает, что сообщения, отправленные с помощью sendMessage() (доступного в нескольких API расширений), не перехватываются обработчиками сообщений сервисных работников. Аналогично, сообщения, отправленные с помощью postMessage() не перехватываются обработчиками сообщений расширений. Оба типа обработчиков сообщений — то есть ServiceWorkerGlobal.message и browser.runtime.onMessage — поддерживаются в сервисных работниках расширений.
Следует отдавать предпочтение обмену сообщениями через расширения, если только у вас нет особой причины использовать обмен сообщениями через сервис-воркеры.