Spec-Zone.ru › Web APIs

ServiceWorkerGlobalScope: событие pushsubscriptionchange

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или всех поддерживающих браузерах.

Примечание: Эта функция доступна только в сервис-воркерах.

Событие pushsubscriptionchange отправляется в глобальную область ServiceWorker для указания изменения подписки на push, произошедшего вне контроля приложения.

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

Это событие не может быть отменено и не всплывает.

Синтаксис

Используйте имя события в методах, таких как addEventListener(), или задайте свойство обработчика события.

addEventListener("pushsubscriptionchange", (event) => {});

onpushsubscriptionchange = (event) => {};

Тип события

Общее Event.

Примечания по использованию

Хотя примеры, демонстрирующие, как делиться информацией о подписке с сервером приложения, часто используют fetch(), это не обязательно лучший выбор для реального использования, так как он не будет работать, например, если приложение находится в автономном режиме.

Рассмотрите возможность использования другого метода для синхронизации информации о подписке между вашим сервис-воркером и сервером приложения или убедитесь, что ваш код, использующий fetch() достаточно устойчив к ситуациям, когда попытки обмена данными терпят неудачу.

Примечание: В более ранних черновиках спецификации это событие было определено как событие, которое отправляется, когда PushSubscription истек.

Примеры

В этом примере, выполняемом в контексте сервис-воркера, подключается обработчик события pushsubscriptionchange и повторно подписывается на истекшую подписку.

self.addEventListener(
  "pushsubscriptionchange",
  (event) => {
    const conv = (val) =>
      self.btoa(String.fromCharCode.apply(null, new Uint8Array(val)));
    const getPayload = (subscription) => ({
      endpoint: subscription.endpoint,
      publicKey: conv(subscription.getKey("p256dh")),
      authToken: conv(subscription.getKey("auth")),
    });

    const subscription = self.registration.pushManager
      .subscribe(event.oldSubscription.options)
      .then((subscription) =>
        fetch("register", {
          method: "post",
          headers: {
            "Content-type": "application/json",
          },
          body: JSON.stringify({
            old: getPayload(event.oldSubscription),
            new: getPayload(subscription),
          }),
        }),
      );
    event.waitUntil(subscription);
  },
  false,
);

Когда событие pushsubscriptionchange поступает, указывая, что подписка истекла, мы повторно подписываемся, вызывая метод subscribe() менеджера push. Когда полученная promise разрешается, мы получаем новую подписку. Она передаётся на сервер приложения с помощью вызова fetch() для отправки представленного в формате JSON значения endpoint подписки на сервер приложения.

Вы также можете использовать свойство обработчика событий onpushsubscriptionchange для настройки обработчика события:

self.onpushsubscriptionchange = (event) => {
  event.waitUntil(
    self.registration.pushManager
      .subscribe(event.oldSubscription.options)
      .then((subscription) => {
        /* ... */
      }),
  );
};

Спецификации

Спецификация
Push API
# the-pushsubscriptionchange-event
Push API
# dom-serviceworkerglobalscope-onpushsubscriptionchange

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
pushsubscriptionchange_event Нет 17–79
44У события отсутствуют свойства oldSubscription и newSubscription. См. ошибку 1497429.
Нет
16Уведомления поддерживаются на macOS Ventura и новее.
Нет
48У события отсутствуют свойства oldSubscription и newSubscription. См. ошибку 1497429.
Нет Нет Нет Нет

См. также

  • Использование API Push

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerGlobalScope/pushsubscriptionchange_event

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API