此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

ServiceWorkerContainer.register()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨2018年4月⁩.

实验性: 这是一项实验性技术
在将其用于生产之前,请仔细检查浏览器兼容性表格

ServiceWorkerContainer 接口的 register() 方法创建或更新一个给定 scriptURL 的ServiceWorkerRegistration

如果成功,一个服务工作者注册将提供的脚本 URL 与一个范围进行关联,后者用于导航匹配。如果该方法无法返回一个 ServiceWorkerRegistration,则返回一个 Promise

你可以从受控页无条件调用此方法,即,你不需要首先检查是否有一个有效的注册。

语法

js
ServiceWorkerContainer.register(scriptURL, options).then(
  function (ServiceWorkerRegistration) {
    // do something
  },
);

参数

scriptURL

service worker 脚本的 URL.

options 可选

注册时提供选项的配置对象。目前可用的选项包括:

  • scope: 一个 USVString,表示定义 service worker 注册范围的 URL;service worker 可以控制的 URL 范围。通常是相对 URL。默认值是基于当前的 location,并以此来解析传入的路径。

返回

返回一个 Promise 对象,值是 ServiceWorkerRegistration

示例

js
if ("serviceWorker" in navigator) {
  navigator.serviceWorker
    .register("service-worker.js", { scope: "./" })
    .then(function (registration) {
      document.querySelector("#status").textContent = "succeeded";
    })
    .catch(function (error) {
      document.querySelector("#status").textContent = error;
    });
} else {
  // The current browser doesn't support service workers.
  let aElement = document.createElement("a");
  aElement.href = `
     http://www.chromium.org/blink/serviceworker/service-worker-faq
  `;
  aElement.textContent = "unavailable";
  document.querySelector("#status").appendChild(aElement);
}

规范

Specification
Service Workers
# navigator-service-worker-register

浏览器兼容性