2011-06-08 55 views
4

如何使用JavaScript在浏览器中检查某个CSS功能而不检测其供应商,userAgent或appName?如何使用JavaScript在浏览器中检查某个CSS功能?

+1

你有哪一个想法? – Tomgrohl 2011-06-08 08:55:23

+1

@Tomgrohl,先谢谢了,没有特别的浏览器。我想测试CSS功能,而不是要求浏览器名称,就像测试JavaScript功能的正确方式一样。 – Babiker 2011-06-08 08:58:12

+0

嘿,增加了一个可能有用的答案。 – Tomgrohl 2011-06-08 08:59:18

回答

3

我已经创造了一个jQuery的时候cssHook使用这样的事情:一个CSS属性值

var div = document.createElement("div"), 
    divStyle = div.style; 

    $.support.boxSizing = 
    divStyle.MozBoxSizing === ''? 'MozBoxSizing' : 
    (divStyle.WebkitBoxSizing === ''? 'WebkitBoxSizing' : 
    (divStyle.MsBoxSizing === ''? 'MsBoxSizing' : 
    (divStyle.boxSizing === ''? 'boxSizing' : false))); 

    div = divStyle = null; //release memory 

测试:

测试的CSS属性:

var div = document.createElement("div"), 
    css = "background-image:gradient(linear,left top,right bottom, from(#9f9), to(white));background-image:-webkit-gradient(linear,left top,right bottom,from(#9f9),to(white));background-image:-moz-gradient(linear,left top,right bottom,from(#9f9),to(white));background-image:-o-gradient(linear,left top,right bottom,from(#9f9),to(white));background-image:-ms-gradient(linear,left top,right bottom,from(#9f9),to(white));background-image:-khtml-gradient(linear,left top,right bottom,from(#9f9),to(white));background-image:linear-gradient(left top,#9f9, white);background-image:-webkit-linear-gradient(left top,#9f9, white);background-image:-moz-linear-gradient(left top,#9f9, white);background-image:-o-linear-gradient(left top,#9f9, white);background-image:-ms-linear-gradient(left top,#9f9, white);background-image:-khtml-linear-gradient(left top,#9f9, white);";  

    div.style.cssText = css; 

$.support.linearGradient = 
    div.style.backgroundImage.indexOf("-moz-linear-gradient") > -1 ? '-moz-linear-gradient' : 
    (div.style.backgroundImage.indexOf("-webkit-gradient") > -1 ? '-webkit-gradient' : 
    (div.style.backgroundImage.indexOf("gradient") > -1 ? 'gradient' : false)); 

    div= null; //release memory 
+0

神奇的例子,你甚至不需要jQuery来使用它。 – 2013-04-12 08:09:20

2

这个问题的问题是,每种属性的技术都不同。

一般的想法是使用JavaScript尝试使用该属性,然后测试该属性的某些定义的行为。

看到源代码Modernizr的,特征检测库:

http://www.modernizr.com/ - http://www.modernizr.com/downloads/modernizr-2.0.3.js

例如:

// http://css-tricks.com/rgba-browser-support/ 
tests['rgba'] = function() { 
    // Set an rgba() color and check the returned value 

    setCss('background-color:rgba(150,255,150,.5)'); 

    return contains(mStyle.backgroundColor, 'rgba'); 
}; 

在不支持rgba,返回值将浏览器不包含rgba

另外,正如@DanielB建议的,请看jQuery.support以获得更多灵感。这里的源:

https://github.com/jquery/jquery/blob/master/src/support.js

1

你可以使用一个像库这modernizr可以告诉你哪些功能可用于当前访客。

+0

在这里采取了一些裂缝:http://www.fractured-state.com/2011/07/browser-color-override-test-for-modernizr/ – 2013-03-22 12:43:38

相关问题