【问题标题】:How to persist data in a Service Worker如何在 Service Worker 中持久化数据
【发布时间】:2016-02-05 19:06:49
【问题描述】:

截至目前,Chrome 不支持将额外数据传递给从 GCM 接收的推送通知。因此,每当我收到推送通知时,我都必须从我的 Service Worker 执行fetch。到目前为止,一切顺利。

但是:我需要在fetch 中执行的http 请求中包含一个请求参数。如何告诉服务人员我的参数?

到目前为止我所做的尝试

使用postMessage 告诉我的Service Worker 请求参数:

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)
        {
            //...
        })
    );
});

为什么这不起作用

但这不是持久的,即在我关闭浏览器并再次打开它之后,我的serviceWorkerData 丢失了。 localStorage 在 Service Worker 中不可用,那么我如何在这里获得持久性?

【问题讨论】:

    标签: javascript local-storage indexeddb web-worker service-worker


    【解决方案1】:

    您可以使用 IndexedDB。

    https://github.com/mozilla/localForage 如果你想要一个更简单的 IndexedDB 接口。

    您可以使用 importScripts 在 service worker 中导入 localForage 库,例如:https://github.com/marco-c/mercurius/blob/master/static/sw-push.js

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-23
      • 2020-12-19
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多