如何使用service worker存储一个用户id

How to store a user id using service worker

本文关键字:一个 用户 id 何使用 service worker 存储      更新时间:2023-09-26

是否有一种方法可以在service worker中存储用户id和其他可能的信息?

所以当你发送推送通知给它时,它能够使用本地存储的信息并对它做一些事情?

我试图使用localStorage,但它似乎不认识它。

当我得到这个错误:

Uncaught ReferenceError: localStorage is not defined

本地存储在Service worker中是不可用的,因为它没有异步API。Service Worker被设计成完全异步的,所以在Service Worker上下文中没有同步api可用。您可以使用IndexedDB,但不幸的是,它的API要笨拙得多。

最近想完成同样的事情。IndexedDB对于传递UID来说太沉重了。但是后来我意识到你可以通过service worker url路径中的查询参数传递UID…

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

…然后通过解析service worker中的location来访问它。

PARAMS . view . JS . view . view . view . view . view . view . view . view . view . view . view . view。search en service worker.

index . html

window.my_user_id = 16;

RegisterSW ()

navigator.serviceWorker.register('PNServiceWorker.js?my_user_id='+window.my_user_id)

enel Service Worker, self.location.search contentdrel 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();
...