有没有办法用服务人员存储用户 ID 和可能的其他信息?
这样当您向它发送推送通知时,它就能够使用本地存储的信息并对其进行处理?
我尝试使用 localStorage,但它似乎无法识别它。
当我收到此错误时:
Uncaught ReferenceError: localStorage is not defined
有没有办法用服务人员存储用户 ID 和可能的其他信息?
这样当您向它发送推送通知时,它就能够使用本地存储的信息并对其进行处理?
我尝试使用 localStorage,但它似乎无法识别它。
当我收到此错误时:
Uncaught ReferenceError: localStorage is not defined
本地存储在 Service Worker 中不可用,因为它没有异步 API。Service Worker 被设计为完全异步的,因此在 Service Worker 上下文中没有可用的同步 API。您可以改用IndexedDB,尽管不幸的是它的 API 更加笨拙。
最近想完成同样的事情。仅仅通过 UID,IndexedDB 就显得如此沉重。但后来我意识到你可以通过服务工作者 url 路径中的查询参数传递一个 UID ......
navigator.serviceWorker.register(`/public/js/lib/service-worker.js?uid=${window.uid}`).then((reg) => {
...然后只需通过location
在服务人员内部解析来访问它。
PARAMS en la llamda JS del servicio y recuperar el valor en self.location.search en service worker。
索引.html
window.my_user_id = 16;
寄存器SW()
navigator.serviceWorker.register('PNServiceWorker.js?my_user_id='+window.my_user_id)
en el Service Worker, self.location.search opinionra el valor: ?uid=16
保存订阅服务器:
....
if (self.location.search !== undefined) {
body.params = self.location.search.substring(1); // my_user_id=16
}
var fetchdata = {
method: 'post',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body),
}
var response = await fetch(strSubscriberURL, fetchdata);
return await response.json();
...