Masaüstü bildirimi oluşturan bir Chrome sekmesine nasıl odaklanılır?


85

Bugünlerde Gmail’in sahip olduğu aynı işlevi uygulamak istiyorum. Yeni e-posta geldiğinde veya yeni sohbet geldiğinde, bildirim açılır penceresi görünür ve tıklarsanız Gmail'in bulunduğu sekme odaklanır.

Bu koda sahibim:

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

Bildirime tıkladığımda sadece kayboluyor. Şimdi bu bildirimi oluşturan sayfayı açmak ve odaklanmak için onclick işlevine biraz kod eklemem gerekiyor. Bunun mümkün olduğunu biliyorum çünkü GMail bunu çok iyi yapıyor. Ancak Gmail kaynaklarına bakmayı başaramadım (minimalize edilmiş ve karartılmış)

Bunun nasıl yapılacağını bilen var mı?


this.cancel kullanımdan kaldırıldı ve mevcut Canary kanalında kaldırıldı.
Brandito

Yanıtlar:


109

Google Chrome'a ​​window.focus () yerleştirebilirsiniz. Tıklandığında o pencereye odaklanacaktır.

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

Denetçiyi Gmail'de açtım, yukarıdaki kodu ekledim, farklı bir sekmeye geçtim ve çalıştırdım. Bildirim göründü ve bir kez tıklandığında beni Gmail'e geri getirdi.


3
Vaov ! Bu kadar basit ?! :-) Harika cevap, teşekkürler. Bunun için epey bir süre Google'da araştırdım, ancak bulamadım. Şimdi mükemmel çalışıyor, tekrar teşekkürler.
Frodik

1
Sorun değil! Hacking iyi eğlenceler :-)
Mohamed Mansour

Şimdi çalışmıyor jsfiddle.net/l2aelba/RhHgR :(, Bu pencereyi geriye odaklamak için like do alert () 'yi
hackleyebilirim

2
şimdi nasıl çalıştığını bilen var mı? Kod artık SEKME'ye odaklanmıyor .. bu, en son Chrome'da bildirime tıklamanın geldiği sekmeye odaklanmadığı anlamına gelir. Gmail'de hala çalışıyor mu?
hko

6
Bu artık kullanımdan kaldırılmıştır , çapraz tarayıcı çözümü için aşağıdaki Oswaldo'nun yanıtına bakın.
nickf

49

Bildirimleri Kullanma .

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();hile yapar! Doğru cevap olarak işaretlenmelidir.
Maxime Lafarie

3
window.focus()Krom 60 değil iş, ile jazzcat çözüm parent.focus()çalışmaları
pikax

Bu işe yarıyor, ancak "Kısayol oluştur" seçeneğini kullanıp onu bağımsız bir uygulamaya dönüştürdüğümde, yönlendirme çalışmıyor ve yeni bir sekme açıyor.
Waza_Be

26

window.focus()her zaman son Webkit tarayıcı sürümlerinde (Chrome, Safari vb.) çalışmaz. Ama parent.focus()öyle.

İşte tam bir jsfiddle: https://jsfiddle.net/wv0w7uj7/3/

Kod:

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
Başka bir içeriğe atıfta bulunan 'bu' olması normaldir, bu nedenle aramak yerine , 'onclick' etkinliğini this.closearamak daha iyidir evt.target.close: notification.onclick = function (evt) { evt.target.close(); }
Alejandro Silva

parent.focus (); benim için çalışıyor! krom 68.0.3440.106 üzerinde çalışıyor
Johan Morales

2

onclickÖzelliği kullanmak, addEventListenervanilya için javascript'i veya onjQuery için yöntemi kullanmak gerçekten iyi bir uygulama değildir .

var notify = new Notification('Test notification');

Vanilya:

notify.addEventListener('click', function(e) {
    window.focus();
    e.target.close();
}, false);

jQuery:

$(notify).on('click', function(e) {
    window.focus();
    e.target.close();
});

0

Bunun this.close()yerine this.cancel(), şöyle olmalı :

var n = window.webkitNotifications.createNotification('ico.gif','Title', 'Text');
n.onclick = function(x) { window.focus(); this.cancel(); };
n.show();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.