无法加载数据URL为chrome浏览器的GCM推送通知'notificationclick'事件

Not able to load data URL for GCM push notification for chrome in 'notificationclick' event

本文关键字:通知 事件 GCM notificationclick 数据 加载 URL 浏览器 chrome      更新时间:2023-09-26

在为Chrome开发GCM推送通知时,我已经为service worker接收到GCM的推送事件设置了推送通知。

我正在启动一个服务调用。该服务返回一个数据对象其中有一个URL我希望在用户点击通知

时打开该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();}));
});

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

我做错了什么?

不能指望你的service worker存在于push事件和notificationclick事件之间。在处理了push事件之后,浏览器很可能会关闭worker,然后为notificationclick事件重新启动它,这意味着您的urlOpen变量已被重新初始化为null

我认为你可以将url以某种方式存储在通知对象本身,这将是最好的-看起来这里有一个例子。否则你就得保存到indexedDB之类的文件