为特定页面和框架覆盖 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 设置?

在我尝试过的许多没有奏效的事情中:

在页面本身包含&lt;meta http-equiv="X-UA-Compatible" content="IE=5" /&gt;,作为&lt;head&gt;之后的第一个标签 将X-UA-Compatible:IE=5 添加到响应标头中。不幸的是,它还发送了X-UA-Compatible:IE=Edge 标头,并且那个“获胜”。 更改&lt;!DOCTYPE &gt;。我尝试了所有不同的选项。 在 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 设置的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 页面特定配置

如何返回任何未指向IIS web.config中任何文件的Web请求的特定页面?

如何将特定页面限制为证书身份验证?

asp.net 使用了框架 web.config 如何设置 session

asp.net web.config的设置问题

web.config 覆盖 app.config ...为啥?