0

这是什么错误?当发送网络推送浏览器时,谷歌浏览器“有时”会给出第二条带有文本的消息:“此站点已在后台更新。” 在此处输入图像描述

我想让它只有一条消息 在此处输入图像描述

我在源 Chrome 中找到的此文本此站点已在后台更新。github.com/scheib/chromium/blob/master/chrome/app/resources/generated_resources_en-GB.хтб

如何摆脱此消息。

4

2 回答 2

0

这经常发生的原因是返回的承诺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

于 2016-05-31T09:06:41.757 回答
0

它的工作方式是一个功能而不是一个错误。这是一个解释您在 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

可能发生的情况是一些发送到客户端的推送消息没有显示通知。

希望有帮助

于 2015-12-09T17:18:46.147 回答