Chrome masaüstü bildirim örneği [kapalı]


409

Chrome masaüstü bildirimleri nasıl kullanılır ? Bunu kendi kodumda kullanmak istiyorum.

Güncelleme : İşte webkit bildirimlerini bir örnekle açıklayan bir blog yazısı .


2
HTML bildirimleri kullanımdan kaldırıldıktan sonra Kasım 2012 itibarıyla güncellenmiş bir yanıtı bıraktım . Aradığın gibi gerçek bir örneği var.
Dan Dascalescu


1
Güncelleme : 2015'ten itibaren web siteleri, kullanıcı web sitesinde gezinmediğinde bile gönderilen gerçek push bildirimleri gönderebilir. Bu yanıta bir
collimarco

3
Kapalı olarak işaretlemek için tüm bu seçmenlerin IE / Safari severler olması gerekir. Tarayıcı bildirimine ve özellikle krom için özeldir. konu bu kadar kapalı ise, neden bu kadar çok insan hoşlanıyor ve ilk etapta yıldızlı olarak işaretleniyor?
Prash

2
Neden konu dışı?
SmartManoj

Yanıtlar:


716

Modern tarayıcılarda iki tür bildirim vardır:

  • Masaüstü bildirimleri - tetiklemesi kolaydır, sayfa açık olduğu sürece çalışır ve birkaç saniye sonra otomatik olarak kaybolabilir
  • Servis Çalışanı bildirimleri - biraz daha karmaşık, ancak arka planda çalışabilirler (sayfa kapatıldıktan sonra bile), kalıcıdır ve eylem düğmelerini destekler

API çağrısı, MDN'de ve hizmet çalışanları için Google'ın Web Fundamentals sitesinde iyi belgelenmiş eylemleri (masaüstü bildirimlerinde bulunmayan işlemler hariç) alır .


Aşağıda Chrome, Firefox, Opera ve Safari için masaüstü bildirimlerinin çalışan bir örneği bulunmaktadır . Güvenlik nedeniyle, Chrome 62'den başlayarak Bildirim API'sı için izin artık bir çapraz kökenli iframe'den istenmeyebileceğinden , StackOverflow'un kod snippet'lerini kullanarak bunu demo yapamayız. Bu örneği sitenizdeki / uygulamanızdaki bir HTML dosyasına kaydetmeniz ve localhost://HTTPS kullandığınızdan emin olmanız gerekir .

// request permission on page load
document.addEventListener('DOMContentLoaded', function() {
 if (!Notification) {
  alert('Desktop notifications not available in your browser. Try Chromium.');
  return;
 }

 if (Notification.permission !== 'granted')
  Notification.requestPermission();
});


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: 'Hey there! You\'ve been notified!',
  });
  notification.onclick = function() {
   window.open('http://stackoverflow.com/a/13328397/1269037');
  };
 }
}
 <button onclick="notifyMe()">Notify me!</button>

Biz kullanıyoruz W3C Bildirimler API. Bunu Chrome uzantıları bildirim API'sı ile karıştırmayın , farklı olan . Chrome uzantı bildirimleri yalnızca Chrome uzantılarında çalışır ve kullanıcıdan herhangi bir özel izin gerektirmez.

W3C bildirimleri birçok tarayıcıda çalışır ( caniuse desteğine bakın ) ve kullanıcı izni gerektirir. En iyi uygulama olarak, bu izni hemen yarasadan istemeyin. Öncelikle kullanıcıya neden bildirim isteyeceklerini açıklayın ve diğer anlık bildirim kalıplarını görün .

Bu hata nedeniyle Chrome'un Linux'ta bildirim simgesini onurlandırmadığını unutmayın .

Son sözler

Bildirim desteği sürekli değişmektedir ve son yıllarda çeşitli API'ler kullanımdan kaldırılmıştır. Merak ediyorsanız, Chrome'da neyin işe yaradığını görmek ve zengin HTML bildirimlerinin hikayesini öğrenmek için bu cevabın önceki düzenlemelerini kontrol edin.

Şimdi en son standart https://notifications.spec.whatwg.org/ adresinde .

Bir hizmet çalışanında bulunup bulunmamanıza bağlı olarak, aynı etkiyi neden iki farklı aramayla ilgili olarak, Google'da çalışırken yaptığım bu bileti görün .

Yardımcı kütüphane için notify.js'ye de bakınız .


4
@mghaoui - popular! = true (zorunlu olarak). Bunu doğru cevap olarak işaretledim.
Sridhar Ratnakumar

2
window.webkitNotifications.checkPermission (), Chrome dışı tarayıcılarda bir istisna atar
JT Taylor

2
Kapat bir yöntem değildir. Sanırım bildirim.cancel ()> decadecity.net/blog/2012/10/12/webkit-notification-api >> Ayrıca kendi kendine kapanıyor gibi görünüyor.
KingOfHococrites

3
Desteğiniz için teşekkür ederiz, bunu Pusher ile kullanmak bildirim sistemi oluşturmama yardımcı oldu.
Awijeet

3
çalışmayan Chrome Sürümü 47.0.2526.80 dev-m Windows 8'de Mozilla Yangın tilki üzerinde çalışırken
Sarz

87

Basit bir örnek için tasarım ve API spesifikasyonunu (hala taslak) kontrol edin veya kaynağından (sayfa artık mevcut değil) bakın:window.webkitNotifications.createNotification .

Daha sağlam bir örnek istiyorsanız (kendi Google Chrome uzantınızı oluşturmaya çalışıyorsunuz ve izinler, yerel depolama alanı vb . İle nasıl başa çıkacağınızı bilmek istiyorsanız), Gmail Notifier Uzantısına bakın : yüklemek yerine crx dosyasını indirin açın, kaynak kodunu okuyun.


Tüm tarayıcılar için çalışan bir şey yok mu?
Royi Namir

@Royi, Bir Firefox uzantısı ve er ya da geç gelen yerel bir Firefox uygulaması var . Internet Explorer söz konusu olduğunda, sitenizin kullanıcılarından Chrome Frame'i indirmelerini istemek olası bir çözüm olacaktır , çünkü bu, bildirimlerin çalışmasını sağlamak için uygun bir çözüm olacaktır. Orada bazı diğer Microsoft Çözüm .
Bryan Field

7
Bu cevap, 4 yıl sonra artık tamamen eski. @RoyiNamir: Notifications API'sı var. Cevabımı kontrol et .
Dan Dascalescu

1
Örnek bağlantı öldü.
Vinny

33

Anlaşılmaktadır window.webkitNotificationszaten kaldırılmış ve kaldırıldı. Ancak, yeni bir API var ve Firefox'un en son sürümünde de çalışıyor gibi görünüyor.

function notifyMe() {
  // Let's check if the browser supports notifications
  if (!("Notification" in window)) {
    alert("This browser does not support desktop notification");
  }

  // Let's check if the user is okay to get some notification
  else if (Notification.permission === "granted") {
    // If it's okay let's create a notification
    var notification = new Notification("Hi there!");
  }

  // Otherwise, we need to ask the user for permission
  // Note, Chrome does not implement the permission static property
  // So we have to check for NOT 'denied' instead of 'default'
  else if (Notification.permission !== 'denied') {
    Notification.requestPermission(function (permission) {

      // Whatever the user answers, we make sure we store the information
      if(!('permission' in Notification)) {
        Notification.permission = permission;
      }

      // If the user is okay, let's create a notification
      if (permission === "granted") {
        var notification = new Notification("Hi there!");
      }
    });
  } else {
    alert(`Permission is ${Notification.permission}`);
  }
}

codepen


@Miron Lütfen ilk paragraftaki köprüye bir göz atın. Kaynağı bağladım ve kodu SO görgü kurallarına göre cevabıma kopyaladım. MDN bir wiki olmasaydı, yazarın kim olduğu konusunda daha açık olabilirdim, ama hiçbir şey yapmıyorum.
17'de mpen

Nerede yazdığını söylediğini anlamıyorum?
Brandito

codepen çalışmıyor
Stepan Yakovenko

1
@StepanYakovenko Kod bağlantısı bağlantısını tekrar deneyin. elseSonunda size sorunun ne olduğunu söylemek için fazladan bir şey ekledim . Muhtemelen benim gibi bildirimleri devre dışı
bıraktınız

14

Seviyorum: http://www.html5rocks.com/en/tutorials/notifications/quick/#toc-examples ancak eski değişkenleri kullanıyor, bu yüzden demo artık çalışmıyor. webkitNotificationsşimdi Notification.


Oradaki Twitter örneği artık çalışmıyor.
Dan Dascalescu

Sen söylemelidir html5rocks.com/en/profiles ) = Twitter için çalışmalıdır em biri
Rudie

Heh. Hakim en iyi adamdı bildirmek ben ne yana katkıda bulunmuştur onun sunum çerçevesine.
Dan Dascalescu

4

Bu basit Bildirim sarmalayıcısını yaptım. Chrome, Safari ve Firefox üzerinde çalışır.

Muhtemelen Opera, IE ve Edge'de de ama henüz test etmedim.

Notify.js dosyasını buradan alın https://github.com/gravmatt/js-notify ve sayfanıza koyun.

Bower'dan edinin

$ bower install js-notify

Bu nasıl çalışır:

notify('title', {
    body: 'Notification Text',
    icon: 'path/to/image.png',
    onclick: function(e) {}, // e -> Notification object
    onclose: function(e) {},
    ondenied: function(e) {}
  });

Başlığı ayarlamanız gerekir, ancak ikinci bağımsız değişken olarak json nesnesi isteğe bağlıdır.


@gravmatt Firefox ile ilgili bir sorunla karşılaştınız; burada birden fazla tarayıcı penceresi açıksa bildirim görünmez mi?
eran otzap

@eranotzap çoklu sekmelerle çalışmalıdır. Bunun sorun olmadığı bir proje yürütüyorum. ama birden fazla pencereden emin değilim.
gravmatt

Birden fazla sekme ile aynı sorunu var
eran otzap

Firefox'ta birden çok sekmeden çalışıyor mu?
eran otzap

1
@eranotzap Şimdi Windows ve Mac üzerinde test ettim. Bildirimi ekranın herhangi bir köşesinde göremiyorum ama bildirimlerin sesini duyuyorum ve mac'ta bildirimi kenar çubuğunda (birden çok sekme açıkken) alıyorum. Firefox yeni internet gezgini.
gravmatt



3
<!DOCTYPE html>

<html>

<head>
<title>Hello!</title>
<script>
function notify(){

if (Notification.permission !== "granted") {
Notification.requestPermission();
}
 else{
var notification = new Notification('hello', {
  body: "Hey there!",
});
notification.onclick = function () {
  window.open("http://google.com");
};
}
}
</script>
</head>

<body>
<button onclick="notify()">Notify</button>
</body>


1
Lütfen yalnızca kod içeren yanıtlar göndermekten kaçının. Biraz yorum ve / veya açıklama ekleyin, böylece insanlar gelecekte bu yayını okuduklarında anlayacaklar.
Adriaan

Bu özel kod snippet'i için oldukça basit görünüyor. Diğer kullanıcılar da yoruma bir soru gönderebilir, değil mi?
frostshoxx

1
Yukarıdaki kod ile JSfiddle çalışmaz, "Bildirim API'sı için izin artık bir çapraz kökenli iframe'den talep edilemez." Ancak, Geliştirici konsolunu açın ve girdiğinizde Notification.requestPermission();, o zaman var notification = new Notification('hello', { body: "Hey there!", });bildirim gösterileri kadar.
Kai Noack

Üzgünüm, ama bu cevap benimkine tam olarak ne katıyor?
Dan Dascalescu
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.