我面临一些与服务工作者有关的问题,之前我使用gcm,服务工作者文件名是service-worker.js,在发布fcm后我改变了我的代码,现在我的服务工作者文件名是firebase-messaging-sw .js但在我的客户端浏览器中调用旧的service-worker.js文件,该文件生成错误(找不到service-worker.js 500)。我在gettoken()之前已经使用了以下代码。
const messaging = firebase.messaging();
navigator.serviceWorker.register('/firebase-messaging-sw.js')
.then((registration) => {
messaging.useServiceWorker(registration);
// Request permission and get token.....
});
但它仍然显示此错误。
答案 0 :(得分:2)
通常,如果您有多个服务工作者注册了不同的范围,并且您希望从客户端页面获取它们的列表(并且可能根据匹配的范围或SW URL取消注册其中一些),您可以执行以下操作:
async unregisterSWs({matchingScope, matchingUrl}) {
const registrations = await navigator.serviceWorker.getRegistrations();
const matchingRegistrations = registrations.filter(registration => {
if (matchingScope) {
return registration.scope === matchingScope;
}
if (matchingUrl) {
return registration.active.scriptURL === matchingUrl;
}
});
for (const registration of matchingRegistrations) {
await registration.unregister();
console.log('Unregistered ', registration);
}
}
然后调用它传入要用于取消注册的范围或SW脚本URL:
unregisterSWs({matchingScope: 'https://example.com/push'});
unregisterSWs({matchingUrl: 'https://example.com/my-push-sw.js'});