Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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无法检测IE 11_Jquery_Internet Explorer 11_Browser Detection - Fatal编程技术网

Jquery无法检测IE 11

Jquery无法检测IE 11,jquery,internet-explorer-11,browser-detection,Jquery,Internet Explorer 11,Browser Detection,只是偶然发现了一个问题。当尝试使用Jquery检测IE11(目前正在播放的测试版)时,结果是“firefox”。同样的代码检测IE 10。我需要知道用户使用的浏览器,以便显示不同的说明 如果有必要的话,我正在Oracle VirtualBox中进行测试。操作系统是Win7 代码如下: <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> <script src="http://code

只是偶然发现了一个问题。当尝试使用Jquery检测IE11(目前正在播放的测试版)时,结果是“firefox”。同样的代码检测IE 10。我需要知道用户使用的浏览器,以便显示不同的说明

如果有必要的话,我正在Oracle VirtualBox中进行测试。操作系统是Win7

代码如下:

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
var browser = function() { 
if ($.browser.msie) return "ie";
var ua = navigator.userAgent.toLowerCase();
if ($.browser.mozilla/* && /firefox/.test(ua)*/) return "firefox"; 
if (/chrome/.test(ua)) return "chrome";
return /*"#"*/'unknown';
} ();

alert (browser); // This return firefox
alert ($.browser.version); // This returns 11.0 - the CORRECT version of IE
</script>

var browser=函数(){
如果($.browser.msie)返回“ie”;
var ua=navigator.userAgent.toLowerCase();
if($.browser.mozilla/*&&/firefox/.test(ua)*/)返回“firefox”;
如果(/chrome/.test(ua))返回“chrome”;
返回/*“#”*/“未知”;
} ();
警报(浏览器);//这是返回firefox
警报($.browser.version);//这将返回IE的正确版本11.0
如您所见,Jquery可以找到浏览器版本,但不能找到浏览器名称。 知道如何绕过它吗?

最终解决方案:

if (!!navigator.userAgent.match(/Trident\/7\./))
  return "ie";  

我们只能希望发布版本也能起到同样的作用。

jQuery.browser
长期以来被弃用并已被删除,您应该使用
$。支持
或更好的工具,如
modernizer
jQuery Migrate的目的是让写得不好的旧代码运行,不鼓励编写写得不好的新代码。由于那段写得很糟糕的旧代码早在IE11发布之前就已经创建好了,所以它无论如何都不知道IE11,而且很可能会表现得不好。jQuery迁移插件不会更改为检测IE11。如果您正在编写新代码,请不要使用浏览器检测。相反,使用功能检测。

这是出于兼容性原因。客户端代码通常执行浏览器检测,而不是特征检测(这是一种糟糕的做法)。因此,为了确保客户端正确地使用IE11的所有功能,微软已经做到了这一点,IE11将报告它与Mozilla兼容

因此,与其进行浏览器检测,不如进行特征检测。看见有一些很棒的库,可能是最有名的库(Microsoft将其作为Visual Studio中ASP.NET模板的一部分提供)


请参阅。

因为它还没有推出,我想jQuery不支持它。你自己嗅一下就行了。这并不难。“我需要知道用户使用的浏览器,以便显示不同的说明。”为数不多的有效浏览器嗅探用例之一。:-)也就是说,我会始终确保提供指向其他浏览器说明的链接,以防万一。你不应该这样做。因为Microsoft不希望你能够检测到IE11,这样你就不能专门针对他们的浏览器来建议人们根据使用的浏览器更改浏览器或禁用功能。如果你是IE 11浏览器,你真的想让人们知道吗?这是我从微软那里得到的:“你报告的“bug”是HTML5规范的一部分,是故意的。这是全行业努力阻止网站根据不同浏览器定制内容的一部分。这对“行业”来说很容易。”通过简单地遵守规范来消除浏览器测试。然而,即使是规范也存在着众所周知的缺陷,实现也没有更好的结果。能力测试显然是规范化开发的更好方法,但并不是所有的bug/功能都能被检测到。
if(/Trident\/7\./).test(navigator.userAgent))
更好,因为
.test()
实际上返回一个布尔值,而且速度更快。使用
.match()
返回一个带有结果的数组。发布版本的操作与此相同。不知道为什么微软说它符合规范,而事实上却因为其他行为不符合规范而崩溃。现在我正在尝试修复jWYSIWYG,这在IE11中不起作用,但在IE8、9、10和所有其他遵循HTML5的主要浏览器中起作用,因为它比IE长得多。我认为微软为什么决定改变并不重要,因为jQuery停止支持浏览器检测~v1.9。只要支持迁移项目,它就是一个解决方案,但目标不是让浏览器达到不必测试浏览器的程度吗?我知道我们还没有接近……我知道这是福音,但我不认为我使用浏览器插件(并且必须给出特定于浏览器的用户提示)的代码“写得很糟糕”。哦,等等,我知道:“不要使用插件!”除了我的插件是用于文档扫描。。。“不支持扫描!”除了我们的客户每年需要扫描数百万份纸质文档之外。。。“让你的客户停止使用纸张!”财富500强和政府。。。“生活在不同的宇宙里!”哦,好的。明白了。如果你出于特定原因需要检测浏览器品牌(“欢迎IE11用户!”),那么就写一个插件来检测。作为一个实用功能,它根本不是一个好主意,这就是为什么
$.browser
不存在的原因。@Spike0xff没有人会说不支持扫描它。他们所说的是:找到另一种方法来获得扫描,而不是一种廉价而令人愉快的解决方案,因为这会增加维护和安全方面的成本。是的@RobertGrant,我听到和看到这一建议的次数比我想象的要多。不幸的是,它实际上更像是一个指南,因为“寻找另一种方法”不能保证产生任何输出,甚至不能终止。但是,如果你有一个具体的建议适用于我的具体问题,请说下去。如果你认为你已经为一个具体的建议提供了足够的细节,那么我期待着看到一些公司退出《财富》500强:)有些事情是无法进行能力测试的。明白了。特征检测优于浏览器检测。