2

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

我在 Stack 上看到过几篇文章,但它们都引用了 jquery.browser,并且 jquery.support 的文档有点含糊。

对此的任何帮助都会很棒,并在此先感谢。

4

6 回答 6

6

我认为 jQuery simple 的作者不希望开发人员再检查哪个浏览器正在运行应用程序/网站。相反,他们希望我们检查不同的浏览器功能并据此决定要做什么。不管是 IE6、IE8、Firefox 还是一些新的浏览器。作为应用程序开发人员,您应该知道浏览器对不同功能的支持如何影响用户使用您的应用程序的能力,并且您应该采取相应的行动。

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

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

于 2009-08-19T19:25:52.710 回答
4

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

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

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

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

所以教条的答案是,永远不要检测 IE6 或任何其他特定浏览器。使用诸如 jquery.support 之类的特征嗅探解决方案来直接查看您可以使用哪些特征,但不要假设特征“Y”的存在或不存在意味着您可以或不能使用关联的不同特征“Z”使用相同的浏览器“X”。因为考虑到您以前从未遇到过的新的或晦涩的浏览器/版本,这总是会出错。

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

目前尚不清楚您是否处于其中一种情况,因为您的问题中没有详细信息,但是当您确实需要对 That One Browser 进行可怕的破解时,最好的解决方案仍然是条件注释,放入 JavaScript 或 HTML。

于 2009-08-19T19:36:48.697 回答
3

Brad Koehler 有这个想法。使用 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/

于 2010-12-03T11:08:28.650 回答
2

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

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

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

这似乎工作得很好,我尝试在那里发出警报并且只在 IE6 中得到它,我尝试验证页面并且它作为 HTML5 传递,我不确定我所做的是否存在更深层次的潜在问题,但它到目前为止似乎还可以。

于 2010-10-05T14:20:18.870 回答
1

您可以执行以下操作:

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

文档告诉 jQuery.support.leadingWhitespace 在 IE 6、7 和 8 上是假的。还说 objectAll 在 IE 7 和 8 上是假的。我假设其他浏览器也是如此,并对这些值进行了 XOR 操作. 这样,只有当leadingWhitespace 值与 objectAll 不同时才会成立,这仅发生在 IE6 上。

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

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

于 2009-08-19T19:18:36.890 回答
0

我知道这不符合您的“要求”,但据我所知,仅使用特征检测没有可靠的方法。

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

var ie6 = $.browser.msie && parseInt($.browser.version) === 6 && typeof window['XMLHttpRequest'] !== "object";
于 2010-07-21T03:44:51.627 回答