我正在尝试为我正在处理的项目设置浏览器通知。我到目前为止的代码是:
// 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
答案 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();
}
})
);
});