ServiceWorkerContainer: controller 属性

Baseline 已广泛支持

此功能已成熟,可跨多种设备和浏览器版本工作。它自 ⁨2018 年 4 月⁩ 起已在所有浏览器中可用。

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

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

ServiceWorkerContainer 接口的 controller 只读属性表示控制当前页面(与此 ServiceWorkerContainer 关联)的活动 service worker,如果该页面没有活动或正在激活的 service worker,则返回 null

这与 ServiceWorkerRegistration.active 返回的对象相同。

如果 ServiceWorker 对象的 state 处于 activatingactivated,则返回该对象,否则如果没有活动的工作线程,则返回 null

如果请求是强制刷新(Shift + 刷新),此属性也会返回 null

示例

测试页面是否由 service worker 控制

js
if ("serviceWorker" in navigator) {
  // Do a one-off check to see if a service worker's in control.
  if (navigator.serviceWorker.controller) {
    console.log(
      `This page is currently controlled by: ${navigator.serviceWorker.controller}`,
    );
  } else {
    console.log("This page is not currently controlled by a service worker.");
  }
} else {
  console.log("Service workers are not supported.");
}

规范

规范
Service Workers
# navigator-service-worker-controller

浏览器兼容性