Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在jQuery插件中检测Internet Explorer?_Jquery_Internet Explorer_Jquery Plugins - Fatal编程技术网

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

如何在jQuery插件中检测Internet Explorer?,jquery,internet-explorer,jquery-plugins,Jquery,Internet Explorer,Jquery Plugins,我正在为jQuery开发一个插件,由于一个bug(不确定它是IE中的bug还是jQuery中的bug),我需要检测这个插件是否在IE中使用 背景的合成版本:我的插件需要处理CSS属性clip的当前值。通常你会做一些类似于value=$(“#我的元素”).css('clip')。但是如果clip值包含(允许的)值auto,则返回值会受到影响:每个auto都会更改为0px 比如说,CSS将元素设置为clip:rect(0px,50px,auto,0px)。在当前的Firefox中,value=$('

我正在为jQuery开发一个插件,由于一个bug(不确定它是IE中的bug还是jQuery中的bug),我需要检测这个插件是否在IE中使用

背景的合成版本:我的插件需要处理CSS属性
clip
的当前值。通常你会做一些类似于
value=$(“#我的元素”).css('clip')。但是如果
clip
值包含(允许的)值
auto
,则返回值会受到影响:每个
auto
都会更改为
0px

比如说,CSS将元素设置为
clip:rect(0px,50px,auto,0px)
。在当前的Firefox中,
value=$('#我的元素').css('clip')
正确返回rect(0px,50px,auto,0px)
。但是在IE中我得到了rect(0px,50px,0px,0px)。当然,这让一切都偏离了轨道。在我的测试中,从8到11的所有IE版本以及最新版本的jQuery都显示了这个问题

幸运的是,如果使用IE特有的
currentStyle
,您可以得到正确的值。g<代码>值=$(“#我的元素”).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的更好解决方案吗?

试试这个:

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

我本来打算发表评论,但我认为作为一个答案更合理

你还没有提到为什么检查行动单位是不可行的。欺骗UA根本不是你的问题。没有必要对它咄咄逼人。如果你想只针对IE,那么你需要检查IE,你唯一的方法是UA(检查功能列表,然后尝试猜测浏览器比只检查UA和忽略欺骗要欺诈得多)。但我不想为此争吵,这个答案的其余部分应该回答你的问题

然而,你已经在检查功能而不是UA的正确路线上,而且你做得对。执行特性检测检查,然后基于该检查执行代码分支,没有任何错误

如果您不想,您不必使用
if…else
,但它似乎很适合这里


我不太清楚更广泛的背景,但看起来你只是在区分浏览器的不一致性,以获取特定的风格,在这种情况下,执行此功能检测并基于功能检测创建
getStyle
getClip
函数,其余代码保持不变。

您可以通过if(!search){vote=-1;}@Novocaine检查正在使用的浏览器:检查用户代理对于这种情况来说太复杂了。此外,ua可以在许多浏览器中轻松更改(例如,它有一个Firefox扩展),因此它也不可靠。浏览器在jQuery中已经被弃用了一段时间,并在jQuery 1.9.x中被删除。不幸的是,如果客户说是,UA欺骗就是我的问题。。。它必须要起作用。而且,正如上面的评论中所写的那样,那些UA恰好符合RegEx的客户呢?Safari在其UA中使用“like Gecko”,因此寻找“Gecko”来识别基于Gecko的客户端将失败。我不想保证桌面、智能手机、平板电脑、智能电视、汽车娱乐系统或其他任何东西上都没有浏览器,比如UA中有“像MSIE一样”的浏览器。更广泛的情况下:jQuery插件需要获取当前值
clip
,才能使用它进行计算(最后,我们讨论的是
$.animate
),因为IE上的jQuery在某些情况下不会返回正确的值(请参见问题),如果插件在IE上运行,我需要用自定义函数替换jQuerys
$.css
。因此,我需要检测它。在这种情况下,检查
html
s
currentStyle
似乎是最好的方法。UA正则表达式上的信息负载在99%以上的时间都是正确的,但事实并非如此这是解决问题的好方法。当然,如果IE(或其他)改变处理当前样式或剪辑的方式,你总是会遇到同样的问题。但在特征检测方面,我认为你已经走上正轨了。