我正在为jQuery开发一个插件,并且因为一个错误(不确定它是否是IE或jQuery中的错误)我需要检测该插件是否在IE中使用。< / p>
后台的组合版本:我的插件需要处理CSS属性clip
的当前值。通常你会做value = $('#my-element').css('clip');
之类的事情。但是,如果clip
值包含(允许的)值auto
,则返回值会受到影响:每个auto
都会更改为0px
。
说,CSS将元素设置为clip: rect(0px, 50px, auto, 0px)
。在当前的Firefox中,value = $('#my-element').css('clip');
正确返回rect(0px, 50px, auto, 0px)
。但是在IE中,我得到了rect(0px, 50px, 0px, 0px)
。当然,这会让一切都偏离正轨。在我的测试中,从8到11的所有IE版本都显示了这个问题,以及最新版本的jQuery。
幸运的是,如果您使用特定于IE的currentStyle
,e,您将获得正确的值。 G。 value = $('#my-element').get(0).currentStyle.clip
。但由于它是特定于IE的,所有其他浏览器都被它绊倒了。
所以,我需要一种方法来检测我的jQuery插件是否在IE中运行,无论版本与否。到目前为止,我发现寻找html
s currentStyle
正在按照
if(document.getElementsByTagName("html")[0].currentStyle) {
// do IE-stuff
} else
{
// do it the general way
}
但这对我来说似乎很不稳定,也不是很优雅。有人知道有关检测Internet Explorer的更好解决方案吗?
答案 0 :(得分:0)
试试这个:
if ( $.browser.msie ) {
alert( $.browser.version );
}
答案 1 :(得分:0)
作为评论发布,但作为我认为的答案更有意义。
你没有提到为什么检查UA是不可行的任何好的论据。欺骗UA根本不是你的问题。没有必要对此咄咄逼人。如果你只想定位IE,那么你需要检查IE,你唯一的方法是UA(检查功能列表,然后试图猜测浏览器比检查UA和忽视欺骗者更加脆弱)。但是我对这场斗争并不感兴趣,这个答案的其余部分应该回答你的问题。
但是,您已经在检查功能而不是UA的正确线路上,并且您做得对。在执行特征检测检查然后根据该检查执行代码分支时没有任何错误。
如果你不想,你不必使用if...else
,但它似乎很合适。
我并不完全确定更广泛的上下文,但看起来您只是区分浏览器不一致以获取特定样式,在这种情况下执行此功能检测并创建getStyle
或{{1基于特征检测的函数和所有其余代码保持不变。