ExtendableCookieChangeEvent

基线 2025 *
新推出

自 2025 年 6 月起,此功能已在最新的设备和浏览器版本中可用。此功能可能不适用于旧设备或浏览器。

* 此特性的某些部分可能存在不同级别的支持。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能仅在 Service Workers 中可用。

ExtendableCookieChangeEvent 接口是 Cookie Store API 的事件类型,当在 ServiceWorkerGlobalScope 上触发的 cookiechange 事件匹配服务工作线程的 cookie 更改订阅列表时,会传递此事件类型。Cookie 更改事件包含一个 cookie 和一个类型("changed" 或 "deleted")。

导致 ExtendableCookieChangeEvent 被分派的 Cookie 更改是:

  • 一个 cookie 被新创建且未立即移除,或者 cookie 被替换。在这种情况下,type 为 "changed"。
  • 一个 cookie 被新创建并立即移除。在这种情况下,type 为 "deleted"。
  • 一个 cookie 被移除。在这种情况下,type 为 "deleted"。
Event ExtendableEvent ExtendableCookieChangeEvent

构造函数

ExtendableCookieChangeEvent()

创建一个新的 ExtendableCookieChangeEvent

实例属性

此接口还继承了 ExtendableEvent 的属性。

ExtendableCookieChangeEvent.changed 只读

返回一个包含已更改 cookie 的数组。

ExtendableCookieChangeEvent.deleted 只读

返回一个包含已删除 cookie 的数组。

实例方法

此接口还继承了 ExtendableEvent 的方法。

示例

在下面的示例中,我们使用 CookieStoreManager.getSubscriptions() 来获取现有订阅的列表。(在服务工作线程中,需要订阅才能侦听事件。)我们使用 CookieStoreManager.unsubscribe() 取消现有订阅,然后使用 CookieStoreManager.subscribe() 订阅名为 'COOKIE_NAME' 的 cookie。如果该 cookie 被更改,事件监听器会将事件记录到控制台。这将是一个 ExtendableCookieChangeEvent 对象,其 changeddeleted 属性将包含已修改的 cookie。

js
self.addEventListener("activate", (event) => {
  event.waitUntil(async () => {
    const subscriptions = await self.registration.cookies.getSubscriptions();

    await self.registration.cookies.unsubscribe(subscriptions);

    await self.registration.cookies.subscribe([
      {
        name: "COOKIE_NAME",
      },
    ]);
  });
});

self.addEventListener("cookiechange", (event) => {
  console.log(event);
});

规范

规范
Cookie Store API
# ExtendableCookieChangeEvent

浏览器兼容性