这是什么错误?当发送网络推送浏览器时,谷歌浏览器“有时”会给出第二条带有文本的消息:“此站点已在后台更新。”
我在源 Chrome 中找到的此文本此站点已在后台更新。github.com/scheib/chromium/blob/master/chrome/app/resources/generated_resources_en-GB.хтб
如何摆脱此消息。
这经常发生的原因是返回的承诺event.waitUntil()
没有通过显示通知来解决。
可能显示默认推送通知的示例:
function handlePush() {
// BAD: The fetch's promise isn't returned
fetch('/some/api')
.then(function(response) {
return response.json();
})
.then(function(data) {
// BAD: the showNotification promise isn't returned
showNotification(data.title, {body: data.body});
});
}
self.addEventListener(function(event) {
event.waitUntil(handlePush());
});
相反,您可以将其写为:
function handlePush() {
// GOOD
return fetch('/some/api')
.then(function(response) {
return response.json();
})
.then(function(data) {
// GOOD
return showNotification(data.title, {body: data.body});
});
}
self.addEventListener(function(event) {
const myNotificationPromise = handlePush();
event.waitUntil(myNotificationPromise);
});
这很重要的原因是浏览器等待传递给 event.waitUntil 的承诺来解决/完成,所以他们知道服务工作者需要保持活跃和运行。
当 promise 为推送事件解析时,chrome 将检查通知是否已显示,并且它是否属于 Chrome 是否显示此通知的竞争条件/特定情况。最好的办法是确保你有一个正确的承诺链。
我在这篇文章的承诺上添加了一些额外的注释(参见:'Side Quest: Promises' https://gauntface.com/blog/2016/05/01/push-debugging-analytics)
它的工作方式是一个功能而不是一个错误。这是一个解释您在 Chrome 中的情况的问题:https ://code.google.com/p/chromium/issues/detail?id=437277
Chromium 代码中更具体的代码注释: https ://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/push_messaging/push_messaging_notification_manager.cc&rcl=1449664275&l=287
可能发生的情况是一些发送到客户端的推送消息没有显示通知。
希望有帮助