如何合并两个 Service Worker?
2020-10-22
494
我的应用程序中有两个服务工作线程。
第一个由 create-react-app 通过 workbox 自动生成,负责缓存静态构建资产,例如已编译的 javascript 和 css 文件。
第二个由我手动创建,负责在用户在应用程序中收到新消息时发送推送通知。
问题是,这两者都需要访问根范围,而我最近才发现两个服务工作线程不能共享一个范围。
我该如何协调呢?第二个服务工作线程(用于推送通知)仅在用户单击以允许应用程序内的推送通知时才注册,如下所示:
function subscribeUserToPush(cb) {
if ('Notification' in window && navigator.serviceWorker) {
return navigator.serviceWorker.register('/sw-notifications.js').then(function(registration) {
let subscribeOptions = {
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array('the-code-qc=')
};
return registration.pushManager.subscribe(subscribeOptions);
}).then(cb);
}
}
除非它们位于根范围内,否则两者都不起作用。当限制每个范围只能有一个服务工作线程使用时,我怎样才能让它们都工作呢?
1个回答
我建议使用
create-react-app
v4
,以及
cra-template-pwa
。
这将为您提供一个基于 Workbox 的服务工作线程,可以使用附加逻辑(例如推送通知代码)进行完全自定义。
遗憾的是,
c-r-a
的早期版本在这方面无法进行自定义。
Jeff Posnick
2020-11-03