我一直在这里阅读 Chrome 实现 Web Push API 的文档,我注意到 API 说“你承诺在收到推送时显示通知”,并且在限制下它说“你必须在您收到一条推送消息”。
在我的本地主机上实现示例后,我使用 cURL 成功发送了推送通知。我很好奇,所以我注释掉了实际调用 showNotification 函数的行,并放入了一个 console.log,发现实际上我可以发送、接收和完全忽略推送通知。我什至尝试使用 if 语句来控制是否根据我从主页控制的全局布尔值来显示它们,并且有效。所以我想知道是否有人知道他们说你需要显示通知是什么意思,而无声推送通知不可用?
这不仅仅是为了它,我合法地可能需要控制是否在我的网络应用程序中显示这些通知,所以如果这实际上是可能的,那就太好了。下面的代码,以防你好奇。
self.addEventListener('push', function(event) {
var title = 'New Message';
var body = 'You have received a new message!';
var icon = '/img/favicon.png';
var tag = 'well-notification';
console.log("DID RECEIVE NOTIFICATION")
if(settingsShowNotification) {
event.waitUntil(
self.registration.showNotification(title, {
body: body,
icon: icon,
tag: tag
})
);
}
});
编辑:在 Chrome 47 上,如果相关的话。
更新:经过进一步实验,我发现了一个明显的问题,即一旦用户离开然后重新导航到同一页面,我就无法更新原始全局变量。但是,我能够使用 serviceworker 本身的变量来规避这个问题,并使用此处描述的 API 向 service worker 发送消息来切换 showNotifications 布尔值。