2016-07-11 10 views
-2

Ich möchte feststellen, ob der Browser eine CSS-Eigenschaft mit Javascript unterstützt (insbesondere, ob "Filter" unterstützt wird)? Wie kann ich das tun?Wie kann ich erkennen, ob ein Browser eine CSS-Eigenschaft mit Javascript unterstützt?

Ich habe versucht, die folgende Funktion

supportsCssStyle: function (prop) { 
     var div = document.createElement('div'), 
      vendors = 'Khtml Ms O Moz Webkit'.split(' '), 
      len = vendors.length; 

     if (prop in div.style) return true; 

     prop = prop.replace(/^[a-z]/, function (val) { 
      return val.toUpperCase(); 
     }); 

     while (len--) { 
      if (vendors[len] + prop in div.style) { 
       // browser supports box-shadow. Do what you need. 
       // Or use a bang (!) to test if the browser doesn't. 
       return true; 
      } 
     } 
     return false; 
    }, 

aber es funktioniert nicht

+2

klingt wie ein Duplikat von http://stackoverflow.com/questions/16189905/cani-i-detect -ich-css-filter-effects-werden unterstützt – nuway

+1

Ich möchte nicht modernisieren – Jasmine

+0

Was funktioniert nicht? Dein Code funktioniert für mich. – Oriol

Antwort

3

Wie von Oriol in den Kommentaren, meine ursprüngliche Antwort falsch war (noch irgendwie endete mit 3 upvotes) hingewiesen. Hier ist ein zuverlässigerer Weg.

function supportsProperty(prop) { 
 
    var el = document.createElement("div"); 
 
    el.style.cssText = prop + ":initial"; 
 
    return el.style[prop] === "initial"; 
 
} 
 

 
function supportsValue(prop, value) { 
 
    var el = document.createElement("div"); 
 
    el.style.cssText = prop + ":" + value; 
 
    return el.style[prop] === value; 
 
} 
 

 
console.log("filter", supportsProperty("filter")); // true for me 
 
console.log("-ms-flex", supportsProperty("-ms-flex")); // false for me 
 
console.log("position:sticky", supportsValue("position", "sticky")); // true for me

+0

Wie unterscheidet sich die Verwendung von 'in' von einem berechneten Stil von der Verwendung in' document.createElement ('div'). Style'? – Oriol

+0

@Oriol Mit '.style' erhalten Sie nur die Eigenschaften, die explizit für das Element festgelegt sind. Ich nehme an, Sie könnten versuchen, die Eigenschaft auf ein neues Element zu setzen und zu überprüfen, ob es angewendet wurde, aber ich bin mir nicht sicher, wie alle Browser damit umgehen. Einige könnten die ungültige Eigenschaft behalten, während andere (zumindest Firefox) sie löschen. – Scott

+0

Aber auch Eigenschaften, die nicht gesetzt sind, sind als Getter/Setter definiert. OPs "filter" in document.createElement ('div') .style funktioniert genau wie Ihr '" filter "in window.getComputedStyle (document.createElement (" div "))' – Oriol

0

Ich weiß, die Frage bei einer JS-Lösung richtet, aber da es sich um ein CSS Problem ist, das gelöst ist wird, könnte es von Interesse sein, dass die @supports Feature Abfrage ziemlich gut jetzt unterstützt wird. ..except ... (Überraschung!) Internet Explorer (Edge unterstützt es, obwohl - vollständige Liste hier: http://caniuse.com/#feat=css-featurequeries)