Как получить фокус на вкладке Chrome, которая создала уведомление на рабочем столе?
Я хотел бы реализовать те же функции, что и Gmail. Когда приходит новое сообщение или появляется новый чат, появляется всплывающее окно с уведомлением, и если вы нажмете его, вкладка с Gmail будет сосредоточена.
У меня есть этот код:
var n = window.webkitNotifications.createNotification('ico.gif', 'Title', 'Text');
n.onclick = function(x) { this.cancel(); };
n.show();
Когда я нажимаю уведомление, он просто исчезает. Теперь мне нужно добавить код в функцию onclick, чтобы открыть и сфокусировать страницу, которая создала это уведомление. Я знаю, что это возможно, потому что GMail делает это очень хорошо. Но мне не удалось найти источники Gmail (они минимализованы и запутаны).
Кто-нибудь знает, как это сделать?
Ответы
Ответ 1
Вы можете просто поместить window.focus() в Google Chrome. Он будет сфокусирован на этом окне при нажатии.
var n = window.webkitNotifications.createNotification('ico.gif', 'Title', 'Text');
n.onclick = function(x) { window.focus(); this.cancel(); };
n.show();
Я открыл инспектора в Gmail, добавил вышеприведенный код, перешел на другую вкладку и запустил ее. Сообщение появилось и однажды щелкнуло, оно вернуло меня в Gmail.
Надеюсь, что это помогло!
Ответ 2
Используя Уведомления.
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();
};
});
Ответ 3
window.focus()
не всегда работает в последних версиях браузера Webkit (Chrome, Safari и т.д.). Но 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();
};
}
}
Ответ 4
Не очень хорошая практика использовать свойство onclick
, используйте метод addEventListener
для ванильного javascript или on
для jQuery.
var notify = new Notification('Test notification');
Vanilla:
notify.addEventListener('click', function(e) {
window.focus();
e.target.close();
}, false);
JQuery
$(notify).on('click', function(e) {
window.focus();
e.target.close();
});
Ответ 5
Он должен быть this.close()
, а не this.cancel()
, например:
var n = window.webkitNotifications.createNotification('ico.gif','Title', 'Text');
n.onclick = function(x) { window.focus(); this.cancel(); };
n.show();