Esempio di notifica desktop Chrome [chiuso]


409

Come si usano le notifiche desktop di Chrome ? Vorrei che usassi quello nel mio codice.

Aggiornamento : ecco un post sul blog che spiega le notifiche di webkit con un esempio.


2
Ho lasciato una risposta sotto aggiornata a novembre 2012, dopo che le notifiche HTML sono diventate obsolete. Ha un esempio reale come quello che stavi cercando.
Dan Dascalescu,


1
Aggiornamento : a partire dal 2015 i siti Web possono anche inviare notifiche push reali, che vengono consegnate anche quando l'utente non naviga nel sito Web.
Dai

3
Tutti questi elettori per averlo contrassegnato come chiuso devono essere amanti di IE / Safari. È specifico per la notifica del browser e in particolare per Chrome. se è così fuori tema allora perché ci sono così tante persone che lo apprezzano e lo segnano come protagonista in primo luogo?
Prash

2
Perché fuori tema?
SmartManoj,

Risposte:


717

Nei browser moderni, ci sono due tipi di notifiche:

  • Notifiche desktop : semplici da attivare, funzionano fino a quando la pagina è aperta e possono scomparire automaticamente dopo alcuni secondi
  • Notifiche di Service Serviceer : un po 'più complicate, ma possono funzionare in background (anche dopo la chiusura della pagina), sono persistenti e supportano i pulsanti di azione

La chiamata API utilizza gli stessi parametri (ad eccezione delle azioni - non disponibili nelle notifiche desktop), che sono ben documentati su MDN e per gli operatori del servizio, sul sito Web di Google Fundamentals .


Di seguito è riportato un esempio funzionante di notifiche desktop per Chrome, Firefox, Opera e Safari. Tieni presente che, per motivi di sicurezza, a partire da Chrome 62, l' autorizzazione per l'API di notifica potrebbe non essere più richiesta da un iframe di origine incrociata , quindi non possiamo dimostrarlo utilizzando gli snippet di codice di StackOverflow. Dovrai salvare questo esempio in un file HTML sul tuo sito / applicazione e assicurarti di utilizzare localhost://o 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>

Stiamo utilizzando l' API di notifica W3C . Non confonderlo con l' API di notifica delle estensioni di Chrome , che è diversa. Le notifiche delle estensioni di Chrome ovviamente funzionano solo con le estensioni di Chrome e non richiedono alcuna autorizzazione speciale da parte dell'utente.

Le notifiche W3C funzionano in molti browser (vedi supporto su caniuse ) e richiedono l'autorizzazione dell'utente. Come best practice, non chiedere questa autorizzazione fin dall'inizio. Spiegare innanzitutto all'utente perché vorrebbero le notifiche e vedere altri schemi di notifiche push .

Nota che Chrome non rispetta l'icona di notifica su Linux, a causa di questo errore .

Parole finali

Il supporto delle notifiche è stato in continuo mutamento, con varie API che sono state deprecate negli ultimi anni. Se sei curioso, controlla le modifiche precedenti di questa risposta per vedere cosa funzionava in Chrome e per imparare la storia delle notifiche HTML avanzate.

Ora l'ultimo standard è disponibile su https://notifications.spec.whatwg.org/ .

Per quanto riguarda il motivo per cui ci sono due chiamate diverse per lo stesso effetto, a seconda che tu sia o meno un lavoratore dell'assistenza: vedi questo biglietto che ho archiviato mentre lavoravo su Google .

Vedi anche notify.js per una libreria di helper.


4
@mghaoui - popular! = true (necessariamente). ho contrassegnato questo come la risposta corretta.
Sridhar Ratnakumar,

2
window.webkitNotifications.checkPermission () genererà un'eccezione nei browser non Chrome
JT Taylor,

2
La chiusura non è un metodo. Penso che tu desideri notification.cancel ()> decadecity.net/blog/2012/10/12/webkit-notification-api >> Inoltre sembra chiudersi da solo.
KingOf Hypocrites,

3
Grazie per il supporto, l'utilizzo di questo con Pusher mi ha aiutato a creare un sistema di notifica.
Awijeet,

3
non funziona in Chrome versione 47.0.2526.80 dev-m mentre lavorava su Mozilla Fire fox su Windows 8
Sarz,

87

Controlla il design e le specifiche API (è ancora una bozza) o controlla l'origine da (pagina non più disponibile) per un semplice esempio: è principalmente una chiamata a window.webkitNotifications.createNotification.

Se vuoi un esempio più solido (stai cercando di creare la tua estensione di Google Chrome e desideri sapere come gestire le autorizzazioni, l'archiviazione locale e così via), dai un'occhiata all'estensione di Gmail Notifier : scarica il file crx invece di installare esso, decomprimilo e leggi il suo codice sorgente.


Non c'è qualcosa che funzioni per tutti i browser?
Royi Namir,

@Royi, c'è un'estensione di Firefox , nonché un'implementazione nativa di Firefox che arriverà prima o poi . Nel caso di Internet Explorer, una possibile soluzione sarebbe quella di chiedere agli utenti del tuo sito di scaricare Chrome Frame , poiché questa sarebbe una soluzione praticabile per far funzionare le notifiche. C'è qualche altra soluzione Microsoft .
Bryan Field,

7
Questa risposta è completamente obsoleta ormai, 4 anni dopo. @RoyiNamir: c'è l'API di notifica. Controllare la mia risposta .
Dan Dascalescu,

1
Il link di esempio è morto.
Vinny,

33

Sembra che window.webkitNotificationssia già stato deprecato e rimosso. Tuttavia, c'è una nuova API e sembra funzionare anche nell'ultima versione di Firefox.

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 Si prega di dare un'occhiata al collegamento ipertestuale nel primo paragrafo. Ho collegato la fonte e poi ho copiato il codice nella mia risposta secondo l'etichetta SO. Se MDN non fosse un wiki avrei potuto essere più esplicito su chi fosse l'autore, ma non sto fingendo nulla.
aprono il

Non vedo dove abbia detto di averlo scritto?
Brandito,

codepen non funziona
Stepan Yakovenko

1
@StepanYakovenko Prova di nuovo il link codepen. Ho aggiunto un extra elsealla fine per dirti qual è il problema. Probabilmente hai disabilitato le notifiche a livello globale come me: \
mpen

14

Mi piace: http://www.html5rocks.com/en/tutorials/notifications/quick/#toc-examples ma utilizza vecchie variabili, quindi la demo non funziona più. webkitNotificationsè adesso Notification.


L'esempio di Twitter non funziona più.
Dan Dascalescu,

Dovresti dirlo a html5rocks.com/en/profiles Uno di questi deve funzionare per Twitter =)
Rudie,

Eh. Hakim è stato il ragazzo migliore da avvisare , dato che mi è capitato di aver contribuito al suo schema di presentazione.
Dan Dascalescu,

4

Ho creato questo semplice wrapper di notifica. Funziona su Chrome, Safari e Firefox.

Probabilmente anche su Opera, IE e Edge, ma non l'ho ancora testato.

Basta ottenere il file notify.js da qui https://github.com/gravmatt/js-notify e inserirlo nella tua pagina.

Scaricalo su Bower

$ bower install js-notify

Ecco come funziona:

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

Devi impostare il titolo ma l'oggetto json come secondo argomento è facoltativo.


@gravmatt hai riscontrato un problema con Firefox in cui se è aperta più di una finestra del browser, la notifica non viene visualizzata?
Eran Otzap,

@eranotzap dovrebbe funzionare con più schede. Corro un progetto in cui questo non è un problema. ma non sono sicuro con più finestre.
Gravmatt,

Ho lo stesso problema con più schede
Eran Otzap,

Funziona da più schede in Firefox?
Eran Otzap,

1
@eranotzap L'ho provato ora su Windows e Mac. Non riesco a vedere la notifica in nessun angolo dello schermo ma sento il suono delle notifiche e su Mac ottengo la notifica nella barra laterale (con più schede aperte). Firefox è il nuovo Internet Explorer.
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
Si prega di astenersi dal pubblicare risposte di solo codice. Aggiungi un po 'di commenti e / o spiegazioni, in modo che quando le persone leggeranno questo post in futuro lo capiranno.
Adriaan,

Per questo particolare frammento di codice, tuttavia, sembra piuttosto semplice. Altri utenti potrebbero anche pubblicare una domanda di follow-up sul commento, giusto?
frostshoxx,

1
JSfiddle con il codice sopra riportato non funziona, "L'autorizzazione per l'API di notifica potrebbe non essere più richiesta a un iframe di origine incrociata". Tuttavia, quando si apre la console per gli sviluppatori e si accede Notification.requestPermission();, viene visualizzata var notification = new Notification('hello', { body: "Hey there!", });la notifica.
Kai Noack,

Mi dispiace, ma cosa aggiunge esattamente questa mia risposta?
Dan Dascalescu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.