【问题标题】:How can I detect if IE8 is running in compatibility view?如何检测 IE8 是否在兼容性视图中运行?
【发布时间】:2009-07-30 19:34:49
【问题描述】:

是否有办法确定 IE8 浏览器是否打开了兼容性视图?

我似乎在 Google 上找不到任何东西,所以我想知道这是否是可用的信息...

你为什么这么问!?我正在尝试追踪我们应用程序中的错误。我正在浏览 Elmah 原木,似乎有一种趋势;此错误通常由 IE8 引发。我试图在我的 IE8 副本中回购缺陷,但不能。我想缩小罪魁祸首,并认为这可能是一种方法。

【问题讨论】:

  • 你能详细说明为什么你需要知道吗?

标签: debugging internet-explorer browser internet-explorer-8


【解决方案1】:

在 Javascript 中,使用 document.documentMode

详情请见http://msdn.microsoft.com/en-us/library/cc196988%28VS.85%29.aspx

【讨论】:

  • 如果页面处于 Quirks 模式,这将无济于事
  • 我用过这个,它奏效了。 if(document.documentMode && document.documentMode
  • @Zafer - 我用过它,它很完美。谢谢,谢谢@alohci
【解决方案2】:

显然 IE8 有一些新特性

document.documentMode

document.compatMode

http://msdn.microsoft.com/en-us/library/cc196988(VS.85).aspx

【讨论】:

  • compatMode 是一个遗留属性,在这里不是很有用。它会告诉您页面是否处于怪癖模式。
【解决方案3】:

在 userAgent 中检查“Trident/4.0”。它应该只存在于 IE-8 中。 http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/33e0ed49-11fb-4d91-857c-a35496e90075

【讨论】:

  • 另外,如果是 IE 9,请检查 Trident/5.0。
【解决方案4】:

我正在使用:

try{ JSON } catch (e){ alert("Compatibility Mode Detected")  }

JSON 对象是在 IE 8 中定义的,因此在 IE 7 中或在 Compatibility Mode 中时会抛出并捕获错误。

我喜欢这样每次都有效,而且是一行。

【讨论】:

  • 是的,这是 Javascript。直到今天我仍然用它来踢出使用 ie7 的人。
【解决方案5】:

要扩展@Tommy 的答案,请使用特征检测(当然,警报是可选的,我在某处使用了漂亮的 div 或内联消息):

if(typeof document.documentMode !== 'undefined') { // checks if this is IE 8 or >
         if(document.documentMode < 8) {  // check if in compat mode 
             // add code here to inform user that they need to turn off compatiblity view
             alert("Click ALT-T then compat view etc...");  
         }
} 

【讨论】:

    【解决方案6】:

    我相信它包含在用户代理字符串中:

    “用户代理字符串中的新标签允许检测在兼容性视图中查看您网站的客户端。此标签也存在于“正常”Internet Explorer 8 用户代理字符串中。”

    “如果用户为您的网站选择兼容性视图,您可以通过使用版本定位标签/HTTP 标头将他们“带回”到您想要的布局模式。新的内容值,'IE=EmulateIE8' ,完善了支持的值列表,并在此特定场景中提供帮助。”

    更多信息在这里:http://blogs.msdn.com/ie/archive/2008/08/27/introducing-compatibility-view.aspx

    【讨论】:

    【解决方案7】:

    在 MVC/ASP 中,Request.Browser.Version 在兼容性视图中返回“7.0”而不考虑版本,否则返回浏览器版本。

    您也可以使用 Request.Browser.Browser 来检查它是否是 IE

    Request.Browser.Version
    Request.Browser.Browser
    

    【讨论】:

      【解决方案8】:

      很简单的方法——按F12,打开开发者工具栏。在菜单之后,您将看到浏览器模式。这将清楚地表明它处于 IE8 模式或 IE7 兼容模式。

      【讨论】:

      • 可能是您无权访问正在查看页面的机器。
      【解决方案9】:
      if(preg_match('/(?i)msie/', $_SERVER['HTTP_USER_AGENT'])) {
      if(preg_match('/(?i)Trident\/5/', $_SERVER['HTTP_USER_AGENT'])) {
          echo "IE9";
      }
      elseif(preg_match('/(?i)Trident\/4/', $_SERVER['HTTP_USER_AGENT'])) {
          echo "IE8";
      }
      elseif(!preg_match('/(?i)Trident\/4/', $_SERVER['HTTP_USER_AGENT']) AND preg_match('/(?i)msie 7/', $_SERVER['HTTP_USER_AGENT'])) {
          echo "IE7";
      }
      elseif(preg_match('/(?i)msie [1-6]/', $_SERVER['HTTP_USER_AGENT'])) {
          echo "IE1 à IE6";
      }}
      

      【讨论】:

      • 它的PHP,它使用正则表达式来比较服务器端的用户代理。
      猜你喜欢
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      相关资源
      最近更新 更多