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


71

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

但是,IE中的默认设置使所有Intranet网站都使用“ IE8兼容模式”,即使我已经建议将doctype,meta标签,http标头设置为强制将其进入IE8模式。

我有

<!DOCTYPE HTML PUBLIC“-// W3C // DTD HTML 4.01 Transitional // EN”“ http://www.w3.org/TR/html4/loose.dtd ”>

<meta http-equiv =“ X-UA-Compatible” content =“ IE = 8”>

但是它仍然进入“ IE8兼容模式”,而IE设置没有任何更改。

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

PS。我这里不是在谈论“文档模式”。


尽管有一些答案说了出来,但Codex73指出了一个简单的解决方法:在“工具”->“兼容性设置”中,取消选中“在兼容性视图中显示Intranet站点”框。
尼斯

35
这可能对某些人有用,但这不是丹尼斯所寻找的程序化答案
Peder Rice

1
您如何检测它处于哪种模式?
乔纳森

3
下面是从MSFT一个非常相关的新的博客文章- blogs.msdn.com/b/cjacks/archive/2012/02/29/...
program247365

Answers:


44

似乎MSFT并未考虑大型的Intranet环境,因为我们内部运行着许多不同的Web应用程序。

根据我在MSDN论坛上阅读的内容,无法绕过IE8设置。

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

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


1
嗯...标记为-1的答案。我实际上这是正确的答案,默认情况下IE将Intranet站点显示为IE8兼容模式。您不必更改Codex提及的所有那些选项。只需从“页面”->“兼容性视图设置”对话框中取消选中“在兼容性视图中显示Intranet网站”复选框。是的,非常痛苦,所有用户都必须这样做。愚蠢的想法是将所有网站默认为“兼容”,而不提供覆盖它的方法。(+1不再是-1)
Juan Mendes

X-UA-Compatible标签应该覆盖浏览器原本会使用的模式,不是吗?
Tuukka Mustonen

1
@Tuuka:是的,但是看起来X-UA-Compatible不会覆盖“在Compatibility View中显示Intranet站点”设置。
codeulike 2011年

12
或者,更确切地说,与X-UA兼容的文件将覆盖文档模式,但不会覆盖浏览器模式
类似于

1
我添加了一个MSDN参考,该参考确认了“没有办法绕过IE8设置”的断言
cfs 2013年

35

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

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


22
(澄清:它适用于文档模式,但不适用于浏览器模式)
Codeulike

3
该答案适用于.NET网站,因为询问者没有要求使用.NET解决方案,因此应对其进行编辑以使其与技术无关。
Albireo 2012年

@Albireo:解决此问题的技术独立方法是设置X-UA-Compatible标头。此答案说明了如何使用IIS。对于Apache,点击这里:blogs.msdn.com/b/hanuk/archive/2008/08/28/...
凯西斯皮克曼

当我们谈论Intranet时,也可能要对SharePoint提出警告:最好不要这样做,因为IE9中会破坏各种功能。我的博客包含有关此的更多信息:get-spblog.com/2012/05
alirobe 2012年

1
问题特别是关于浏览器模式,而不是文档模式。X-UA-Compatible对浏览器模式不执行任何操作。答案是绝对不正确的。
Vsevolod Golovanov

11

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

他们来了.....

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

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

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

查看随附的屏幕截图

屏幕截图


我为什么要进行这些调整。请提供或连结为什么安全intranet设置有一个解释加以调整
加斯帕罗恩-詹森

1
这是您为什么的链接:blogs.msdn.com/ie/archive/2008/08/27/… 如果需要,您还可以禁用所有Intranet网站的兼容模式。这是另一个链接:support.microsoft.com/kb/956197
Codex73 2010年

3
禁用Intranet站点的兼容模式可能更适合此解决方案,因为这通常会停止Intranet检测。
尼斯

1
我必须取消选中“包括未在其他区域中列出的所有本地(Intranet)站点”,而尚未选中“自动检测Intranet网络”的事实非常棒(或者换句话说,是可用性的反模式。)建议仅在选择1的情况下适用2,3,4)。
jakub.g 2012年

不要对SharePoint执行此操作!它将破坏各种核心功能。例如,我认为这可能会破坏WebDAV支持和针对GridView的ActiveX控件。它还可能会破坏Windows密码身份验证集成(特别是“记住我的密码”)。您最好在“高级”标签下更改兼容性视图设置。作为更普遍的规则,关闭此功能将破坏您在Intranet中严重需要的各种功能。人们想到了减少身份验证提示之类的基本内容。这是“大锤”解决方案
alirobe 2012年

6

我发现这里的答案很难理解,因此以下是重要信息:

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

这个

兼容性视图与企业

如今,许多行业网站都支持Internet Explorer 7。为了保持兼容性,Internet Explorer 8附带了基于区域评估的智能默认值。在默认状态下,公共Internet上的所有站点均以Internet Explorer 8标准模式显示(“兼容性视图”关闭),所有Intranet网站均以Internet Explorer 7标准模式显示(“兼容性视图”打开)。

让我们看一些例子。如果您导航到本地Intranet上的站点(例如http:// myPortalhttp:// sharepoint / sites / mySite),则 Internet Explorer 8会使用用户代理字符串'7'和版本向量'7'来标识自身,并显示在Internet Explorer 7标准模式下触发标准模式的网页。这种组合允许在Internet Explorer 7中正常工作的网页在IE8中继续这样做。


1
而且,您可以在工具->兼容性设置中轻松禁用此功能。
nedned 2011年

6
@humble coffee,“轻松”设置了非标准X-UA-Compatible标题。在网络上管理本地计算机设置令我感到异常困难。
ANeves认为SE是邪恶的2011年

1
@humblecoffee; las,在封闭的公司环境中,禁止进行此类更改并不容易。
GlennG

4

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

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

4
(澄清:它适用于文档模式,但不适用于浏览器模式)
Codeulike

3

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


1
不幸的是,它不起作用。检查HTTP标头是否具有X-UA-Compatible:IE = 8,但仍进入“ IE8 Compat”模式。
丹尼斯C,2010年

现在,我对您的问题有了更好的了解。浏览器模式只会影响UA字符串,并且在未X-UA-Compatible指定UA时将进入哪种文档模式。因此,我认为虽然可以更改文档模式,但不能更改浏览器模式。这不是问题,因为文档模式会影响页面渲染。您是否有理由更改浏览器模式,也许是出于某些UA字符串嗅探的原因?你让我好奇。如果不打开开发人员工具,您能说出区别吗?
大卫·科拉尔

1
大卫,有些JavaScript在两种模式下的行为不同(并且您永远找不到完整的详细信息列表),某些IE特定功能甚至在实际IE8模式下也被禁用。这就是为什么它们是两种模式,而不是一种。当用户使用相同的浏览器时,希望他们看到并运行相同的浏览器;版本不同,浏览器噩梦不同。
丹尼斯C,2010年

1
我刚刚找到了关于该主题的更多详细信息。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
ANeves认为SE是邪恶的

2

如果您使用的是.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
投票赞成-1,因为这个答案对我来说似乎很有价值,对此没有任何解释。
德博拉

1

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

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


我们正在谈论IE8。
O'Rooney

确实,DOCTYPE声明必须为第一行。javascript include可以放在它的前面,但其他head元素不能在它前面。我投票赞成-1。
德博拉

0

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


2
我相信OP正在询问服务器端解决方案,而不是客户端解决方案。
pinkgothic 2011年


0

这个组合帮了我大忙:

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

至少IE开发人员工具报告了IE9兼容视图,IE8标准

只是为了踢球,我尝试了EmulateIE7,效果也不错。简化扩展的!DOCTYPE是关键。


0

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

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

为友好的URL设置您的DNS服务器-site.com/index,它可以正常工作


0

标记为“正确”的答案在技术上是正确的,但建议没有解决大多数人面临的实际问题的方法:“如何在启用兼容模式的情况下在IE8上正确显示,但Web应用程序不支持兼容模式?”。

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

这在几个工作站上为我工作。

如果上述代码是在应用程序端实现的,则IE8似乎表现为未处于兼容模式,即使它仍将浏览器模式显示为兼容模式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.