javascript - contoh notifikasi desktop Chrome


Bagaimana cara menggunakan notifikasi desktop Chrome? Saya ingin menggunakan itu dalam kode saya sendiri.

Pembaruan: Berikut adalah posting blog yang menjelaskan notifikasi webkit dengan sebuah contoh.

Jawaban #1

Di browser modern, ada dua jenis notifikasi:

  • Notifikasi desktop - mudah dipicu, bekerja selama halaman terbuka, dan dapat hilang secara otomatis setelah beberapa detik
  • Notifikasi Service Worker - sedikit lebih rumit, tetapi mereka dapat bekerja di latar belakang (bahkan setelah halaman ditutup), bersifat persisten, dan mendukung tombol aksi

Panggilan API mengambil parameter yang sama (kecuali untuk actions - tidak tersedia pada notifikasi desktop), yang terdokumentasi dengan baik di MDN dan untuk service worker, di situs Web Fundamentals Google.

Berikut adalah contoh yang berfungsi dari notifikasi desktop untuk Chrome, Firefox, Opera, dan Safari. Perlu dicatat bahwa untuk alasan keamanan, mulai dari Chrome 62, izin untuk Notification API mungkin tidak lagi dapat diminta dari iframe lintas-origin, sehingga kita tidak dapat mendemonstrasikannya menggunakan potongan kode StackOverflow. Anda perlu menyimpan contoh ini di file HTML pada situs/aplikasi Anda, dan pastikan menggunakan localhost:// atau HTTPS.

// 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>

Kami menggunakan API Notifikasi W3C. Jangan bingung ini dengan API notifikasi ekstensi Chrome, yang berbeda. Notifikasi ekstensi Chrome jelas hanya bekerja di ekstensi Chrome, dan tidak memerlukan izin khusus dari pengguna.

Notifikasi W3C bekerja di banyak browser (lihat dukungan di caniuse), dan memerlukan izin pengguna. Sebagai praktik terbaik, jangan langsung meminta izin ini. Jelaskan terlebih dahulu kepada pengguna mengapa mereka ingin menerima notifikasi dan lihat pola notifikasi push lainnya.

Perlu dicatat bahwa Chrome tidak menghormati ikon notifikasi di Linux, karena bug ini.

Kata-kata terakhir

Dukungan notifikasi telah mengalami perubahan terus-menerus, dengan berbagai API yang dihentikan dalam beberapa tahun terakhir. Jika Anda penasaran, periksa suntingan sebelumnya dari jawaban ini untuk melihat apa yang dulu bekerja di Chrome, dan untuk mempelajari sejarah notifikasi HTML yang kaya.

Sekarang standar terbaru ada di https://notifications.spec.whatwg.org/.

Mengenai mengapa ada dua panggilan berbeda untuk efek yang sama, tergantung apakah Anda berada di service worker atau tidak - lihat tiket ini yang saya buat saat saya bekerja di Google.

Lihat juga notify.js untuk pustaka penolong.

Jawaban #2

Periksa desain dan spesifikasi API (ini masih draft) atau periksa sumber dari (halaman tidak lagi tersedia) untuk contoh sederhana: Ini terutama merupakan panggilan ke window.webkitNotifications.createNotification.

Jika Anda menginginkan contoh yang lebih kuat (Anda sedang mencoba membuat ekstensi Google Chrome sendiri, dan ingin tahu bagaimana menangani izin, penyimpanan lokal, dan sejenisnya), lihat Ekstensi Gmail Notifier: unduh file crx alih-alih menginstalnya, unzip file tersebut dan baca kode sumbernya.

Jawaban #3

Lihat juga ServiceWorkerRegistration.showNotification

Tampaknya window.webkitNotifications sudah tidak digunakan lagi dan telah dihapus. Namun, ada API baru, dan tampaknya bekerja di versi terbaru Firefox juga.

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

Jawaban #4

Saya suka: http://www.html5rocks.com/en/tutorials/notifications/quick/#toc-examples tetapi itu menggunakan variabel lama, jadi demo-nya tidak berfungsi lagi. webkitNotifications sekarang menjadi Notification.

Artikel terkait