jQuery使用jQuery.support NOT jQuery.browser检测IE6

我没有找到使用jquery.support而不是jquery.browser来检测IE6的明确方法。 另外我需要考虑Quirks模式,呃!

我在Stack上看到了几个post,但它们都引用了jquery.browser,而jquery.support的文档有点模糊。

任何有关这方面的帮助都会很棒并且事先感谢。

我认为jQuery的作者很简单,不希望开发人员检查哪个浏览器正在运行应用程序/网站。 相反,他们希望我们检查不同的浏览器function,并根据它确定要做什么。 无论是IE6,IE8,Firefox还是一些新的浏览器都没关系。 作为应用程序开发人员,您应该知道浏览器对不同function的支持如何影响用户使用您的应用程序的能力,您应该采取相应的行动。

$ .browser依赖于浏览器嗅探使用可能不可靠的用户代理字符串 ,特别是因为用户很容易在他们的浏览器上欺骗用户代理,而不是因为布局目的而担心它 – 如果他们改变了他们的用户代理那么他们的IE6呈现为IE7无法正确呈现页面是他们的错。 ;)

您仍然可以使用$ .browser,尽管它已被弃用或尝试自行编写代码。 也许有一个jQuery插件已经? 我知道上次我必须检查IE6我使用的方法…

我没有找到使用jquery.support检测IE6的明确方法

不,当然不是 – 这就是重点。

教条是检测对特定function的支持,并围绕缺少它们进行编码,这是一种维护跨浏览器兼容性的更好方法,而不是试图跟踪存在的每个浏览器及其支持的内容。

虽然您可以从jquery.support向后工作来猜测正在运行的浏览器,然后使用依赖于完全不同的function的不同代码,这将是完全不正常的。 您将采用已经脆弱的方法来假设浏览器’X’支持function’Y’,并通过添加另一层无关的function嗅探使其更加脆弱,这可能会导致错误的浏览器。

所以教条的答案是,不要检测IE6或任何其他特定的浏览器。 使用jquery.support等function嗅探解决方案直接查看可以使用的function,但不要假设function“Y”的存在与否意味着您可以或不能使用不同的function“Z”关联使用相同的浏览器’X’。 因为在以前没有见过的新的或模糊的浏览器/版本中,这总是会出错。

事实上,教条的答案通常是正确的。 但实际上有一些浏览器错误无法通过function嗅探检测到,需要特定的解决方法。 当然,这几乎总是一个浏览器,是IE6。

目前还不清楚你是否处于其中一种情况,因为你的问题中没有细节,但当你确实需要一个可怕的黑客攻击那个浏览器时,大致最好的解决方案仍然是条件评论 ,放到JavaScript或HTML中。

Brad Koehler有这个想法 。 使用如下所示的IE条件语句

      

然后使用javascript和一些jQuery,你可以这样做..

 $(document).ready(function () { if ($('html').is('.ie6')) { alert('You are running IE6!'); } else if($('html').is('.ie7')) { alert("You are running IE7!"); } else { // Browsers other than IE6 and 7. } }); 

编辑器正在蚕食我的第一段代码,所以这里是它的链接 – http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/

我刚刚在一些测试中做了一些有点脏的事情,不想使用已弃用的.browser但没有阅读并理解.support。

我最喜欢,使用条件样式表来为IE6设置样式。 我只是添加了一个id =“IE6”,然后用jQuery检测到了ID。

 jQuery.fn.exists = function(){return jQuery(this).length>0;} if ($('#IE6').exists()) { //do something } 

这似乎工作得很好,我尝试在那里发出一个警报,只在IE6中得到它,我尝试validation页面,它作为HTML5传递,我不确定是否有更深层次的问题与我做了但是它到目前为止似乎还可以

你可以这样做:

     var ie6to8 = jQuery.support.leadingWhitespace;
     var ie7to8 = jQuery.support.objectAll;
     if((ie6to8 &&!ie7to8)||(!ie6to8 && ie7to8)){//模拟XOR
        //是ie6
     }

文档告诉IE浏览器6,7和8上的jQuery.support.leadingWhitespace是假的。还有人说IE的7和8上的objectAll是假的。我认为其他浏览器都是如此,并对这些值进行了XOR运算。 这种方式只有在leadingWhitespace值与objectAll不同时才会出现,而objectAll只发生在IE6上。

你可以在这里看到更多: http : //docs.jquery.com/Utilities/jQuery.support

更新:从jQuery 1.3开始,不再推荐使用浏览器嗅探,但仍可以旧方式完成(使用$ .browser.msie和$ .browser.version)。 在这里查看: http : //docs.jquery.com/Release : jQuery_1.3

我知道这不符合你的“要求”,但据我所知,单独使用特征检测并不可靠。

这是我发现检测IE6的唯一可靠信息。 这是我在SimpleModal中使用的,它似乎运行良好:

 var ie6 = $.browser.msie && parseInt($.browser.version) === 6 && typeof window['XMLHttpRequest'] !== "object";