13

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

// 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 寻找解决方案并找到了这些:

在 Firefox 中单击桌面通知时如何将焦点移到选项卡上?

如何将焦点放在创建桌面通知的 Chrome 选项卡上?

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

有没有人有任何建议如何使它正常运行?

Chrome 版本:版本 44.0.2403.130 m

火狐版本:40.0

4

1 回答 1

3

这是一个 hacky 解决方案,但如果你注册了一个 service worker,你可以做这样的事情。

在客户端页面中:

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();
      }
    })
  );
});
于 2016-02-13T00:12:42.447 回答