Angular 无法安装 PWA 错误站点:未检测到匹配的服务工作者
Angular PWA error Site cannot be installed: no matching service worker detected
我有一个网站 (Angular 9.0.1),我添加了 @angular/pwa
包以将其转换为 PWA,但它无法正常工作。
该网站在生产站点上,但现在有测试数据 https://new.indomablestore.com
我已检查所需文件(manifest.webmanifest
、ngsw.json
、ngsw-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: './' })
],
...
感谢您的快速回答:)
您可以尝试在两个应用程序清单中设置作用域 (/
):
"scope": "/",
"start_url": "/",
并且在注册 service worker 时:
ServiceWorkerModule.register('./ngsw-worker.js', {
scope: './',
}),
但我认为问题在于您的 Web 服务器应附加尾部斜杠。也就是说,当用户访问您的网站时,他们应该被重定向到
new.indomablestore.com/
,这对应于您的应用程序范围和索引中的基本路径。
我找到了答案。 Angular 等到应用程序 "stable" 才注册 service worker。该应用程序在启动时有一个 AJAX 调用,用于检查服务器是否有新产品、照片...显然这让 Angular 认为它不稳定,所以它甚至不调用该服务工人注册。
正如 中指出的那样,注册有一个名为 "registrationStrategy" 的选项,我可以将其设置为 "registerImmediately"。
ServiceWorkerModule.register('ngsw-worker.js',
{
enabled: environment.production,
registrationStrategy: 'registerImmediately'
}
)
它刚刚开始工作:)
无论如何,感谢您的帮助和快速解答。
我有一个网站 (Angular 9.0.1),我添加了 @angular/pwa
包以将其转换为 PWA,但它无法正常工作。
该网站在生产站点上,但现在有测试数据 https://new.indomablestore.com
我已检查所需文件(manifest.webmanifest
、ngsw.json
、ngsw-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: './' })
],
...
感谢您的快速回答:)
您可以尝试在两个应用程序清单中设置作用域 (/
):
"scope": "/",
"start_url": "/",
并且在注册 service worker 时:
ServiceWorkerModule.register('./ngsw-worker.js', {
scope: './',
}),
但我认为问题在于您的 Web 服务器应附加尾部斜杠。也就是说,当用户访问您的网站时,他们应该被重定向到
new.indomablestore.com/
,这对应于您的应用程序范围和索引中的基本路径。
我找到了答案。 Angular 等到应用程序 "stable" 才注册 service worker。该应用程序在启动时有一个 AJAX 调用,用于检查服务器是否有新产品、照片...显然这让 Angular 认为它不稳定,所以它甚至不调用该服务工人注册。
正如
ServiceWorkerModule.register('ngsw-worker.js',
{
enabled: environment.production,
registrationStrategy: 'registerImmediately'
}
)
它刚刚开始工作:)
无论如何,感谢您的帮助和快速解答。