无法加载用于Chrome的GCM推送通知的数据网址' notificationclick'事件

时间:2015-09-18 10:29:05

标签: javascript service-worker chrome-gcm web-push push-api

在处理Chrome的GCM推送通知时,我已经为服务工作者收到GCM的推送事件设置了推送通知。

我正在发起服务电话。该服务返回一个数据对象,我在该数据对象中有一个我想在用户点击通知时打开的URL

这是我到目前为止的代码。

Var urlOpen = null;
self.addEventListener('push', function(event) {
    event.waitUntil(
        fetch(serviceLink).then(function(response) {
            if (response.status !== 200) {
                console.log('Looks like there was a problem. Status Code: ' +
                response.status);
                throw new Error();
            }
            return response.json().then(function(data) {
                console.log(data);
                var title = data.title;
                var body = data.desc;
                var icon = data.image;
                var tag = 'notification tag';
                urlOpen = data.clickUrl;


              return  self.registration.showNotification(title, {
                    body: body,
                    icon: icon,
                    tag: tag
                })
            });
        })
    );
});


self.addEventListener('notificationclick', function(event) {
        event.waitUntil(
        clients.openWindow(urlOpen).then(function (){
         event.notification.close();}));

});

这在一些设备通知上工作正常但有时。但是,当点击通知时,它会在浏览器网址栏中打开null

我做错了什么?

1 个答案:

答案 0 :(得分:4)

您无法指望push事件与notificationclick事件之间存在的服务工作者。在处理push事件后,浏览器可能会关闭工作人员,然后针对notificationclick事件重新启动它,这意味着您的urlOpen变量已重新初始化为{{1 }}

我认为你可能会以某种方式将url存储在通知对象本身上,这将是最好的 - 看起来有an example of that here。否则你必须将它保存到indexedDB或类似的东西。