2015-02-12 20 views
6

è possibile richiedere all'utente di consentire o negare le notifiche sul desktop dal browser eseguendo:Rimuovere le autorizzazioni di notifica HTML5

Notification.requestPermission(callback); 

Ma è possibile rimuovere che il permesso di codice? Vogliamo che i nostri utenti abbiano la possibilità di attivare le notifiche. Questo può essere ottenuto da JavaScript o dobbiamo salvare questa opzione altrove?

risposta

6

No, non è possibile per lo script abbandonare a livello di programmazione l'autorizzazione a mostrare le notifiche. Lo API specification non ha alcuna funzione relativa alle autorizzazioni oltre a requestPermission. (Ovviamente, un browser può avere un menu opzioni che consente all'utente di revocare l'autorizzazione per un dominio, ma questa è un'opzione a livello di browser, non un'opzione a livello di sito. Ad esempio, in Chrome, puoi visualizzare questo menu opzioni di facendo clic sull'icona a sinistra della barra degli indirizzi.)

Se non si desidera visualizzare le notifiche, semplicemente non chiamare new Notification.

è possibile avvolgere tutte le chiamate a new Notification condizioni all'interno:

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

Oppure si può riscrivere il costruttore Notification per contenere un contiditional e chiamare l'originale Notification a seconda dei casi:

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

Se si utilizzano costruttori o funzioni con prefisso del fornitore (ad esempio, webkitNotifications.createNotification), quindi sarà necessario riscrivere anche ognuno di questi per essere condizionato sulla variabile delle opzioni.

+0

OK, ho pensato che fosse il caso. Poi andremo per l'opzione di salvarlo altrove. Grazie per la risposta. –

6

Guardando la documentazione su Notification a MDN e WHATWG, non sembra essere un modo per richiedere la revoca delle autorizzazioni. Tuttavia, è possibile emulare la propria versione delle autorizzazioni utilizzando localStorage per supportare tale funzionalità mancante. Supponiamo che tu abbia una casella di controllo che abilita o disabilita le notifiche.

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

È possibile memorizzare le autorizzazioni ricordate sotto la chiave notification-permissions nella memoria locale, e aggiornare lo stato permesso di simile a:

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; 
      } 
     }); 
    } 
} 

Si potrebbe recuperare le autorizzazioni come:

function getNotificationPermissions() { 
    if (Notification.permissions === 'granted') { 
     return localStorage.getItem('notification-permissions'); 
    } else { 
     return Notification.permissions; 
    } 
} 

Quando si desidera visualizzare una notifica, controllare le autorizzazioni:

if (getNotificationPermissions() === 'granted') { 
    new Notification(/*...*/); 
} 
+0

Eccellente! Sembra una buona soluzione. –

+0

È fantastico! Grazie. – Cameron

Problemi correlati