在 Intranet 中强制使用“Internet Explorer 8”浏览器模式

Posted

技术标签:

【中文标题】在 Intranet 中强制使用“Internet Explorer 8”浏览器模式【英文标题】:Force "Internet Explorer 8" browser mode in intranet 【发布时间】:2011-02-14 03:09:18 【问题描述】:

IE8中有“Internet Explorer 8”、“Internet Explorer 8兼容模式”、IE7模式。

然而,IE 中的默认设置使所有内网网站都使用“IE8 兼容模式”,即使我已按照建议设置了 doctype、元标记、http 标头以强制其进入 IE8 模式。

我有

渡//EN" "http://www.w3.org/TR/html4/loose.dtd">

但它仍然进入“IE8兼容模式”,IE设置没有任何变化。

如何在不改变任何浏览器设置的情况下强制进入纯“IE8”模式?

PS。我不是在说“文档模式”。

【问题讨论】:

尽管有些答案说了什么,但正如 Codex73 指出的那样,有一个简单的解决方法:在工具 -> 兼容性设置中,取消选中“在兼容性视图中显示 Intranet 站点”框。 这可能对某些人有用,但这不是丹尼斯正在寻找的程序化答案 你如何检测它处于哪种模式? 这是来自 MSFT 的一篇非常相关的新博客文章 - blogs.msdn.com/b/cjacks/archive/2012/02/29/… 【参考方案1】:

似乎 MSFT 没有考虑一个大型 Intranet 环境,我们在其中运行许多不同的 Web 应用程序。

根据我在 MSDN 论坛上读到的某处,无法绕过 IE8 设置。

因此,我将不得不请求我的系统管理员设置一些新的组策略来更改“兼容性视图”设置和值并阻止用户更改值,直到 MSFT 发现这个错误并修复它。

来自MSDN blog post(强调他们的):“在 IE 请求网页内容之前选择浏览器模式。这意味着网站无法选择浏览器模式。”

【讨论】:

嗯... -1 标记为答案。我实际上这是正确的答案,默认情况下 IE 将 Intranet 站点显示为 IE8 兼容模式。不过,您不必更改 Codex 提到的所有这些选项。只需从页面->兼容性视图设置对话框中取消选中“在兼容性视图中显示 Intranet 站点”框。是的,一个很大的痛苦,所有的用户都必须这样做。将所有网站默认为兼容性并且不提供覆盖它的方法的愚蠢想法。 (+1 所以它不再是 -1) X-UA-Compatible 标签应该覆盖浏览器会使用的模式,不是吗? @Tuuka:是的,但看起来 X-UA-Compatible 不会覆盖“在兼容性视图中显示 Intranet 站点”设置。 或者,更准确地说,X-UA-Compatible 会覆盖文档模式而不是浏览器模式 我添加了一个 MSDN 参考,确认了“无法绕过 IE8 设置”的断言【参考方案2】:

可以覆盖 Intranet 中的兼容模式。只需将以下代码添加到 web.config。使用 IE9 为我工作。

<system.webServer>
<httpProtocol>
  <customHeaders>
    <clear />
    <add name="X-UA-Compatible" value="IE=edge" />
  </customHeaders>
</httpProtocol>

【讨论】:

(澄清:它适用于文档模式,但不适用于浏览器模式) 此答案适用于 .NET 网站,因为提问者并未要求提供 .NET 解决方案,因此应将其编辑为独立于技术。 @Albireo:解决此问题的独立于技术的方法是设置 X-UA-Compatible 标头。这个答案显示了 IIS 的方法。对于 apache,请在此处查看:blogs.msdn.com/b/hanuk/archive/2008/08/28/… 当我们谈论 Intranet 时,不妨对 SharePoint 提出警告:最好不要这样做,因为各种功能会在 IE9 中中断。我的博客包含更多信息:get-spblog.com/2012/05 这个问题专门针对浏览器模式,而不是文档模式。 X-UA-Compatible 对浏览器模式没有任何作用。答案是绝对错误的。【参考方案3】:

您必须对 IE 进行一些调整。

他们在这里.....

在 Internet 选项/本地 Intranet/站点中

在:站点内的本地 Intranet 下,取消选中“自动检测 Intranet 网络”。

然后只选择“包括所有网络路径(UNC)

查看附件截图

【讨论】:

我为什么要进行这些调整。请提供或链接到为什么必须调整安全 Intranet 设置的说明 这是您的链接:blogs.msdn.com/ie/archive/2008/08/27/… 如果需要,您还可以禁用所有 Intranet 站点的兼容模式。这是另一个链接:support.microsoft.com/kb/956197 禁用 Intranet 站点的兼容模式可能更适合此解决方案,因为这通常只会停止 Intranet 检测。 我必须取消选中“包括未在其他区域中列出的所有本地(Intranet)站点”,而“自动检测 Intranet 网络”已经取消选中,这太棒了(或者,换句话说, 可用性的反模式。视觉外观表明 2,3,4 仅在选择 1 时适用)。 不要对 SharePoint 执行此操作!它将破坏各种核心功能。例如,我认为它可能会破坏 WebDAV 支持和 gridview 的 ActiveX 控件。它还可能破坏 Windows 密码身份验证集成(特别是“记住我的密码”)。您最好更改“高级”选项卡下的兼容性视图设置。作为更一般的规则,关闭此功能会破坏您在 Intranet 中认真想要的各种功能。我想到了减少身份验证提示等基本内容。这是一个“大锤”解决方案【参考方案4】:

我发现这里的答案很难理解,因此简而言之,重要信息如下:

如果您的 Intranet 使用 IE 的默认设置,则无论任何网站设置如何,都会对 Intranet 站点强制执行 IE7 标准模式。

来自this:

兼容性视图和企业

大量的业务线 网站是 Internet Explorer 7 今天有能力。为了保存 兼容性,Internet Explorer 8 附带基于智能默认值 区评价。在默认状态下, 公共互联网上的所有网站 在 Internet Explorer 8 中显示 标准模式(兼容性视图 关闭)和所有 Intranet 网站 在 Internet Explorer 7 中显示 标准模式(兼容性视图 开)。

让我们看一些例子。如果你 导航到您当地的网站 内部网如 http://myPortal 和 http://sharepoint/sites/mySite, Internet Explorer 8 使用用户代理字符串标识自己 ‘7’,‘7’的版本向量,以及 显示触发的网页 Internet Explorer 7 中的标准模式 标准模式。这个组合 允许正常工作的网页 在 Internet Explorer 7 中继续 在 IE8 中这样做。

【讨论】:

您可以在工具 -> 兼容性设置中轻松禁用此功能。 @humble 咖啡,“轻松”设置了一个非标准的 X-UA-Compatible 标头。在网络上管理本地机器设置让我觉得这是一项艰巨的任务。 @humblecoffee;唉,在一个封闭的企业环境中,这样的改变是被禁止的,这并不容易。【参考方案5】:

要覆盖 Intranet 或所有网站的兼容性视图设置,您需要让 IE8 模拟自己。

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

【讨论】:

(澄清:它适用于文档模式,但不适用于浏览器模式)【参考方案6】:

设置自定义 HTTP 标头,而不是在 &lt;head&gt; 部分中使用 &lt;meta...。这些应该是等效的,但我已经看到来自服务器的 X-UA-Compatible HTTP 标头将覆盖 IE 8 的“在兼容性视图中显示 Intranet 站点”设置,而 &lt;meta... 元素不会。

【讨论】:

不幸的是,它不起作用。检查 HTTP 标头有 X-UA-Compatible: IE=8,但它仍然进入“IE8 Compat”模式。 我现在对你的问题有了更好的理解。浏览器模式只会影响 UA 字符串以及在未指定 X-UA-Compatible 时最终会进入的文档模式。因此,虽然可以更改文档模式,但我认为不能更改浏览器模式。这不被视为一个问题,因为它是影响页面呈现的文档模式。您是否有理由需要更改浏览器模式,也许是为了某些 UA 字符串嗅探?你让我很好奇。在没有打开开发者工具的情况下你能分辨出来吗? David,一些 javascript 在两种模式下的行为并不相同(而且你永远无法找到完整的详细列表),某些 IE 特定功能甚至在真正的 IE8 模式下被禁用。这就是为什么它们是两种模式,而不是一种。当用户使用相同的浏览器时,我希望他们看到并运行相同的浏览器;不同的版本,不同的浏览器噩梦。 我刚刚找到了有关该主题的更多详细信息。 blogs.msdn.com/b/ie/archive/2008/04/10/… 另外,meta 版本不是有效的 HTML5;甚至 MS 也建议像 @David Kolar 建议的那样使用 HTTP 标头:msdn.microsoft.com/en-us/library/cc288325%28v=vs.85%29.aspx【参考方案7】:

如果您使用的是 .NET,我有答案:

HTML

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=8" >

Web.Config:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="X-UA-Compatible" value="IE=8" />
      </customHeaders>
    </httpProtocol>

【讨论】:

投了 -1 票,因为这个答案对我来说似乎很有价值,并且没有任何解释。【参考方案8】:

在某处读到 DOCTYPE 声明必须是第一行。没有任何类型的 cmets,也没有空行。

结合设置 HTTP 响应标头,这对我有用。 Browser Mode 从“IE9 兼容模式”变成了“IE9 模式”。

【讨论】:

我们正在讨论 IE8。 确实DOCTYPE声明必须是第一行。 javascript 包含可以放在它前面,但不能放在其他头部元素。我投了-1票。【参考方案9】:

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation IntranetCompatibilityMode 1-->0

【讨论】:

我相信 OP 询问的是服务器端解决方案,而不是客户端解决方案。【参考方案10】:

为了使 META 声明起作用,文档类型必须是简化版本:

<!DOCTYPE html>

不是丹尼斯问题中较长的陈述。

【讨论】:

这个 HTML header 应该是 HTML5 的 magicheader。我猜IE8不支持哪个?谁能确认一下? 这个文档类型在 ie8 中可以工作,尽管 HTML5 特性不能。这是一个很好的链接:ejohn.org/blog/html5-doctype/#postcomment【参考方案11】:

这个组合对我有用:

<!DOCTYPE HTML>
<HEAD>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" >
</HEAD>

至少 IE 开发者工具报告 IE9 Compat View,IE8 标准

只是为了好玩,我尝试了 EmulateIE7,效果也很好。 简化扩展的 !DOCTYPE 是关键。

【讨论】:

【参考方案12】:

您需要从您的域名站点名称中删除端口号 网站:1180/index/

如果浏览器在 url 中看到端口号 - hi "think",那就是 Intranet。

为友好的 url 设置您的 dns 服务器 - site.com/index 并且可以正常工作

【讨论】:

【参考方案13】:

标记为“正确”的答案在技术上是正确的,但表明大多数人面临的真正问题是没有解决方案:“我如何在 IE8 上正确显示,启用兼容模式,一个 Web 应用程序不支持兼容模式?”。

<!DOCTYPE HTML>
<HEAD>
    <meta http-equiv="X-UA-Compatible" content="Edge" >
</HEAD>

这在几个工作站上对我有用。

如果上面的代码是在应用程序端实现的,IE8 的行为就好像它没有处于兼容模式,即使它仍然会将浏览器模式显示为兼容模式。

【讨论】:

以上是关于在 Intranet 中强制使用“Internet Explorer 8”浏览器模式的主要内容,如果未能解决你的问题,请参考以下文章

Internet Explorer 将 Meteor.js 应用程序识别为 Intranet 站点。不会加载

从 Internet 服务器(公共)调用 Intranet(私有)服务器上的 .php 页面

让 IIS 在 Intranet 环境中模拟 Windows 用户到 SQL Server

强制关闭 IE 的兼容模式

使用 JQuery 在 Internet Explorer 中进行 CORS 身份验证

如何在 ASP.NET MVC 3 Intranet 应用程序中重新验证用户身份?