ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

我有

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

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

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

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

G
Glorfindel

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

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

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

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


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

可以覆盖 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 对浏览器模式没有任何作用。答案是绝对不正确的。
A
Adaline Simonian

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

他们来了.....

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

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

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

请参阅随附的屏幕截图

https://i.stack.imgur.com/U0gnD.png


我为什么要进行这些调整。请提供或链接到为什么必须调整安全 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 中认真想要的各种功能。我想到了减少身份验证提示等基本内容。这是一个“大锤”解决方案
G
Glorfindel

我发现这里的答案很难理解,所以简而言之,这里是重要信息:

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

this

兼容性视图和企业 如今,大量的业务线网站都支持 Internet Explorer 7。为了保持兼容性,Internet Explorer 8 附带了基于区域评估的智能默认值。在默认状态下,公共 Internet 上的所有站点都以 Internet Explorer 8 标准模式(兼容性视图关闭)显示,所有 Intranet 网站都以 Internet Explorer 7 标准模式(兼容性视图打开)显示。让我们看一些例子。如果您导航到本地 Intranet 上的站点,例如 http://myPortal 和 http://sharepoint/sites/mySite,Internet Explorer 8 会使用用户代理字符串“7”、版本向量“7”来标识自己,并显示在 Internet Explorer 7 标准模式中触发标准模式的网页。这种组合允许在 Internet Explorer 7 中正常运行的网页在 IE8 中继续运行。


您可以在工具 -> 兼容性设置中轻松禁用它。
@humble coffee,“很容易”设置了一个非标准的 X-UA-Compatible 标头。在网络上管理本地机器设置让我觉得这是一项艰巨的任务。
@humblecoffee;唉,在一个封闭的公司环境中,这样的改变是被禁止的,这并不容易。
C
Craig A

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

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

(澄清:它适用于文档模式,但不适用于浏览器模式)
D
David Kolar

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


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

如果您使用的是 .NET,我可以为您解答:

HTML:

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

网络配置:

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

投了-1,因为这个答案对我来说似乎很有价值,并且没有任何解释。
b
brunosp86

在某处读到 DOCTYPE 声明必须是第一行。没有任何评论,也没有空行。

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


不过,我们正在谈论 IE8。
确实 DOCTYPE 声明必须是第一行。 javascript 包含可以放在它前面,但不能放在其他头部元素。我投了-1票。
Y
Yurok

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


我相信 OP 是在询问服务器端解决方案,而不是客户端解决方案。
D
Deborah

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

<!DOCTYPE html>

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


这个 HTML header 应该是 HTML5 的 magicheader。我猜IE8不支持哪个?任何人都可以确认吗?
这个文档类型在 ie8 中可以工作,尽管 HTML5 特性不能。这是一个很好的链接:ejohn.org/blog/html5-doctype/#postcomment
R
Ray Brockman

这个组合对我有用:

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

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

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


Z
ZOXEXIVO

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

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

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


M
Magnilex

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

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

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

如果上面的代码是在应用程序端实现的,IE8 的行为就好像它不是在兼容模式下一样,尽管它仍然会将浏览器模式显示为兼容模式。