如何检查浏览器是否完全支持javascript方法(例如,getComputedStyle伪元素)

时间:2013-01-28 03:32:31

标签: javascript jquery internet-explorer

我的问题是getComputedStyle方法特有的。 ie9支持getComputedStyle,但不支持getComputedStyle的伪元素。通常我会使用这样的支票。

if ( getComputedStyle ) { ... 
} else { ... stuff for ie9 }

但是,对于ie9,它返回true,因为它支持getComputedStyle(尽管它不支持伪元素)。我如何检查浏览器是否支持使用伪元素的方法?

2 个答案:

答案 0 :(得分:1)

EDIT / ADDENDUM:刚刚意识到您正在尝试深入了解IE9与其他浏览器的getComputedStyle()的具体情况。如果这个脚本不是您正在寻找的,那么请注意,因为它似乎只是测试getComputedStyle()的存在而不是特定的选择选项。

This site似乎提供了跨浏览器检测getComputedStyle的解决方案。具体来说,这个代码靠近页面底部:

<script type="text/javascript">
// First paramter is a nodes id, second the CSS property you want
function getCSSProperty(sNodeId, sProperty)
{
    var oNode = document.getElementById(sNodeId);

    if(document.defaultView)
    {
        return document.defaultView.getComputedStyle(oNode, null).getPropertyValue(sProperty);
    }
    else if(oNode.currentStyle)
    {
        var sProperty = sProperty.replace(/-\D/gi, function(sMatch)
        {
            return sMatch.charAt(sMatch.length - 1).toUpperCase();
        });

        return oNode.currentStyle[sProperty];
    }
    else return null;
}

alert(getCSSProperty("myDiv", "margin-bottom"));
</script>

编辑:原始海报有关于正则表达式逻辑的问题,这是我尝试解释的。如果我错了,请让我知道或评论您的想法:

        var sProperty = sProperty.replace(/-\D/gi, function(sMatch)
        {
            return sMatch.charAt(sMatch.length - 1).toUpperCase();
        });

好的,那段代码正在用正则表达式/-\D/gi替换正则表达式。使用this guide to regular expressions(又名:正则表达式)我想我明白了。

/是分隔符;魔法发生在他们之间。 -只是匹配短划线。 \D是一种特殊符号,表示“匹配任何非数字字符”。 gi特定于正则表达式调用,explained here特定于:“gi修饰符用于对字符串中所有出现的正则表达式进行不区分大小写的搜索。”< / p>

嵌套函数作用于replace正则表达式中的匹配项,基本上匹配.toUpperCase()

因此,您似乎可以对此进行调整以匹配您尝试检测的更深层功能?

答案 1 :(得分:0)

可能有更好的方法可以做到这一点,但如果你用CSS(或JS)添加一个特定的伪元素,你可以检查它是否存在:

if ( window.getComputedStyle(document.body,':after').getPropertyValue('content') === 1 ) {
// Do stuff
} else { 
// ie fall back
}

在这个例子中我添加了一个:after选择器到body标签,并在样式表中添加了一个content属性(这个属性的值可以是任何东西)。