2013-06-15 8 views
10

Supponiamo di voler rilevare il supporto per le notifiche (http://notifications.spec.whatwg.org/) in una libreria JavaScript.Qual è l'approccio più affidabile per rilevare il supporto delle funzionalità del browser?

Posso usare window.Notification !== undefined. Ma cosa succede se gli utenti della libreria (o un'altra libreria) hanno anche una sorta di oggetto globale Notification definito per scopi completamente diversi?

D'altra parte, cosa succede se l'altra libreria è un polyfill? Quindi il loro oggetto Notification è accettabile. Devo testare tutti i metodi oltre a testare l'oggetto globale?

Aggiornamento:
Ho notato una cosa interessante in una notifications polyfill:

ret[toString] = function() { 
    return 'function Notification() { [native code] }'; 
}; 

Quanto è affidabile sta contando su una cosa del genere per rilevare se si tratta di un oggetto nativo/polyfill?

+5

È necessario specificare chiaramente i requisiti ambientali per la libreria. Quindi non devi davvero preoccuparti di questo. Lascia che l'utente si assicuri che altre librerie collaborino. –

+1

Sono d'accordo. Se l'utente è abbastanza pazzo da usare le librerie che inquinano lo spazio dei nomi globale, non c'è molto che tu possa fare, giusto? –

+0

Questa è una buona risposta, ma solo se non ci sono altre opzioni. Mi piace salvare le persone da potenziali errori ogni volta che posso. –

risposta

1

Quindi essenzialmente ci sono due scelte.

Il primo è provare e fare affidamento sul valore 'function Notification() { [native code] }'toString, poiché è stato impostato almeno da alcuni polyfill. Sfortunatamente, questo non è affidabile, in quanto non ho trovato alcuna informazione sul fatto che sia un approccio comune all'interno degli autori di polyfill e se sia un valore di ritorno affidabile nei browser.

Un'altra opzione, come suggerito nei commenti, è ignorare potenziali conflitti e andare avanti solo testando per esistenza. Questo è quello per cui sono andato per ora.

0

Si può sempre prendere l'approccio jQuery e ridefinire tutto ciò che fa riferimento le window.Notifications pre-esistenti con qualcosa di simile:

window._Notification = window.Notification; 

Paul irlandese ha un po 'in this video che fa un buon lavoro di spiegare come funziona

In questo modo, è possibile continuare l'implementazione di qualsiasi altra funzione che stanno utilizzando, pur includendo anche la propria.

Spero che questo aiuti. :)

+0

Penso che tu abbia frainteso la domanda. Vuole sapere se può _use_ "Notifica", non come sovrascriverlo senza rompere nulla. –

Problemi correlati