4

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

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

我检查了所需的文件(manifest.webmanifest, ngsw.json, ngsw-worker.js)是否在根文件夹中。我检查了 index.html 文件是否正确指向清单,并且它显示在 Chrome DevtoolsApplication选项卡上。

但在该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: './' })
  ],
  ...

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

4

2 回答 2

10

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

正如此 Stack Overflow 答案中所指出的,注册有一个名为“registrationStrategy”的选项,我可以将其设置为“registerImmediately”。

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

它刚刚开始工作:)

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

于 2020-02-15T14:03:50.600 回答
1

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

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

并在注册服务人员时:

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

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

于 2020-02-14T23:15:54.223 回答