截至目前,Chrome不支持传递其他数据来推送从GCM收到的通知 . 因此,每当收到推送通知时,我都必须从我的服务工作者执行 fetch
. 到现在为止还挺好 .
But: 我需要在 fetch
中执行的http请求中包含一个请求参数 . 如何告诉服务工作者我的参数?
What I've tried so far
使用 postMessage
告诉我的服务工作者请求参数:
var serviceWorkerData = {};
self.addEventListener('message', function (evt)
{
console.log('service worker received', evt.data);
serviceWorkerData = evt.data.myData;
});
self.addEventListener('push', function(event)
{
event.waitUntil
(
fetch("http://my.url", {
method: 'post',
body: 'myData=' + serviceWorkerData
}).then(function(response)
{
//...
})
);
});
Why this is not working
但这并不是持久性的,即在我关闭浏览器并再次打开它之后,我的 serviceWorkerData
就丢失了 . localStorage
在服务工作者中不可用,所以如何在此处获得持久性?
1 回答
您可以使用IndexedDB .
https://github.com/mozilla/localForage如果您想为IndexedDB Build 一个更简单的接口 .
您可以使用importScripts导入服务工作者中的localForage lib,例如,请参阅:https://github.com/marco-c/mercurius/blob/master/static/sw-push.js .