我已经在Intranet网站上工作超过6个月我使用下面的html5 doctype
和边缘兼容性元标记来强制Internet Explorer不能模拟旧的浏览器版本,这已经运行正常 .
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>My title</title>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
</head>
<body>
</body>
</html>
我这样做的原因是因为我工作的地方使用策略设置来启用所有Intranet站点的兼容性视图,并且使用 EDGE
设置的这种方法在Internet Explorer 9中有效 .
一个多月前,我升级到Internet Explorer 11,该网站仍按预期工作 .
今天这已停止按预期工作,我不能肯定地说,但我认为强制兼容性视图的策略未在IE11中启用,现在它已经......并且由于已启用此功能,因此不再使用兼容性元标记做了预期的事情,这个站点正在模拟IE8的企业模式下运行 .
有没有人知道如何解决这个问题并在强制执行兼容性“企业模式”时强制IE11在Intranet站点上使用?并且无法通过浏览器设置禁用?
EDIT
我刚刚尝试在我的web.config中添加自定义标头,如本答案所述https://stackoverflow.com/a/18257208/98706
这对我不起作用我仍然在开发人员工具栏控制台中收到以下消息
HTML1122: Internet Explorer is running in Enterprise Mode emulating IE8.
在IE11中启用此Intranet兼容性设置时,就好像将版本8视为 edge
.
这篇文章:https://www.leapinggorilla.com/Blog/Read/1016/ie-ate-my-css---disabling-compatability-mode解释得很好,我还没有尝试通过代码设置此 Headers ,我们的用户无权更改其浏览器设置..其他任何更改都没有工作 .
UPDATE
请参阅我对此帖子的评论,了解企业模式和兼容模式之间的区别,因为它很重要 .
10 回答
确保:
<meta http-equiv="X-UA-Compatible" content="IE=edge">
是您网页上的第一个
<meta>
标记,否则IE可能不尊重它 .或者,问题可能是IE正在为此网站使用企业模式:
您的问题提到控制台显示:
HTML1122: Internet Explorer is running in Enterprise Mode emulating IE8.
如果是这样,您可能需要disable enterprise mode(或like this)或从IE的“工具”菜单中关闭该网站 .
但理论上,企业模式应该被X-UA-Compatible标签覆盖,但IE可能有一个错误......
此问题通常是由网站/内部网URL放置在以下之一:
Compatibility Mode List
Internet Explorer Intranet Zone
(启用兼容性视图设置中的显示Intranet站点)
Enterprise Mode List
在公司网络上,这些兼容性视图设置通常通过组策略进行集中控制 . 在您的情况下,企业模式似乎是罪魁祸首 .
不幸的是设置META
X-UA-Compatible
will not override 这个 .对于最终用户
有时,最终用户覆盖此选项的唯一方法是按F12并更改“仿真”选项卡下的“文档模式” . 但是,此设置不是永久性的,并且可能会在Developer Tools关闭后恢复 .
您还可以尝试从Intranet区域中排除您的站点 . 但是,属于Intranet区域的域列表通常也受组策略的控制,因此这种工作的可能性很小 .
要查看属于Intranet区域的域列表,请转到:
工具 - > Internet选项 - >安全 - >站点 - >高级
如果列表包含您的子域并且显示为灰色,那么在您的网络管理员允许之前,您将无法覆盖兼容性视图 .
您确实需要与网络管理员联系,以允许更改组策略中的兼容性视图设置 .
对于网络管理员
在打开开发人员工具(F12)的情况下加载网站通常会报告IE切换到较旧模式的原因 .
上面提到的所有3个设置通常都是通过组策略控制的,但有时可以在用户计算机上覆盖 .
如果企业模式是问题(如原始海报的情况),以下两篇文章可能会有所帮助:
How to Enable and Use Internet Explorer 11’s Enterprise Mode [HowToGeek]
Turn on Enterprise Mode and use a site list [TechNet]
对于那些正在构建ASP.NET MVC项目的人,请确保添加:
标记到您的布局(模板)页面 . 我只花了两个小时调试和调整,只是意识到我只在我的子页面中添加了这个元标记 . 只要我将其添加到我的布局页面,浏览器就会加载到EDGE中模式完美 .
这是一个有一些好信息的老问题 . 但我刚刚发现,使用FQDN会关闭IE 9-11中的Compat模式 . 例如 . 我有compat问题
http://lrmstst01:8080/JavaWeb/login.do
但问题随之消失
http://lrmstst01.mydomain.int:8080/JavaWeb/login.do
注意:.int是我们内部域的一部分
明确的答案是正确的答案 . 但是,Pricey,您应该对您的AD和桌面管理员组进行跟进 . 他们滥用IE11企业模式站点列表 . Microsoft并不打算将其用于组织内的所有Intranet站点 . 这将传播现有的“以兼容模式呈现所有内部网站点”设置,这是全世界企业网站进步的祸根 .
它意味着实现为“黑名单”,其中少数几个站点实际上需要在企业模式列表中列出的旧浏览器模式,并指定其渲染要求 . 然后,组织中的所有其他站点都将被释放以使用Edge . 组织中包含所有内联网站点的人员已经完全误解了企业模式的实施方式 .
这个问题有点陈旧,但我刚刚解决了一个非常类似的问题 . 我们这里有几个内部网站点,包括我负责的站点,其他站点需要兼容模式或者它们会中断 . 因此,站点规则默认IE为Intranet站点上的兼容模式 . 我正在升级我自己的东西,不再需要它;事实上,我试图使用的一些功能在compat模式下看起来并不正确 . 我正在使用meta IE-Edge标签 .
IE假设没有完全合格地址的网站是内联网,并采取相应行动 . 考虑到这一点,我只是将IIS中的绑定更改为仅侦听完全限定的地址,然后设置一个侦听不合格地址的虚拟网站 . 第二个将所有流量重定向到完全限定的地址,使IE认为它是一个外部站点 . 无论是否选中Intranet站点上的兼容模式框,该站点都可以正确呈现 .
通过将其添加到“受信任的站点”列表或本地设置,将其移动到“受信任的站点”区域 . 这会将其移出Intranet区域,并且不会在Compat中呈现 . 视图 .
将以下属性添加到IIS站点的web.config文件中 . 这在我的IE11内联网上对我有用 .
我通过将用户重定向到托管Intranet的服务器的FQDN来解决了这个问题 .
IE可能使用世界上最差的算法来检测“内部网”站点......事实上,指定server.domain.tld可以解决我的问题 .
是的,您正确读取,IE检测到内部网站不是通过私有IP地址,就像任何听说过TCP / IP的开发者所做的那样,不是,通过URL的“主机”部分,如果它没有域部分,必须是内部的 .
可怕知道IE开发人员不了解最基本的TCP / IP概念 .
请注意,这是在一个大企业客户,让他们为你改变GPO就像试图将阿尔卑斯山东移4米,不会发生 .
对于它的 Value ,我在IE11中也有这个问题:
我在企业模式下是 not .
"Display intranet sites in Compatibility View"已经过检查 .
我在问题中提到了所有
<!DOCTYPE html>
和IE=Edge
设置元 Headers 确实是
<head>
元素中的第一个元素过了一会儿,我发现:
发送到服务器的用户代理头是IE7 but ...
的JavaScript值是IE11!
HTTP Header :
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E)
但是JavaScript :
window.navigator.userAgent === 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko'
所以我最终在客户端进行了检查 .
同时,BTW不再推荐检查用户代理 . 见https://developer.mozilla.org/en-US/docs/Web/HTTP/Browser_detection_using_the_user_agent(但可能有一个好的案例)