2011-08-31 12 views
9

Voglio verificare se la proprietà CSS pointer-events (see documentation) è supportata dal browser dell'utente.Verificare in JS se è supportata una proprietà CSS?

Attualmente, ad esempio, non è supportato da Opera e credo che alcune versioni di IE.

Mi piacerebbe eseguire un controllo in JavaScript e visualizzare i bit appropriati di HTML a seconda che sia supportato o meno.

C'è un modo migliore per farlo rispetto al controllo della stringa user-agent?

+1

In genere si controlla quale sia lo user agent e da ciò si conosce cosa è o non è supportato. – Endophage

+2

@Endophage: in genere, non lo fai. [Rilevamento funzionalità] (http://api.jquery.com/jQuery.support/) è l'approccio superiore. Anche se nel caso di 'pointer-events', non esiste un test affidabile. – thirtydot

+0

Il rilevamento di feature @thirtydot va bene se ci sono solo un paio di cose interessanti che vuoi fare. Se hai molte caratteristiche da rilevare, dì tutto in Modernizer, è inefficiente. – Endophage

risposta

3

Penso

if ("pointer-events" in document.body.style) 

o

if ("pointerEvents" in document.body.style) 

dovrebbe essere adeguato nel caso di contenuti SVG.

+4

Questo [vale per vero] (http://jsfiddle.net/M27PT/) ancora [non funziona come previsto] (http://jsfiddle.net/7TvVY/10/) in IE9. – Artyom

+0

@art probabilmente perché [IE9 non ha esteso questa proprietà SVG] (http://msdn.microsoft.com/en-us/library/ff972269 (v = vs.85) .aspx) al contenuto HTML. – Knu

+0

Sembra che sia il contrario in Firefox: la tua dichiarazione restituisce false, eppure il CSS funziona come previsto. – Artyom

2

Le seguenti restituisce true sia in IE 9 e Firefox:

if ('pointerEvents' in document.documentElement.style) 
+0

E in Opera, che sicuramente non lo supporta come proprietà HTML, quindi temo che non funzioni. – Richard

+0

questa non è una risposta, ma è vero – taseenb

6

per i contenuti non-SVG questo script dovrebbe funzionare:
https://github.com/ausi/Feature-detection-technique-for-pointer-events

È inoltre possibile utilizzare senza Modernizr:

var pointerEventsSupported = (function(){ 
    var element = document.createElement('x'), 
     documentElement = document.documentElement, 
     getComputedStyle = window.getComputedStyle, 
     supports; 
    if(!('pointerEvents' in element.style)){ 
     return false; 
    } 
    element.style.pointerEvents = 'auto'; 
    element.style.pointerEvents = 'x'; 
    documentElement.appendChild(element); 
    supports = getComputedStyle && 
     getComputedStyle(element, '').pointerEvents === 'auto'; 
    documentElement.removeChild(element); 
    return !!supports; 
})(); 
if(pointerEventsSupported){ 
    // do something 
} 
+0

Meraviglioso! Grazie per aver postato questo! –

+0

@SerjSagan Ora è incluso anche nei rilevamenti non core di Modernizr. Puoi andare su http://modernizr.com/download/ e attivare css-pointerevents nei rilevamenti non-core se vuoi usare Modernizr. – ausi

Problemi correlati