在 Chrome 中单击浏览器通知时如何自动聚焦浏览器选项卡?

Posted

技术标签:

【中文标题】在 Chrome 中单击浏览器通知时如何自动聚焦浏览器选项卡?【英文标题】:How to auto focus browser tab when clicking on browser notification in Chrome? 【发布时间】:2015-11-04 02:46:20 【问题描述】:

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

// 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

火狐版本:40.0

【问题讨论】:

您找到解决方案了吗?我遇到了类似的问题(与通知无关,但我仍然会丢失并且无法重新获得键盘焦点到选项卡)。 @QuinxyvonBsiex 不,我没有。如果你找到它,请在这里回答... 我在这里发布了一个更新的答案***.com/a/40964355/714733@Marko 而不是 window.focus();使用父焦点(); .它在 Chrome 和 Firefox 中对我有用。 【参考方案1】:

这是一个 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();
      
    )
  );
);

【讨论】:

以上是关于在 Chrome 中单击浏览器通知时如何自动聚焦浏览器选项卡?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 Chrome 窗口是不是聚焦?

如何使用 Selenium Webdriver 处理浏览器级别的通知

如何通过点击推送通知启动PWA(渐进式Web应用程序)?

为啥在单击事件后聚焦时不应用浏览器默认聚焦样式?

当我单击一个对象时,Google Chrome 控制台会自动滚动

Chrome 桌面通知点击关注内容