gpt4 book ai didi

service-worker - 将 sw 放置在子文件夹中时,navigator.serviceWorker.ready 不会触发

转载 作者:行者123 更新时间:2023-12-04 14:19:33 25 4
gpt4 key购买 nike

我们的应用程序由 https://myserver.com/myapp 提供(由虚拟应用程序中的 IIS)提供。

https://myserver.com/myapp 返回的 HTML是:

<html>
<!-- This file is served as a virtual application from https://myserver.com/myapp-->
<head>
<script src="/myapp/file.js"></script>
</head>
<body>
</body>

要注册 serviceworker,我需要添加子文件夹,如下所示
// This does not work since the app is served from /myapp
navigator.serviceWorker.register("/sw.js") // Fail, will try loading https://myServer.com/sw.js

// This works (registration successful)
navigator.serviceWorker.register("/myapp/sw.js") // This will register the sw.

当我尝试使用 serviceworker 时出现问题,即等待就绪事件:
// Inside of file.js
navigator.serviceWorker.ready.then(...) // Will not fire

我猜发生的事情是就绪事件没有触发,因为 serviceworker“认为”它是从名为“MyApp”的子文件夹安装的,但是当 file.js 运行并尝试使用 serviceworker 时,它看起来像该文件.js 是从 root 提供的,因此超出了 serviceworker 的范围。

关于如何处理这个的任何想法?我尝试使用 scope 参数,但我认为这仅用于限制范围,而不是扩展范围。
{ scope: '/' } // Will fail with outside root error
{ scope: '/MyApp' } // Works, but still no ready event

我确定我在这里遗漏了一些东西,但我不知道它是什么。

最佳答案

我找到了一个解决方法,但仍然不确定为什么 ready 没有触发。

navigator.serviceWorker.ready.then(function(reg){...}) // Will not fire

// Instead, assume registred and active, then this is a workaround
navigator.serviceWorker.getRegistrations().then(function ([reg]) {...})

关于service-worker - 将 sw 放置在子文件夹中时,navigator.serviceWorker.ready 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56338747/

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