441 Stimmen

Chrome-Desktop-Benachrichtigungsbeispiel

Wie verwendet man Chrome-Desktopbenachrichtigungen? Ich möchte das in meinem eigenen Code verwenden.

Aktualisierung: Hier ist ein Blog-Beitrag, der Webkit-Benachrichtigungen mit einem Beispiel erklärt.

2 Stimmen

Ich habe unten eine Antwort hinterlassen, die im November 2012 aktualisiert wurde, nachdem HTML-Benachrichtigungen veraltet waren. Es enthält ein tatsächliches Beispiel wie das, wonach Sie gesucht haben.

1 Stimmen

Aktualisierung: Ab 2015 können Websites auch echte Push-Benachrichtigungen senden, die auch dann zugestellt werden, wenn der Benutzer nicht auf der Website surft. Schauen Sie sich diese Antwort an.

761voto

Dan Dascalescu Punkte 125523

In modernen Browsern gibt es zwei Arten von Benachrichtigungen:

  • Desktop-Benachrichtigungen - einfach auszulösen, funktionieren solange die Seite geöffnet ist und können nach einigen Sekunden automatisch verschwinden
  • Service-Worker-Benachrichtigungen - etwas komplizierter, können jedoch im Hintergrund arbeiten (auch nachdem die Seite geschlossen wurde), sind persistent und unterstützen Aktionsbuttons

Der API-Aufruf verwendet dieselben Parameter (außer für Aktionen - nicht verfügbar bei Desktop-Benachrichtigungen), die auf MDN und für Service-Worker auf der Website von Google's Web Fundamentals gut dokumentiert sind.


Im Folgenden finden Sie ein funktionierendes Beispiel für Desktop-Benachrichtigungen für Chrome, Firefox, Opera und Safari. Beachten Sie, dass aus Sicherheitsgründen ab Chrome 62 die Berechtigung für die Benachrichtigungs-API möglicherweise nicht mehr von einem Cross-Origin-iFrame angefordert werden kann, sodass wir dies nicht mithilfe von StackOverflow-Codeausschnitten demonstrieren können. Sie müssen dieses Beispiel in einer HTML-Datei auf Ihrer Website/an Ihrer Anwendung speichern und sicherstellen, dass Sie localhost:// oder HTTPS verwenden.

// Berechtigung beim Laden der Seite anfordern
document.addEventListener('DOMContentLoaded', function() {
 if (!Notification) {
  alert('Desktop-Benachrichtigungen sind in Ihrem Browser nicht verfügbar. Versuchen Sie es mit Chromium.');
  return;
 }

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

function notifyMe() {
 if (Notification.permission !== 'granted')
  Notification.requestPermission();
 else {
  var notification = new Notification('Benachrichtigungstitel', {
   icon: 'http://cdn.sstatic.net/stackexchange/img/logos/so/so-icon.png',
   body: 'Hey! Sie wurden benachrichtigt!',
  });
  notification.onclick = function() {
   window.open('http://stackoverflow.com/a/13328397/1269037');
  };
 }
}

 Benachrichtige mich!

Wir verwenden die W3C Benachrichtigungen API. Verwechseln Sie dies nicht mit der Chrome Erweiterungen Benachrichtigungen API, die unterschiedlich ist. Benachrichtigungen von Chrome-Erweiterungen funktionieren natürlich nur in Chrome-Erweiterungen und erfordern keine besondere Genehmigung des Benutzers.

W3C-Benachrichtigungen funktionieren in vielen Browsern (siehe Support auf caniuse) und erfordern die Zustimmung des Benutzers. Als bewährte Praxis sollten Sie diese Berechtigung nicht gleich zu Beginn anfordern. Erklären Sie dem Benutzer zuerst, warum er Benachrichtigungen wünschen würde und sehen Sie sich andere Push-Benachrichtigungsmuster an.

Beachten Sie, dass Chrome das Benachrichtigungssymbol unter Linux aufgrund dieses Fehlers nicht beachtet.

Abschließende Worte

Die Unterstützung von Benachrichtigungen war in den letzten Jahren einem kontinuierlichen Wandel unterworfen, wobei verschiedene APIs veraltet sind. Wenn Sie neugierig sind, überprüfen Sie die vorherigen Bearbeitungen dieses Beitrags, um zu sehen, was in Chrome früher funktioniert hat, und erfahren Sie die Geschichte der reichhaltigen HTML-Benachrichtigungen.

Jetzt entspricht der neueste Standard unter https://notifications.spec.whatwg.org/.

Warum es zwei unterschiedliche Aufrufe für denselben Effekt gibt, je nachdem, ob Sie sich in einem Service Worker befinden oder nicht, erfahren Sie unter diesem Ticket, das ich während meiner Arbeit bei Google eingereicht habe.

Siehe auch notify.js für eine Hilfsbibliothek.

4 Stimmen

@mghaoui - beliebt != wahr (notwendigerweise). Ich habe diese als die richtige Antwort markiert.

2 Stimmen

Window.webkitNotifications.checkPermission() wird in nicht-Chrome-Browsern eine Ausnahme auslösen

0 Stimmen

Kannst du es mit CSS animieren..?

94voto

GmonC Punkte 10923

Überprüfen Sie das Design und die API-Spezifikation (es handelt sich noch um einen Entwurf) oder überprüfen Sie die Quelle (Seite nicht mehr verfügbar) für ein einfaches Beispiel: Es handelt sich hauptsächlich um einen Aufruf von window.webkitNotifications.createNotification.

Wenn Sie ein robustes Beispiel wünschen (Sie versuchen, Ihre eigene Google Chrome-Erweiterung zu erstellen und möchten wissen, wie Sie mit Berechtigungen, lokalem Speicher und dergleichen umgehen), werfen Sie einen Blick auf die Gmail Notifier Erweiterung: Laden Sie die crx-Datei herunter anstatt sie zu installieren, entpacken Sie sie und lesen Sie den Quellcode.

0 Stimmen

Gibt es nicht etwas, das für alle Browser funktioniert?

0 Stimmen

@Royi, Es gibt eine Firefox-Erweiterung, sowie eine natürliche Firefox-Implementierung, die früher oder später kommt. Im Fall von Internet Explorer könnte eine mögliche Lösung sein, Benutzer Ihrer Website zu bitten, Chrome Frame herunterzuladen, da dies eine praktikable Lösung wäre, um Benachrichtigungen zum Laufen zu bringen. Es gibt eine andere Microsoft-Lösung.

10 Stimmen

Diese Antwort ist inzwischen komplett veraltet, 4 Jahre später. @RoyiNamir: Es gibt die Benachrichtigungs-API. Überprüfen Sie meine Antwort.

35voto

mpen Punkte 253762

Siehe auch ServiceWorkerRegistration.showNotification

Es scheint, dass window.webkitNotifications bereits veraltet und entfernt wurde. Es gibt jedoch eine neue API, die anscheinend auch in der neuesten Version von Firefox funktioniert.

function notifyMe() {
  // Überprüfen, ob der Browser Benachrichtigungen unterstützt
  if (!("Notification" in window)) {
    alert("Dieser Browser unterstützt keine Desktop-Benachrichtigungen");
  }

  // Überprüfen, ob der Benutzer mit Benachrichtigungen einverstanden ist
  else if (Notification.permission === "granted") {
    // Wenn ja, Benachrichtigung erstellen
    var notification = new Notification("Hallo!");
  }

  // Andernfalls Benutzer um Erlaubnis bitten
  else if (Notification.permission !== 'denied') {
    Notification.requestPermission(function (permission) {

      // Benutzerantwort speichern
      if(!('permission' in Notification)) {
        Notification.permission = permission;
      }

      // Bei Erlaubnis Benachrichtigung erstellen
      if (permission === "granted") {
        var notification = new Notification("Hallo!");
      }
    });
  } else {
    alert(`Erlaubnis ist ${Notification.permission}`);
  }
}

codepen

0 Stimmen

@Miron Bitte schau dir den Hyperlink im ersten Absatz an. Ich habe die Quelle verlinkt und dann den Code gemäß der SO-Etikette in meine Antwort kopiert. Wenn MDN kein Wiki wäre, hätte ich vielleicht genauer darauf hingewiesen, wer der Autor war, aber ich tue nicht so, als ob.

0 Stimmen

Ich sehe nicht, wo er gesagt hat, dass er es geschrieben hat?

0 Stimmen

Codepen funktioniert nicht

14voto

Rudie Punkte 49458

Ich mag: http://www.html5rocks.com/de/tutorials/notifications/quick/#toc-examples, aber es verwendet alte Variablen, deshalb funktioniert das Demo nicht mehr. webkitNotifications ist jetzt Notification.

0 Stimmen

Das Twitter-Beispiel funktioniert nicht mehr.

0 Stimmen

Sie sollten html5rocks.com/de/profiles Bescheid sagen. Einer von ihnen muss für Twitter funktionieren =)

0 Stimmen

Heh. Hakim war der beste Typ, um zu benachrichtigen, da ich zufälligerweise zu seinem Präsentations-Framework beigetragen habe.

5voto

gravmatt Punkte 408

Ich habe diesen einfachen Benachrichtigungs-Wrapper erstellt. Es funktioniert in Chrome, Safari und Firefox.

Wahrscheinlich auch in Opera, IE und Edge, aber ich habe es noch nicht getestet.

Holen Sie sich einfach die notify.js-Datei von hier https://github.com/gravmatt/js-notify und fügen Sie sie auf Ihrer Seite ein.

Holen Sie es sich über Bower

$ bower install js-notify

So funktioniert es:

notify('title', {
    body: 'Benachrichtigungstext',
    icon: 'pfad/zum/bild.png',
    onclick: function(e) {}, // e -> Benachrichtigungsobjekt
    onclose: function(e) {},
    ondenied: function(e) {}
  });

Sie müssen den Titel festlegen, aber das JSON-Objekt als zweites Argument ist optional.

0 Stimmen

@gravmatt, bist du auf ein Problem mit Firefox gestoßen, bei dem die Benachrichtigung nicht angezeigt wird, wenn mehr als ein Browserfenster geöffnet ist?

0 Stimmen

@eranotzap Es sollte mit mehreren Tabs funktionieren. Ich betreibe ein Projekt, bei dem das kein Problem ist, aber ich bin mir nicht sicher bei mehreren Fenstern.

0 Stimmen

Ich habe dasselbe Problem mit mehreren Tabs.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X