gpt4 book ai didi

google-chrome - navigator.serviceWorker.controller 始终为空

转载 作者:行者123 更新时间:2023-12-04 00:54:17 26 4
gpt4 key购买 nike

我的问题是,在注册 serviceWorker 后,navigator.serviceWorker.controller 始终为空。我从不强制刷新,只是刷新页面。我使用 Google Chrome 42.0.2311.152 m(32 位)对其进行了测试。

var currentServiceWorker = null;
navigator.serviceWorker.register(SERVICE_WORKER_URL).then(function(serviceWorkerRegistration {
if (navigator.serviceWorker.controller) {
currentServiceWorker = navigator.serviceWorker.controller;
} else {
currentServiceWorker = serviceWorkerRegistration.active;
}
});

根据这个:

The controller read-only property of the ServiceWorkerContainer interface returns a ServiceWorker object if its state is activated (the same object returned by ServiceWorkerRegistration.active). This property returns null if the request is a force refresh (Shift + refresh) or if there is no active worker. ( Source: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/controller)


navigator.serviceWorker.controller应该返回与 serviceWorkerRegistration.active 相同的对象.但与 .active我得到了活跃的 worker , .controller不是。

你对这种情况有什么想法吗?

谢谢,
和我

最佳答案

调试时我首先要看的是您当前所在的页面是否属于服务人员的范围。如果你当前的页面不在范围内,那么它就不会被控制(但是你注册的 service worker 仍然可以被认为是活跃的)。

您调用register(SERVICE_WORKER_URL)默认情况下,它将使用包含您的服务 worker 脚本的目录作为范围。这通常是您想要的,但您需要确保 SERVICE_WORKER_URL指的是位于您网站根目录的脚本。这样,它将能够控制同一根级别的页面,或您的 Web 根目录下的目录中的页面。因此,如果您的服务 worker JavaScript 文件当前位于 /scripts/ 下子目录或类似的东西,将其移至根目录。

您可以访问 chrome://serviceworker-internals/ 查看 Service Worker 的当前范围并查看与您的注册相关的范围是什么。

关于google-chrome - navigator.serviceWorker.controller 始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30256390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com