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

Posted

技术标签:

【中文标题】Angular PWA 错误站点无法安装:未检测到匹配的服务人员【英文标题】:Angular PWA error Site cannot be installed: no matching service worker detected 【发布时间】:2020-05-30 17:35:13 【问题描述】:

我有一个网站 (Angular 9.0.1),我添加了 @angular/pwa 包以将其转换为 PWA,但它无法正常工作。

该网站在生产站点上,但测试数据现在在 https://new.indomablestore.com

我已检查所需文件(manifest.webmanifestngsw.jsonngsw-worker.js)是否位于根文件夹中。 我检查了 index.html 文件是否正确指向清单,它显示在 Chrome Devtools Application 选项卡上。

但是在Installability 部分它说:没有检测到匹配的服务工作者。您可能需要重新加载页面,或者检查当前页面的服务工作者是否也控制清单中的起始 URL。

我还检查了app.module.ts 文件有这一行:

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

而且我没有修改任何 PWA 文件,我让 Angular CLI 构建它们。

任何帮助将不胜感激,因为该网站即将上线,这是我列表中的最后一件事 :)

谢谢!

更新:清单如下所示:

  "name": "Indomable",
  "short_name": "Indomable",
  "theme_color": "#1976d2",
  "background_color": "#fafafa",
  "display": "standalone",
  "scope": "/",
  "start_url": "/",
  "icons": [
    ...
  ]

Service Worker 是这样在 app.module 上注册的:

@NgModule(
  declarations: [
    AppComponent,
    ...PAGES,
    ...COMPONENTS,
    ...PIPES
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    FormsModule,
    routing,
    NgxPayPalModule,
    ServiceWorkerModule.register('./ngsw-worker.js',  enabled: environment.production, scope: './' )
  ],
  ...

无论如何感谢您的快速回答:)

【问题讨论】:

chrome lighthouse 工具也指向了 cghislai 下文提到的内容。 start_url。 Lighthouse 通常会为您提供有关需要修复的问题的良好提示。 Lighthouse 报告给了我两个错误:“start_url 确实响应了,但不是通过服务人员。”和“不注册控制页面和start_url的服务工作者”,但它提供的链接是关于服务工作者的,而不是具体的错误。 【参考方案1】:

我找到了答案。 Angular 会等到应用程序“稳定”后再注册服务工作者。该应用程序在启动时有一个 AJAX 调用,用于检查服务器是否有新产品、照片……显然这让 Angular 认为它不稳定,因此它甚至不调用服务工作者注册。

正如this Stack Overflow answer 中指出的那样,注册有一个名为“registrationStrategy”的选项,我可以将其设置为“registerImmediately”。

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

它刚刚开始工作:)

无论如何,感谢您的帮助和快速解答。

【讨论】:

【参考方案2】:

您可以尝试在两个应用清单中设置范围 (/):

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

在注册服务工作者时:

    ServiceWorkerModule.register('./ngsw-worker.js', 
      scope: './',
    ),

但我认为问题在于您的网络服务器应该附加斜杠。也就是说,当用户访问您的网站时,他们应该被重定向到 new.indomablestore.com/,对应于你的应用范围和你的索引中的基本路径。

【讨论】:

清单已将“范围”和“start_url”设置为“/”。我已将“范围”添加到注册函数中,它仍然说同样的话。问题是我有许多其他使用 Angular PWA 的项目,它们都可以工作,我不会将它们重定向到带有斜杠的 URL :(

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

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

Angular 10 PWA 中 Chrome 更新后的新警告“无法安装站点:页面无法脱机工作。从 Chrome 93 开始...”

Flutter pwa app 未检测到服务人员

Google Chrome 无法在桌面系统上检测到 PWA?

IIS 子文件夹中的 Angular PWA 无法脱机工作

如何用Angular5创建一个PWA项目