【问题标题】:some none IE browsers are showing true for IE6 Browser detection一些没有 IE 浏览器显示为 IE6 浏览器检测
【发布时间】:2012-02-14 10:43:46
【问题描述】:

所以我正在运行 jQuery 1.3.2(是的,它很旧,现在我无法升级)。

问题是我正在尝试放弃对我们内部站点的 IE6 支持并升级浏览器。我有这张支票

if($.browser.msie && $.browser.version=="6.0") {
    // do something...
}

但在测试期间(某些)Firefox 用户看到了do something 条件并且不应该出现这种情况。以下是我认为可能导致问题的一些用户代理。

  • UserAgent:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/535.7(KHTML,如 Gecko)Chrome/16.0.912.75 Safari/535.7
  • UserAgent:Mozilla/5.0(Windows;U;Windows NT 5.1;en-US;rv:1.9.2.23)Gecko/20110920 Firefox/3.6.23
  • UserAgent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7
  • UserAgent:Mozilla/5.0(Windows;U;Windows NT 6.1;en-US;rv:1.9.2.25)Gecko/20111212 Firefox/3.6.25
  • UserAgent:Mozilla/5.0(Windows;U;Windows NT 5.1;en-US;rv:1.9.2.12)Gecko/20101026 Firefox/3.6.12

我还需要更多的 IE6 验证吗?

注意:最终用户没有安装附加组件。我在想像 IE-Tabs 这样的东西可能会导致问题,但事实并非如此

更新:

以下所有回复都将我引向此,仍在测试中,但看起来不错。关于如何改进它的任何想法?

var ie6 = $.browser.msie && parseInt($.browser.version) === 6 && typeof window['XMLHttpRequest'] !== "object";
if(typeof document.body.style.maxHeight === "undefined" && ie6) {
    alert('Your browser is IE6');
}

相关问题:

【问题讨论】:

  • 修补您的 jQuery 副本以使用较新(可能已修复)版本的 .browser 对象?
  • api.jquery.com/jQuery.browser 在规范设计完成之前,该项目一直停留在 jQuery 1.3.2,但我们都知道这是怎么回事……如何“修补您的 jQuery 副本”?跨度>
  • 将生成browser对象的jquery.js内部的源代码替换为新版本的源代码。

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


【解决方案1】:

不要使用浏览器检测。特征检测要好得多。如果您只想向 IE 6 用户显示消息或其他内容,我建议您改用 conditional comments

<!--[if IE 6]>
    <script type="text/javascript">
        // do something...
    </script>
<![endif]-->

【讨论】:

  • @PhillPafford 有什么不好的?鉴于上面的代码(以及 quirksmode 博客中链接的代码)它应该可以工作。条件 cmets 是专门为此设计的,因此没有任何理由不应该工作。
  • 一些较旧的 Firefox 浏览器在此处尝试此方法时将其视为语法错误:stackoverflow.com/a/4226413/93966
  • 你不想在 &lt;script&gt; 标签中做这件事,因为该标签中的所有内容都被解析为 JS。如果以后需要用到,按照上面的方法在需要用到的标签outside设置一个变量,边走边检查值。
  • 我什至尝试将 IE 条件块移到脚本标签之外,同样的事情
  • 看起来像this example 中的代码吗?因为如果确实如此,它就没有理由不工作。我已经在 IE 6 和 FF 中测试了这段代码,它正确地提醒了正确的值。
【解决方案2】:

来自jQuery Documentation

$.browser 属性在 jQuery 1.3 中已弃用,其功能可能会在 jQuery 的未来版本中移至团队支持的插件中......

在可能的情况下,最好完全避免使用特定于浏览器的代码。 $.support 属性可用于检测对特定功能的支持,而不是依赖于 $.browser。

您也可以使用:

  1. 使用navigator object编写自定义浏览器检测器
  2. IE 条件语句,类似于this

【讨论】:

    【解决方案3】:

    感谢大家帮助我找到了我正在寻找的东西,也许这可能对其他人有所帮助

    var ie6 = $.browser.msie && parseInt($.browser.version) === 6 && typeof window['XMLHttpRequest'] !== "object";
    if(typeof document.body.style.maxHeight === "undefined" && ie6) {
        alert('Your browser is IE6');
    }
    

    【讨论】:

      【解决方案4】:

      你可以使用这个: &lt;!--[If IE 6]&gt; Your code here &lt;![endif]--&gt; 将仅针对 IE6。 http://www.unintentionallyblank.co.uk/2006/09/19/if-internet-explorer-then-do-something-else-a-how-to/

      【讨论】:

        【解决方案5】:

        如果你想用一行脚本找到IE6及以下版本,又不能使用条件cmets:

        if('\v'==='v' && !window.XMLHttpRequest) { // 做一点事... }

        【讨论】:

          【解决方案6】:

          你想要做的事情是什么需要知道浏览器是否是 IE6?让我们消除它。

          【讨论】:

          • “放弃对我们内部站点的 IE6 支持”需要针对 IE6 浏览器
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-19
          • 1970-01-01
          • 2011-01-14
          • 1970-01-01
          • 2016-01-14
          相关资源
          最近更新 更多