如何检查浏览器是否完全支持javascript方法(例如getComputedStyle伪元素)
我的问题特定于getComputedStyle方法。ie9支持getComputedStyle,但不支持getComputedStyle的伪元素。通常我会用这样的支票如何检查浏览器是否完全支持javascript方法(例如getComputedStyle伪元素),javascript,jquery,internet-explorer,Javascript,Jquery,Internet Explorer,我的问题特定于getComputedStyle方法。ie9支持getComputedStyle,但不支持getComputedStyle的伪元素。通常我会用这样的支票 if ( getComputedStyle ) { ... } else { ... stuff for ie9 } 然而,这对于ie9返回true,因为它确实支持getComputedStyle(尽管它不支持伪元素)。我如何检查浏览器是否支持使用伪元素的这种方法?编辑/补遗:刚刚意识到,您正试图深入了解IE9上的getCom
if ( getComputedStyle ) { ...
} else { ... stuff for ie9 }
然而,这对于ie9返回true,因为它确实支持getComputedStyle(尽管它不支持伪元素)。我如何检查浏览器是否支持使用伪元素的这种方法?编辑/补遗:刚刚意识到,您正试图深入了解IE9上的
getComputedStyle()
与其他浏览器的区别。因此,如果此脚本不是您想要的,请注意,因为它似乎只是测试是否存在getComputedStyle()
,而不是特定的选择选项
似乎提供了跨浏览器检测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>
好的,这段代码正在用实际的正则表达式替换为/-\D/gi
。使用(又名:regex)我想我能理解
/
是分隔符;魔法发生在他们之间。-
只是与破折号匹配。\D
是一种特殊符号,表示“匹配任何非数字字符”。而gi
特定于regex调用,如:“使用gi
修饰符对字符串中正则表达式的所有匹配项进行不区分大小写的搜索。”
嵌套函数作用于replace
regex中的匹配项,基本上对匹配项执行.toUpperCase()
所以,您似乎可以调整它以匹配您试图检测的更深层次的功能 编辑/补遗:刚刚意识到您正试图深入了解IE9上的
getComputedStyle()
与其他浏览器的区别。因此,如果此脚本不是您想要的,请注意,因为它似乎只是测试是否存在getComputedStyle()
,而不是特定的选择选项
似乎提供了跨浏览器检测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>
好的,这段代码正在用实际的正则表达式替换为/-\D/gi
。使用(又名:regex)我想我能理解
/
是分隔符;魔法发生在他们之间。-
只是与破折号匹配。\D
是一种特殊符号,表示“匹配任何非数字字符”。而gi
特定于regex调用,如:“使用gi
修饰符对字符串中正则表达式的所有匹配项进行不区分大小写的搜索。”
嵌套函数作用于replace
regex中的匹配项,基本上对匹配项执行.toUpperCase()
所以,您似乎可以调整它以匹配您试图检测的更深层次的功能 可能有更好的方法来实现这一点,但是如果您使用CSS(或JS)添加特定的伪元素,您可以检查它是否存在,如下所示:
if ( window.getComputedStyle(document.body,':after').getPropertyValue('content') === 1 ) {
// Do stuff
} else {
// ie fall back
}
在本例中,我在body标记中添加了一个:after选择器,并在样式表中添加了一个content属性(该属性的值可以是任何值)。可能有更好的方法来实现这一点,但是如果您使用CSS(或JS)添加特定的伪元素,您可以检查它是否存在如下情况:
if ( window.getComputedStyle(document.body,':after').getPropertyValue('content') === 1 ) {
// Do stuff
} else {
// ie fall back
}
在本例中,我在body标记中添加了一个:after选择器,并在样式表中添加了一个content属性(该属性的值可以是任何值)。没有一致的方法来检查某些内容是否在浏览器中工作。我强烈建议签出
modernizer.js
()看看他们是怎么做的checks@ExplosionPills不是一个很有帮助或信息灵通的回答。您可以检查浏览器是否支持方法或对象。@TucsonLabs我的意思是没有通用的方法来检查每个方法。当然,您可以检查一些特定的方法,但即使这样也不能保证在所有情况下都有效browsers@JimDeville我使用Modernizer,但我不知道它有能力检查方法的部分支持。你能举出一个例子吗?没有一致的方法来检查某些东西是否能在不同的浏览器中工作。我强烈建议查看modernizer.js
(),看看它们是如何做到这些的checks@ExplosionPills不是一个很有帮助或信息灵通的回答。您可以检查浏览器是否支持方法或对象。@TucsonLabs我的意思是没有通用的方法来检查每个方法。当然,您可以检查一些特定的方法,但即使这样也不能保证在所有情况下都有效browsers@JimDeville我使用Modernizer,但我不知道它有能力检查方法的部分支持。你能举个例子吗?你能解释一下正则表达式在做什么吗?似乎如果这能起作用,我只需要if(oNode.currentStyle)块中的代码。添加了我理解的正则表达式的解释。@TucsonLabs一点说明:regex将属性字符串中的所有“-someword”替换为“someword”。因此,例如“box shadow”将变成“boxShadow”,而“border left color”将变成“border LeftColor”。谢谢您的帮助,@inhan!没问题。顺便说一句,我没有在评论中提及你的原因是因为你已经收到了通知。很抱歉删除并重新发布该评论。我在编辑时出错了。你能解释一下正则表达式在做什么吗?看起来如果这能起作用,我只需要if(oNode.currentStyle)块中的代码。添加了我理解的正则表达式的解释。@TucsonLabs一点澄清:regex替换了所有“-somewor”