如何在Chrome中点击浏览器通知时自动关注浏览器标签?

时间:2015-08-11 18:19:23

标签: javascript browser notifications web-notifications

我正在尝试为我正在处理的项目设置浏览器通知。我到目前为止的代码是:

// Notification permissions logic handled before...
var notification = new Notification('Title', { body: 'Message' });
notification.onclick = function (e) {
    window.focus();
    // this.cancel();
};
setTimeout(notification.close.bind(notification), 5000);

除了一件事之外,通知可以正常使用此代码。在Chrome中,点击通知不会将焦点设置在浏览器窗口中。在Firefox中,这种行为是开箱即用的,并且在没有上面定义的点击处理程序的情况下工作正常。我为Chrome寻找了解决方案,并找到了这些:

How to get focus to the tab when a desktop notification is clicked in Firefox?

How to get focus to a Chrome tab which created desktop notification?

然而,建议接受的解决方案对我不起作用 - 事件被触发但未设置焦点。

有没有人有任何建议如何使这种行为正常?

Chrome版本:版本44.0.2403.130 m

Firefox版本:40.0

1 个答案:

答案 0 :(得分:2)

这是一个hacky解决方案,但如果你注册了服务工作者,你可以做这样的事情。

在客户页面中:

yourServiceWorkerRegistration.showNotification('Title', {
  body: 'Message',
});

在服务工作者中:

self.addEventListener('notificationclick', event => {
  event.notification.close();

  event.waitUntil(
    clients.matchAll({
      type: "window",
    })
    .then(clientList => {
      if (clientList.length) {
        clientList[0].focus();
      }
    })
  );
});