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

时间:2009-08-19 19:01:22

标签: jquery internet-explorer-6 browser-detection

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

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

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

6 个答案:

答案 0 :(得分:6)

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

$。浏览器依赖于使用User Agent strings的浏览器嗅探,这可能是不可靠的,特别是因为用户很容易在浏览器上欺骗用户代理,而不是因为布局目的而担心它 - 如果他们改变了他们的用户代理,然后他们的错误是IE6将自己呈现为IE7无法正确呈现页面。 ;)

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

答案 1 :(得分:4)

  

我没有找到使用jquery.support

检测IE6的明确方法

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

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

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

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

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

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

答案 2 :(得分:3)

Brad Koehler has the idea。使用IE条件语句,如下面

<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --> 
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
<!--[if IE 7 ]>    <html lang="en" class="no-js ie7"> <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="no-js ie8"> <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--><html lang="en" class="no-js"><!--<![endif]-->

然后使用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/

答案 3 :(得分:2)

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

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

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

这似乎工作得很好,我尝试在那里发出警报并且只在IE6中得到它,我尝试验证页面并且它作为HTML5传递,我不确定我的内容是否存在更深层次的根本问题已经完成但到目前为止似乎还不错。

答案 4 :(得分:1)

您可以执行以下操作:

    var ie6to8 = jQuery.support.leadingWhitespace;
    var ie7to8 = jQuery.support.objectAll;
    if((ie6to8 && !ie7to8) || (!ie6to8 && ie7to8)) { //simulating a XOR
       // is ie6
    }

文档告诉js.support.leadingWhitespace在IE 6,7和8上是假的。在IE 7和8上也说ifAll是假的。我认为其他浏览器都是如此并进行了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

答案 5 :(得分:0)

我知道这不符合您的“要求”,但就我所知,单凭功能检测并不可靠。

这是我发现检测IE6的唯一可靠信息。这是我在SimpleModal中使用的,它看起来效果很好:

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