3

有没有办法用服务人员存储用户 ID 和可能的其他信息?

这样当您向它发送推送通知时,它就能够使用本地存储的信息并对其进行处理?

我尝试使用 localStorage,但它似乎无法识别它。

当我收到此错误时:

Uncaught ReferenceError: localStorage is not defined

4

3 回答 3

6

本地存储在 Service Worker 中不可用,因为它没有异步 API。Service Worker 被设计为完全异步的,因此在 Service Worker 上下文中没有可用的同步 API。您可以改用IndexedDB,尽管不幸的是它的 API 更加笨拙。

于 2015-10-20T12:51:54.197 回答
5

最近想完成同样的事情。仅仅通过 UID,IndexedDB 就显得如此沉重。但后来我意识到你可以通过服务工作者 url 路径中的查询参数传递一个 UID ......

navigator.serviceWorker.register(`/public/js/lib/service-worker.js?uid=${window.uid}`).then((reg) => {

...然后只需通过location在服务人员内部解析来访问它。

于 2016-01-18T16:59:19.987 回答
1

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();
...    
于 2021-02-06T18:47:01.057 回答