Як зосередитись на вкладці Chrome, яка створила сповіщення на робочому столі?


82

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

У мене є такий код:

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

Коли я натискаю сповіщення, воно просто зникає. Тепер мені потрібно додати код до функції onclick, щоб відкрити та зосередити сторінку, яка створила це сповіщення. Я знаю, що це можливо, тому що GMail робить це дуже добре. Але мені не вдалося заглянути в джерела Gmail (вони мінімізовані та затуманені).

Хтось знає, як це зробити?


this.cancel застаріло та видалено в поточному канарському каналі.
Брандіто,

Відповіді:


107

Ви можете просто розмістити 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.


3
Оце Так ! Так просто ?! :-) Чудова відповідь, дякую. Я досить довго гуглив, але не міг знайти. Зараз це працює чудово, ще раз спасибі.
Фродик

1
Нема проблем! Веселіться злом :-)
Мохамед Мансур

Doesnt робота тепер jsfiddle.net/l2aelba/RhHgR :(, я можу зламати як це роблять попередження () , щоб зосередити це вікно назад
l2aelba

2
хтось знає, як це зараз працює? Код більше не фокусується на TAB .. це означає, що в останньому версії Chrome натискання сповіщення не фокусує вкладку, з якої воно надходило. Це все ще працює в Gmail?
hko

6
Наразі це застаріло , див. Відповідь Освальдо нижче щодо крос-браузерного рішення.
nickf

48

Використання сповіщень .

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();
  };
});

window.focus();робить фокус! Це слід позначити як правильну відповідь.
Максим Лафарі,

3
window.focus()не працює на chrome 60, рішення jazzcat з parent.focus()роботами
pikax

Це працює, але як тільки я використовую опцію "Створити ярлик" і перетворюю її на окремий додаток, переспрямування не працює і відкривається нова вкладка.
Waza_Be

26

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
Нормально мати посилання 'this' на інший контекст, тому замість виклику this.closeкраще викликати evt.target.closeподію 'onclick': notification.onclick = function (evt) { evt.target.close(); }
Alejandro Silva

parent.focus (); працює для мене! працює над хромом 68.0.3440.106
Йохан Моралес

2

Використовувати onclickвластивість, використовувати addEventListenerjavascript onfor або vanilla або метод для jQuery не дуже добре .

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();
});

0

Це має бути this.close()швидше, ніж this.cancel()так:

var n = window.webkitNotifications.createNotification('ico.gif','Title', 'Text');
n.onclick = function(x) { window.focus(); this.cancel(); };
n.show();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.