2015-02-12 12 views
6

Sie einen Benutzer auffordern können Desktop-Benachrichtigungen vom Browser zu erlauben oder zu verweigern, indem Sie:entfernen HTML5 Benachrichtigung Berechtigungen

Notification.requestPermission(callback); 

Aber ist es möglich, dass die Genehmigung von Code zu entfernen? Wir möchten, dass unsere Benutzer Benachrichtigungen aktivieren können. Kann dies durch JavaScript erreicht werden oder müssen wir diese Option woanders speichern?

Antwort

6

Nein, es gibt keine Möglichkeit, dass Ihr Skript programmatisch die Berechtigung zum Anzeigen von Benachrichtigungen aufgibt. Die API specification verfügt neben requestPermission über keine berechtigungsbezogenen Funktionen. (Natürlich kann ein Browser über ein Optionsmenü verfügen, mit dem der Benutzer die Berechtigung für eine Domain widerrufen kann, dies ist jedoch eine Option auf Browserebene und nicht auf Websiteebene. In Chrome können Sie dieses Optionsmenü beispielsweise anzeigen klicken auf das Symbol in der linken Seite der Adressleiste.)

Wenn Sie keine Benachrichtigungen zeigen wollen, einfach nicht nennen new Notification.

Sie können entweder alle Anrufe zu new Notification innerhalb Bedingungen wickeln:

if(notifications_allowed) { 
    new Notification(...); 
} 

Oder Sie können den Notification Konstruktor umschreiben einen contiditional und rufen Sie das Original Notification gegebenenfalls enthalten:

(function() { 
    var oldNofitication = Notification; 
    Notification = function() { 
     if(notifications_allowed) { 
      oldNotification.apply(this, arguments); 
     } 
    } 
})(); 

Wenn Wenn Sie Hersteller-Präfix-Konstruktoren oder -Funktionen verwenden (z. B. webkitNotifications.createNotification), müssen Sie diese ebenfalls neu schreiben, um von Ihrer Optionsvariablen abhängig zu sein.

+0

In Ordnung, ich dachte, das sei der Fall. Dann werden wir die Option wählen, es anderswo zu speichern. Danke für Ihre Antwort. –

6

Wenn Sie die Dokumentation unter Notification unter MDN und WHATWG betrachten, scheint es keine Möglichkeit zu geben, den Widerruf von Berechtigungen anzufordern. Sie könnten jedoch Ihre eigene Version der Berechtigungen emulieren, indem Sie localStorage verwenden, um diese fehlende Funktionalität zu unterstützen. Angenommen, Sie haben ein Kontrollkästchen, mit dem Benachrichtigungen aktiviert werden.

<input type="checkbox" onChange="toggleNotificationPermissions(this);" /> 

Sie Ihre Erinnerung Berechtigungen unter dem notification-permissions Schlüssel im lokalen Speicher, und aktualisieren Sie die Erlaubnis Zustand ähnlich speichern:

function toggleNotificationPermissions(input) { 
    if (Notification.permissions === 'granted') { 
     localStorage.setItem('notification-permissions', input.checked ? 'granted' : 'denied'); 
    } else if (Notification.permissions === 'denied') { 
     localStorage.setItem('notification-permissions', 'denied'); 
     input.checked = false; 
    } else if (Notification.permissions === 'default') { 
     Notification.requestPermission(function(choice) { 
      if (choice === 'granted') { 
       localStorage.setItem('notification-permissions', input.checked ? 'granted' : 'denied'); 
      } else { 
       localStorage.setItem('notification-permissions', 'denied'); 
       input.checked = false; 
      } 
     }); 
    } 
} 

Sie könnten die Berechtigungen abrufen wie:

function getNotificationPermissions() { 
    if (Notification.permissions === 'granted') { 
     return localStorage.getItem('notification-permissions'); 
    } else { 
     return Notification.permissions; 
    } 
} 
Wenn Sie eine Benachrichtigung anzeigen möchten, überprüfen Sie Ihre Berechtigungen:
if (getNotificationPermissions() === 'granted') { 
    new Notification(/*...*/); 
} 
+0

Ausgezeichnet! Sieht nach einer netten Lösung aus. –

+0

Das ist großartig! Vielen Dank. – Cameron