Chrome:为什么 serviceWorker.ready 解析为处于“已安装”状态的服务工作者注册

Chrome: why does serviceWorker.ready resolve to a service worker registration in "installed" state?

本文关键字:状态 已安装 安装 服务 注册 工作者 服务工作 ready serviceWorker 为什么 Chrome      更新时间:2023-09-26

在Chrome(但不是Firefox)中,以下代码解析为具有状态installed的服务工作者注册,而不是activated,如预期的那样:

navigator.serviceWorker.ready.then(function(r) {
  console.log("STATE", r.active.state); // outputs "installed" on first load
});
navigator.serviceWorker.register('empty.js').then(function(r) {
  console.log('empty.js registered with scope:', r.scope);
});

这似乎既违背了规范("它等到承诺通过具有活动工作线程的服务工作线程注册解决")和该功能的意图。

  1. 为什么会这样?(为什么只在Chrome中,而不是在Firefox中?
  2. 如何确保在主机页面上发出的一组特定网络请求(例如通过fetch())通过服务工作线程发出?

看起来这是 Chrome 中的一个错误——状态实际上应该按预期activated(或activating,在这种情况下,功能事件会排队)。