为特定页面和框架覆盖 web.config 中的 X-UA-Compatible 设置
Posted
技术标签:
【中文标题】为特定页面和框架覆盖 web.config 中的 X-UA-Compatible 设置【英文标题】:Override X-UA-Compatible setting in web.config for specific pages and frames 【发布时间】:2014-09-17 21:34:52 【问题描述】:我有一个 .Net Web 应用程序,其中包含一个 web.config 设置以强制 Internet Explorer 关闭兼容模式并使用可用的最新版本的 IE:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-UA-Compatible" value="IE=Edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
但是,此应用程序包含需要兼容模式的旧版页面。在我的测试中,只有将X-UA-Compatible
设置为IE=5
时才会正常显示。
有没有办法覆盖单个页面的 web.config 设置?
在我尝试过的许多没有奏效的事情中:
在页面本身包含<meta http-equiv="X-UA-Compatible" content="IE=5" />
,作为<head>
之后的第一个标签
将X-UA-Compatible:IE=5
添加到响应标头中。不幸的是,它还发送了X-UA-Compatible:IE=Edge
标头,并且那个“获胜”。
更改<!DOCTYPE >
。我尝试了所有不同的选项。
在 DOCTYPE 前添加注释
重写页面以符合标准。这显然是最好的解决方案,但所涉及的页面是一个复杂的地图应用程序,并且重新编写需要几个月的时间。
更新 当我称其为“复杂的地图应用程序”时,我应该说是“框架和表格的老鼠窝”。事实证明,框架部分与解决方案有关。
【问题讨论】:
您是否尝试过先删除现有的 X-UA-Compatible 标头,然后再从标头集合中添加第二个标头?您是否也尝试过完全删除文档类型? 我已经尝试了这两个建议,但是您清除标题的建议促使我在所有帧上尝试相同的事情,所以谢谢! 【参考方案1】:我终于解决了这个问题,方法是将此代码放入作为该页面框架集一部分的每个页面的 Page_Load() 中(总共大约十几个页面)。
Response.ClearHeaders();
Response.AddHeader("X-UA-Compatible", "IE=5");
我一直假设框架集页面会从主页继承设置,但显然不是。只是把它放在主页上是行不通的,我不得不把它放在每个页面/框架上。
【讨论】:
【参考方案2】:您可以尝试使用位置标签...
<location path="YourPage.aspx">
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-UA-Compatible" value="IE=5" />
</customHeaders>
</httpProtocol>
</system.webServer>
</location>
【讨论】:
我试过这个,但我想不出一个语法也可以让我将 设置为网站其余部分的默认设置。如何同时包含两者?以上是关于为特定页面和框架覆盖 web.config 中的 X-UA-Compatible 设置的主要内容,如果未能解决你的问题,请参考以下文章
如何返回任何未指向IIS web.config中任何文件的Web请求的特定页面?