无法安装站点:未检测到匹配的服务人员

Posted

技术标签:

【中文标题】无法安装站点:未检测到匹配的服务人员【英文标题】:Site cannot be installed: no matching service worker detected 【发布时间】:2018-01-14 00:03:15 【问题描述】:

嘿,我正在尝试编写我的第一个 pwa 并遇到以下问题:

当我启动我的网络应用程序时,我收到以下错误:

。您可能需要重新加载页面,或者检查当前页面的服务工作者是否也控制清单中的起始 URL

我认为我的清单 url 是正确的,因为这个 link

manifest.json

"start_url": ".",
"display": "standalone",
"orientation": "portrait",
"theme_color": "#29BDBB",
"background_color": "#29BDBB"

然后我像这样注册我的 sw:

if ('serviceWorker' in navigator) 
navigator.serviceWorker.register('./sw.js').then(function(reg) 
    console.log('Successfully registered service worker', reg);
).catch(function(err) 
    console.warn('Error whilst registering service worker', err);
);

我的软件来自here

所以我正在尝试制作一个简单的网络应用程序,我可以使用firebase 托管它。

有什么问题?感谢您的帮助

【问题讨论】:

协议是https:吗? <link rel="manifest" href="manifest.json"> 是否包含在 html 中? 是的,您可以在 firebase 链接 (shoppinglist-ecea7.firebaseapp.com) 中找到我的网站,并且我添加了链接,我的 manifest.json 与我的 index.html 和我的 firebase 文件位于同一文件夹中 能够注册ServiceWorker,但不确定网络应用部分plnkr.co/edit/7CneKIN60FSNa1qt3TrY?p=preview 感谢您的帮助,终于也注册了我的 ServiceWorker!应用程序部分是什么意思?我需要 fetch() 吗?因为我没有它就做了我的.. fetch() 不是必需的。包括检查过程是否按预期执行。以前没有知道与ServiceWorker 相关的manifest.json,该应用程序仅适用于移动应用程序吗? Application 选项卡中没有列出清单 【参考方案1】:

将 service worker 脚本文件放在您网站的根目录,并将 start_url 设置为 /,或者将其放置在您想要的任何位置并使用 scope 属性和 Service-Worker-Allowed HTTP 标头,如 my other answer .

【讨论】:

运行此命令时ng add @angular/pwa --project ng-zero service worker 安装在哪里? @Stephane 你找不到ngsw-worker.js 文件吗?坦率地说,我没有使用此 CLI 工具的经验 @Stephane 构建 ngsw-worker.js 的 ngsw-config.json 位于 Angular 应用程序的根文件夹中 哇,这似乎是一个小细节,但没有它对我来说是行不通的。现在我将 ws 放在根文件夹中,它可以完美运行。谢谢!【参考方案2】:

create react app service worker 只在生产中生效,所以在本地构建并服务它来测试 service worker 是否正常工作。

如果还没有,请先安装 serve npm:npm i serve -g

那么……

npm run build

serve -s build

也有可能一旦服务工作者成功注册,但像beforeinstallprompt 这样的东西可能不会被调用。 如果是这种情况,请使用像 firebase 这样的主机发布应用程序,它将通过https 为网站提供服务,然后尝试那里的beforeinstallprompt

【讨论】:

【参考方案3】:

以防万一其他使用 Angular8+ 的人发生这种情况。您可能需要将注册策略更改为:

ServiceWorkerModule.register('ngsw-worker.js',  enabled: environment.production, registrationStrategy: 'registerImmediately' ),

默认设置为registerWhenStable,即没有待处理的任务,like setTimeout()等。通过将其更改为registerImmediately,它将尽快注册您的服务工作者.

只是想我会分享这个并在此处添加它,因为这让我失去了几天的时间来尝试解决它。​​

【讨论】:

这个答案是一个隐藏的宝石。 @Methodician - 谢谢,我花了大约 3/4 天的时间来调试 Angular 代码 哇,这真的很有帮助。感谢分享。 什么是ngsw-worker.js。是你的 service-worker 文件吗 谢谢!很好的解决方案!【参考方案4】:

为了我的工作,将库 "@angular/service-worker":"^7.2.15" 更新为版本 "@angular/service-worker":"^ 8.2.3"

也投:ServiceWorkerModule.register ('ngsw-worker.js', enabled: environment.production, registrationStrategy: 'registerImmediately'),

【讨论】:

这与***.com/a/61152966/1507124 基本相同,如果可行,请考虑将其添加为对该问题的评论 是的,但是如果不更改 service-worker 的版本,它就不能,因为该类不存在属性 'registrationStrategy' 我可能错了,因为我只是看了一眼,但对我来说,您的答案看起来与已经提供的答案之一相同。在这种情况下,作为答案是不合适的,但作为让其他人知道它对您有用的评论可能很有价值【参考方案5】:

尝试进行以下更改:

ma​​nifest.json 中,start_urlscope 设置如下(或根据您的偏好):

  "start_url": "/",
  "scope": "."  

sw.js文件位于项目根目录,以start_url为参考。

【讨论】:

以上是关于无法安装站点:未检测到匹配的服务人员的主要内容,如果未能解决你的问题,请参考以下文章

无法安装站点:未检测到匹配的服务工作者

Flutter pwa app 未检测到服务人员

未检测到匹配的服务人员 - Angular 9

安装debian,无法检测到声卡

未从我们的企业站点安装企业应用程序(无法安装“--- 应用程序”请稍后重试)

Npm 安装期间“无法读取未定义的属性‘匹配’”