如何把重点放在创build桌面通知的Chrome标签上?
我想实现与Gmail现在相同的function。 当新的电子邮件到达或新的聊天来了,通知popup窗口出现,如果你点击它,带有Gmail的选项卡变得焦点。
我有这个代码:
var n = window.webkitNotifications.createNotification('ico.gif', 'Title', 'Text'); n.onclick = function(x) { this.cancel(); }; n.show();
当我点击通知时,它就会消失。 现在我需要添加一些代码到onclick函数来调出并关注创build此通知的页面。 我知道这是可能的,因为GMail做得非常好。 但是我没有成功查看Gmail源代码(它们被简化和混淆)。
任何人都知道如何做到这一点?
您可以在Google Chrome中放置window.focus()。 单击时它将重点放在该窗口上。
var n = window.webkitNotifications.createNotification('ico.gif', 'Title', 'Text'); n.onclick = function(x) { window.focus(); this.cancel(); }; n.show();
我在Gmail中打开了检查员,添加了上面的代码,移到不同的选项卡上,然后运行它。 通知出现,一旦点击,它将我带回Gmail。
希望有所帮助!
使用通知 。
if (typeof Notification !== 'undefined') { alert('Please us a modern version of Chrome, Firefox, Opera or Safari.'); return; } Notification.requestPermission(function (permission) { if (permission !== 'granted') return; var notification = new Notification('Here is the title', { icon: 'http://path.to/my/icon.png', body: 'Some body text', }); notification.onclick = function () { window.focus(); }; });
在最近的Webkit浏览器版本(Chrome,Safari等)中, window.focus()
并不总是工作。 但是parent.focus()
。
这是一个完整的jsfiddle: https ://jsfiddle.net/wv0w7uj7/3/
码:
function notifyMe() { if (Notification.permission !== "granted") Notification.requestPermission(); else { var notification = new Notification('Notification title', { icon: 'http://cdn.sstatic.net/stackexchange/img/logos/so/so-icon.png', body: "You've been notified!", }); notification.onclick = function () { parent.focus(); window.focus(); //just in case, older browsers this.close(); }; } }
使用onclick
属性并不是很好的做法,对于香草javascript或jQuery的方法使用addEventListener
。
var notify = new Notification('Test notification');
香草:
notify.addEventListener('click', function(e) { window.focus(); e.target.close(); }, false);
jQuery的:
$(notify).on('click', function(e) { window.focus(); e.target.close(); });
它应该是this.close()
而不是this.cancel()
,如下所示:
var n = window.webkitNotifications.createNotification('ico.gif','Title', 'Text'); n.onclick = function(x) { window.focus(); this.cancel(); }; n.show();