Capacitor Service Worker 注册未知错误/网络连接被拒绝

问题描述 投票:0回答:1

我目前正在开发一个带有 Capacitor 的应用程序,因为它使用内部 https 服务器将文件提供给 WebView 而不是文件协议,这应该允许我使用服务工作者,但遗憾的是这似乎并不能事实就是如此,即使据我了解,我想做的一切都在规范范围内。

主要脚本代码:

navigator.serviceWorker.register('sw.js');

服务人员代码:

console.log("I'm a service worker");

我得到什么

获取脚本时发生未知错误。 无法加载资源:net::ERR_CONNECTION_REFUSED localhost/:1 未捕获(承诺中) TypeError: 无法注册 ServiceWorker: 获取脚本时发生未知错误。

我期望得到什么

我是服务人员

另一方面,当我尝试使用完全相同的请求获取服务工作者时,它工作得很好。

代码:

fetch("https://localhost:4634/sw.js", {
    "credentials":"omit",
    "headers": {},
    "referrer":"https://localhost:4634/sw.js",
    "referrerPolicy":"no-referrer-when-downgrade",
    "body":null,
    "method":"GET",
    "mode":"cors"
}).then(res => {
    return res.text();
}).then(text => {
    console.log(text);
});

我得到的回报:

console.log("I'm a service worker");

如果有人知道我做错了什么,或者如果这仍然不符合规范,请告诉我

javascript android webview service-worker capacitor
1个回答
0
投票

您的错误消息表明

register
无法将
'sw.js'
识别为合格类型。

有几件事你可以尝试。

  1. 使用带有显式选项的绝对路径:
navigator.serviceWorker.register('/sw.js', {
  scope: '/',
  updateViaCache: 'none'
})
  1. 检查来自服务器的
    sw.js
    响应标头。它们应该包括:
Cache-Control: no-store
Content-Type: application/javascript
Service-Worker-Allowed: /

如果 Capacitor 不生成这些标头,那么您可能必须使用代理服务器来处理

sw.js
,然后再将响应传递给 WebView。

© www.soinside.com 2019 - 2024. All rights reserved.