【问题标题】:How can I show a message to IE6/IE7 browsers to upgrade to IE8 and have IE8 not show the IE7 warning?如何向 IE6/IE7 浏览器显示升级到 IE8 的消息并且让 IE8 不显示 IE7 警告?
【发布时间】:2014-01-23 05:53:28
【问题描述】:

我只想允许使用 IE8(不是 IE6、IE7)或其他浏览器的用户在登录时访问我的网站。

我关注了:http://code.google.com/p/ie6-upgrade-warning/ 但我也希望它不允许 IE7 用户在登录时使用主站点(他们可以查看公共页面。)原因是主 Web 应用程序有很多 JavaScript 效果,只能在 IE8 渲染模式下 100% 工作(或除 IE 之外的任何其他浏览器。)

将 ie6 升级警告修改为 ie7 的问题在于,它看起来像 IE8 以 IE7 呈现模式显示我的网页,并且“谎报”是 ie7 并触发 IE7 样式表代码。

那么如何强制 IE8 始终以 IE8 模式呈现我的页面?

【问题讨论】:

  • 您真的想排除世界上大约 40-50% 的用户吗?认真的吗?
  • 如果我再听到有人抱怨我不包括IE6和IE7,我也要排除IE8!
  • 有很多应用程序是为有限的受众设计的。在这些情况下,您可以指定特定程序和最低版本。当然,这些不能称为“网络应用程序”。我称它们为 IE 应用程序,因为 IE 是它们运行的​​“操作系统”。
  • 为什么有人会认为这张海报排除了全球 50-60-99% 的互联网用户?请大家不要发表含糊不清的言论。发帖人从未宣布他的网络应用程序的目标受众/市场,不清楚它是一个网站还是一个内部网应用程序,它不在乎世界对不良/过时软件甚至学校项目的沉迷。让我们不要讨论浏览器市场份额以及我们的意见。我不知道有什么决定性的技巧来做你问的事情(可能是以下一些答案的组合),所以我现在闭嘴。
  • @Yoooder:别开玩笑了,每个人都知道 w3schools 的统计数据对于整个网络来说是非常不准确的。在这种情况下 WP 更准确:en.wikipedia.org/wiki/Usage_share_of_web_browsers

标签: internet-explorer internet-explorer-8


【解决方案1】:

使用这个标签:

<meta http-equiv="X-UA-Compatible" content="IE=8" />

【讨论】:

  • 是的,这将正确地强制 IE8 以 IE8 模式呈现他的网站,并导致 JavaScript 和条件注释报告 IE8。在服务器端,在用户代理标头中检查“Trident 4.0”也是有效的。我们经常建议人们使用“IE=EmulateIE8”,以确保不会无意中强制任何 Quirks 模式页面进入标准模式,但这张海报看起来像个标准迷,不太可能使用 Quirks 模式页面。
【解决方案2】:

更正 AdamSane 的例子:

<!--[if lt IE 8]> Special instructions for IE 7 or less here <![endif]-->

【讨论】:

  • 如果页面处于兼容性视图模式,这将不起作用。在该模式下,IE8 将 IE7 版本信息用于条件 cmets。
【解决方案3】:

这是一个很好的链接,可以提供一些解决方案

http://garmahis.com/tools/ie6-update-warning/

我个人喜欢第四个解决方案(http://www.browser-update.org/)

小菜一碟

【讨论】:

    【解决方案4】:

    出于安全原因,我个人建议用户升级 IE。我会使用条件注释来定位 IE8 以下的浏览器。

          <!--[if lt IE 8]>You are using an outdated version of Internet Explorer.  For security reasons you should upgrade your browser. Please go to Windows Updates and install the latest version.<![endif]-->
    

    这条信息应该不显眼但优雅。您还应该让那些无法升级浏览器的人可以使用该网站。

    【讨论】:

      【解决方案5】:

      我没有尝试强制使用 IE 8+ 模式,而是结合使用条件 cmets 和简单的 javascript 检查。 document.documentMode 属性是在版本 8 中添加到 IE 中的,所以如果它完全存在(不管值如何,尽管此代码必须为 7),这意味着我们处于兼容模式并且不应显示警告:

      <!--[if lte IE 7]>
          <script>
              if (!document.documentMode) { //if documentMode exists, this is a later IE in compatibility mode
                  showBadBrowserMessage();
              }
          </script>
      <![endif]-->
      

      【讨论】:

        【解决方案6】:

        这是适用于所有旧浏览器的酷脚本:

        <script type="text/javascript"> 
            var $buoop = {vs:{i:7,f:5,o:12,s:5,n:9}}; 
            $buoop.ol = window.onload; 
            window.onload=function(){ 
             try {if ($buoop.ol) $buoop.ol();}catch (e) {} 
             var e = document.createElement("script"); 
             e.setAttribute("type", "text/javascript"); 
             e.setAttribute("src", "//browser-update.org/update.js"); 
             document.body.appendChild(e); 
            } 
        </script> 
        

        注意:如果访问者忽略了该建议,它在一段时间内不会再次出现。

        更多内容请见:here

        【讨论】:

          【解决方案7】:

          取决于您如何编写 (X)HTML,但如果您有严格的文档类型,IE8 应该使用标准模式(而不是 IE7 模式):

          <!DOCTYPE html 
              PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
          

          在 HTML 文件的顶部。

          XHTML 1.0 Specs - Strictly Conforming Documents

          这是一篇关于不同 doctypes/etc 如何影响 IE8 的呈现模式的好帖子:Understanding Compatibility Modes in Internet Explorer 8

          【讨论】:

          • 不完全是。任何人都可以通过点击愚蠢的破页图标随时触发IE8的兼容模式。
          【解决方案8】:

          如果他们使用的是旧版本的 IE,最好的方法可能是检测用户的浏览器 User-Agent 字符串并将他们重定向到要求他们升级(或下载不同的浏览器,如 firefox 或 chrome)的页面。您可以在IE developer blog entry 上查看 IE 7 和 8 的用户代理示例。旧版本的 IE 遵循类似的模式。

          但是,您不应该做的一件事是假设任何不遵循特定模式的用户代理字符串都是无效的。只需检查 MSIE ([0-9]) 并查看它是否在范围内;如果它完全丢失,则假设浏览器受支持。如果是 MSIE 7,则进一步检查指示兼容模式的 Trident 标记(并且,我想,请用户将其关闭)。这将允许其他未来的新贵浏览器有机会呈现您的页面,而无需将它们拒之门外:)

          【讨论】:

            【解决方案9】:

            如前所述,我建议实现此目的的最佳方法是使用条件 cmets 来包含特定于 8 之前的所有 IE 版本的样式表:

            <!--[if lt IE 8]> Include CSS here <![endif]-->
            

            包含的 CSS 可以将警告设置为可见,或者在页面上启用“锁定”用户的覆盖。包含一些隐藏页面上重要元素的规则可能是个好主意,否则如果它们不能按预期工作,可能会使用户感到困惑。

            您的另一个选择是将用户重定向到另一个页面 - 我不是重定向的忠实粉丝,但如果小心使用它们可能是一个合适的解决方案。

            您是否考虑过为什么将大量用户锁定在您的网站之外? 也许您应该花时间研究如何优雅地降级您的 JavaScript,或者反过来;使用 JavaScript“逐步增强”。

            另一方面,您可能可以控制使用您网站的组织所使用的系统,在这种情况下,您可能可以阻止人们使用非标准系统。

            【讨论】:

              【解决方案10】:

              您可以使用 CSS 条件注释

              <!--[if IE 8]>
              Special instructions for IE 6 here
              <![endif]-->
              

              【讨论】:

              • 然后做什么,使用 CSS 隐藏页面上的所有元素? CSS 不能限制访问。
              • @AdamSane - 这些只是有条件的 cmets - 不需要“CSS”位。 @Chad - 它不需要限制访问 - 只需使警告可见并隐藏任何可能使用户感到困惑的内容。如果用户可以通过使 JavaScript 无法正常工作/工作而破坏某些内容,则说明应用程序存在问题。
              【解决方案11】:

              使用javascript可以询问是哪个浏览器发送了请求>

              <script type="text/javascript">
              function detectBrowser()
              {
              var browser=navigator.appName;
              var b_version=navigator.appVersion;
              var version=parseFloat(b_version);
              if (browser=="Microsoft Internet Explorer")
                && (version>=8))
                {
                alert("Your browser is good enough!");
                }
                else
                {
                alert("It's time to upgrade your browser!");
                }
                }
               </script>
              

              【讨论】:

              • 如果页面处于兼容性视图模式,这将不起作用。在该模式下,IE8 将 IE7 版本信息用于条件 cmets 和 JavaScript 用户代理。
              【解决方案12】:

              聚会结束了吗? >

              是的,不过我觉得这里的信息可以更新一点。

              按照今天的标准,“今天”是 2013 年 10 月 29 日,您可以使用此元标记来触发最新的 IE 浏览器和文档模式,并触发在旧版 IE 中安装 Google 的 Chrome Frame:

              &lt;meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"&gt;

              这允许您服务器特定的 IE6/7 样式。请记住,我说的是“样式”而不是“样式表”,意思是:您只使用一个 CSS 文件,其中包含您所有的 IE6 和 IE7 样式。这是为了尽量减少 HTTP 请求……但这是完全不同的对话。

              无论如何,有了上面的 sn-p,就不需要脚本或条件注释了。

              注意:Google Chrome Frame 将于 2014 年 1 月停用 - more info here

              【讨论】:

                【解决方案13】:

                您从您的网站“禁止”IE 6 和 7 用户的想法非常荒谬。很多人因为工作限制或不知道如何升级浏览器或安装另一个浏览器。从长远来看,禁止这些人使用您的网站只会让您的用户付出代价。

                修复您的 JavaScript、解决问题或优雅降级,以便网站即使关闭也能正常运行。

                编辑:我在下面的评论中发布了更多信息,应该在这篇文章中:

                通常可以检测到 IE 并解决它。见鬼,你甚至可以使用条件 cmets 来加载不同版本的 JavaScript。使用 JS 框架会将浏览器之间的差异抽象到您不需要担心的水平。或者直接抓住 IE7.js 并将其粘贴在网站上 - 我听说它可以让您难以置信的工作。

                【讨论】:

                • 当您必须中性功能或标准合规性时,很难修复您的 JavaScript - IE 喜欢对标准代码有自己的解释,这通常让您支持 IE 或其他。
                • 另外,我很确定他并没有禁止他们访问该站点,而是告诉他们如果他们使用的是 IE6/7,他们甚至可以不尝试。警告您的用户不支持他们的不兼容客户端是很好的防御性编码。
                • 通常可以检测到 IE 并解决它。见鬼,你甚至可以使用条件 cmets 来加载不同版本的 JavaScript。使用 JS 框架会将浏览器之间的差异抽象到您不需要担心的水平。或者只是抓住 IE7.js (code.google.com/p/ie7-js) 并将其粘贴在网站上 - 我听说它可以让您难以置信的工作。
                • 我同意“禁止”IE 6 和 7 用户的想法。当然,我在我们的一个管理网站上走得更远。我们禁止任何非当前发布的浏览器版本。这意味着任何低于 IE8、Firefox 3.6、Safari 4.0.4 等的版本。这是出于安全和性能原因。到目前为止,我们的客户并没有退缩。
                • 如果他和我们一样,他可能不会写一个面向公众的网站,而是一个内部网站,它对版本 X 以下的浏览器的不支持性质有明确的政策
                猜你喜欢
                • 2015-07-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多