【问题标题】:How to simulate a customer's IE compatibility view settings?如何模拟客户的 IE 兼容性视图设置?
【发布时间】:2013-08-01 09:18:50
【问题描述】:

更新:主要问题是,尽管有正确的文档类型和与 x-ua 兼容的元标记,是否有任何东西会导致 IE10 以 IE5 怪癖模式呈现页面(与一般的兼容模式相反) ? (明确地说,我们不希望页面以 IE5 怪癖呈现,我们希望它以完整的 IE10 标准呈现。)


我们的页面正在为一位客户以 IE5 quirks 模式呈现,导致呈现失败。我可以使用开发工具强制 IE 进入相同的模式并复制相同的故障,但为什么这首先会发生在他(而且只有他)身上?可能是他的环境中的某些东西,我可以在我的最后模拟它吗?客户正在使用 IE10。

我们正在使用:

<!DOCTYPE html>

和:

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

我们还将添加一个 HTTP 响应标头:

X-UA-Compatible: IE=edge,chrome=1

但我们无法验证此修复程序,因为它在我们自己的 IE10 实例中运行良好。

【问题讨论】:

  • 我们也遇到了一个这样的问题,其原因是安装在客户机器上但没有安装在我们机器上的 MS 安全补丁 (KB2846071)。
  • @greim:你确定他改变它不是为了骗你? :-P 我在开玩笑......无论如何,除了一些愚蠢的工具栏,我想不出它为什么能在你的机器上工作而不是他的机器。
  • 提供给客户的标记与您提供的标记完全相同吗?难道不是一些代理 ets。添加一些东西(例如 HTML 注释)before Doctype?
  • @MilchePatern:如果您将http:// 添加到 URL,它应该可以点击。
  • @RocketHazmat,我确实想到了拖钓以及代理干扰。此外,他可能无意中触发了他的开发工具中的设置,或者在之前的调试会话中将其置于该模式并忘记了。无论如何,我正在收集这是一个相当不稳定的角落案例。我们现在将推动 http 标头修复并交叉手指。

标签: javascript internet-explorer-10 ie-compatibility-mode


【解决方案1】:

来自这个链接:http://blogs.msdn.com/b/deviations/archive/2009/05/07/how-to-enable-ie-8-compatibility-view-for-your-whole-web-site-or-for-specific-web-site-directories.aspx

许多客户问的问题是“我怎样才能强迫客户 浏览器在访问我们的网站时使用兼容性视图?所以 客户不必在客户端激活它。”

Web 开发人员和站点管理员可以配置 IIS 及其 告诉 Internet Explorer 8 自动模拟 Internet 的站点 Explorer 7 当他们访问他们的网站或只是特定的网页时。

这是通过向 IIS 和网站添加自定义 HTTP 标头来完成的 web.config 或向特定页面添加元标记。 HTTP 标头是 由 Internet Explorer 8 解释,这将激活 兼容性视图。所有其他浏览器将简单地忽略此自定义 HTTP 标头。

X-UA-Compatible: IE=EmulateIE7

这是为了在兼容模式下强制渲染。

如果您想在兼容模式下“模拟”浏览器,用户 RocketHazmat 在评论中提到了要做什么(使用工具 > 设置)。

您可以通过以下两个博客来熟悉这个属性以及IE8和IE9的兼容性视图模式: 引入兼容性视图:http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx。 介绍 IE9 的用户代理字符串:http://blogs.msdn.com/b/ie/archive/2010/03/23/introducing-ie9-s-user-agent-string.aspx

如果您想“检测”IE 兼容性视图模式:

我发现这个 SO 答案很有趣:JavaScript: Can I detect IE9 if it's in IE7 or IE8 compatibility mode?(document.documentMode 是最好的方法)。主题on stackoverflow from a google search

从此链接:http://social.msdn.microsoft.com/Forums/vstudio/en-US/ae715fd2-1ddd-46f7-8c26-9aed6b2103f1/how-to-detect-compatibility-mode-in-ie-any-version

经过研究,我们可以发现 User Agent String 的值 在不同的浏览模式下分别是:

  • IE7:Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.1;...)
  • IE8:Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.1;Trident/4.0;...)
  • IE8 兼容性视图:Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.1;Trident/4.0;...)
  • IE9:Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;Trident/5.0)
  • IE9 兼容性视图:Mozilla/4.0(兼容;MSIE 7.0;Windows NT 6.1;Trident/5.0;...)

注意,字符串中一些不相关的值会被忽略,我们只 需要关注一些可以结合起来决定的关键值 浏览模式,如 MSIE 版本号。和三叉戟模式NO..

这是最终的解决方案:

    var agentStr = navigator.userAgent;
     var mode;
     if (agentStr.indexOf("Trident/5.0") > -1) {
         if (agentStr.indexOf("MSIE 7.0") > -1)
             mode = "IE9 Compatibility View";
         else
             mode = "IE9";
     }
     else if (agentStr.indexOf("Trident/4.0") > -1) {
         if (agentStr.indexOf("MSIE 7.0") > -1)
             mode = "IE8 Compatibility View";
         else
             mode = "IE8";
     }
     else
         mode = "IE7";

     document.title = "Browser Mode:\t" + mode;
     //document.write(navigator.userAgent);

其他内容:stackoverflow.com/questions/11865188/does-the-windows-8-internet-explorer-10-still-have-quirksmode#11865561,其中解释了 2 个 IE10 怪癖模式。与你的情况有关。希望对您有所帮助。

【讨论】:

  • 我很确定他希望网站在兼容性视图中运行。另外,在问题中,他表明他知道如何使用 X-UA-Compatible 标头。
  • 兼容模式与EmulateIE7不同。
  • AFAIK,兼容模式几乎与 EmulateIE7 相同,除了 User-agent 字符串中的一些细节。但是它们都应该与 Quirks 模式无关,因为页面有&lt;!DOCTYPE html&gt;
猜你喜欢
  • 2012-06-05
  • 2012-08-29
  • 1970-01-01
  • 2015-10-20
  • 2011-09-14
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 2012-11-19
相关资源
最近更新 更多