如何在jQuery插件中检测Internet Explorer?

时间:2014-09-25 12:44:58

标签: jquery internet-explorer jquery-plugins

我正在为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的更好解决方案吗?

2 个答案:

答案 0 :(得分:0)

试试这个:

  if ( $.browser.msie ) {  
      alert( $.browser.version );
  } 

答案 1 :(得分:0)

作为评论发布,但作为我认为的答案更有意义。

你没有提到为什么检查UA是不可行的任何好的论据。欺骗UA根本不是你的问题。没有必要对此咄咄逼人。如果你只想定位IE,那么你需要检查IE,你唯一的方法是UA(检查功能列表,然后试图猜测浏览器比检查UA和忽视欺骗者更加脆弱)。但是我对这场斗争并不感兴趣,这个答案的其余部分应该回答你的问题。

但是,您已经在检查功能而不是UA的正确线路上,并且您做得对。在执行特征检测检查然后根据该检查执行代码分支时没有任何错误。

如果你不想,你不必使用if...else,但它似乎很合适。

我并不完全确定更广泛的上下文,但看起来您只是区分浏览器不一致以获取特定样式,在这种情况下执行此功能检测并创建getStyle或{{1基于特征检测的函数和所有其余代码保持不变。