События в сервисных работниках

Сервисные обработчики расширений поддерживают как стандартные события сервисных обработчиков , так и множество событий в 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 — поддерживаются в сервисных работниках расширений.

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