Как получить фокус на вкладке Chrome, на которой создано уведомление на рабочем столе? - PullRequest
74 голосов
/ 05 февраля 2011

Я хотел бы реализовать ту же функциональность, что и Gmail в настоящее время.Когда приходит новое электронное письмо или приходит новый чат, появляется всплывающее окно с уведомлением, и если вы щелкаете по нему, вкладка с Gmail фокусируется.

У меня есть этот код:

var n = window.webkitNotifications.createNotification('ico.gif', 'Title', 'Text');
n.onclick = function(x) { this.cancel(); };
n.show();

Когда я нажимаю уведомление, оно просто исчезает.Теперь мне нужно добавить код в функцию onclick, чтобы вызвать и сфокусировать страницу, которая создала это уведомление.Я знаю, что это возможно, потому что GMail делает это очень хорошо.Но мне не удалось просмотреть источники Gmail (они минимизированы и запутаны).

Кто-нибудь знает, как это сделать?

Ответы [ 5 ]

95 голосов
/ 05 февраля 2011

Вы можете просто поместить window.focus () в Google Chrome.При щелчке оно будет фокусироваться на этом окне.

var n = window.webkitNotifications.createNotification('ico.gif', 'Title', 'Text');
n.onclick = function(x) { window.focus(); this.close(); };
n.show();

Я открыл инспектор в Gmail, добавил приведенный выше код, переместился на другую вкладку и запустил ее.Появилось уведомление, и когда оно щелкнуло, оно вернуло меня в Gmail.

46 голосов
/ 08 февраля 2015

Использование Уведомления .

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();
  };
});
21 голосов
/ 05 декабря 2016

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();
    };
  }
}
1 голос
/ 27 января 2017

Практически не рекомендуется использовать свойство 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();
});
0 голосов
/ 11 августа 2016

Это должно быть this.close(), а не this.cancel(), например:

var n = window.webkitNotifications.createNotification('ico.gif','Title', 'Text');
n.onclick = function(x) { window.focus(); this.cancel(); };
n.show();
...