如何向IE6 / IE7浏览器显示消息以升级到IE8并让IE8不显示IE7警告?

时间:2009-05-04 22:52:55

标签: internet-explorer internet-explorer-8

我想只允许使用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模式呈现我的页面呢?

13 个答案:

答案 0 :(得分:24)

使用此标记:

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

答案 1 :(得分:14)

更正AdamSane的例子:

  

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

答案 2 :(得分:11)

这是一个建议解决方案的好链接

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

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

只是小菜一碟

答案 3 :(得分: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]-->

此消息应该不引人注目但优雅。您还应该使网站可用于那些无法升级其浏览器的网站。

答案 4 :(得分:4)

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

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

答案 5 :(得分:3)

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

<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

答案 6 :(得分:1)

取决于您如何编写(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

答案 7 :(得分:1)

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

但是,您不应该做的一件事是假设任何不遵循某种模式的用户代理字符串都是无效的。只需检查MSIE([0-9])并查看它是否在范围内;如果它完全丢失,则假设支持浏览器。如果它是MSIE 7,那么进一步检查三叉戟标记指示兼容模式(并且,我想,要求用户将其关闭)。这将允许其他未来的新兴浏览器在渲染您的页面时有机会而不会将其转移到门外:)

答案 8 :(得分:1)

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

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

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

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

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

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

答案 9 :(得分:0)

您可以使用CSS条件评论

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

答案 10 :(得分:0)

使用javascript,您可以询问哪个浏览器已发送请求&gt;

<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>

答案 11 :(得分:0)

这个聚会结束了吗? &GT;&LT;

是的,但我认为这里的信息可以稍微更新一下。

按照今天的标准,“今天”是2013年10月29日,你可以使用这个元标记来触发最新的IE浏览器和文档模式,并触发旧版IE中谷歌Chrome框架的安装:

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

这允许您服务器特定的IE6 / 7样式。请记住,我说'样式'不是'样式表',这意味着:你只使用一个CSS文件,其中包括你的所有IE6和IE7样式。这是为了最小化HTTP请求......但这是一个完全不同的对话。

无论如何,使用上面的代码片段,不需要脚本或条件注释。

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

答案 12 :(得分:-2)

你从网站上“禁止”IE 6和7用户的想法是荒谬的。由于工作限制或者他们不知道如何,许多人无法升级他们的浏览器或安装另一个浏览器。从长远来看,禁止这些人使用您的网站只会让您失去用户。

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

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

通常可以检测IE并解决它。天哪,你甚至可以使用条件注释来加载不同版本的JavaScript。使用JS框架将浏览器之间的差异抽象到您不必担心的级别。或者只是抓住IE7.js并将其粘贴在网站上 - 我听说它让你的工作变得像你不相信的那样。