【问题标题】:Setting X-UA-Compatible meta tag in ASP.NET 4.0 site doesn't work在 ASP.NET 4.0 站点中设置 X-UA 兼容元标记不起作用
【发布时间】:2010-07-30 01:47:39
【问题描述】:

据我了解,您可以告诉 IE8(我假设是更高版本)如何最好地呈现您的页面。

这很有用,因为该页面可能是为 IE7、quirks 模式或针对 IE8 标准模式而设计的。正如我所拥有的,IE8 在遇到页面时的默认行为是以 IE8 标准模式呈现(虽然不确定它如何解释 DOCTYPE)。使用此默认设置,用户可以通过单击刷新按钮旁边的“兼容性视图”按钮来更改呈现模式。

这很好地给了用户一些控制权,但是当你知道你的网站只能用 IE7 或其他什么方式呈现时就不好了。在这种情况下,您不想让用户做出错误的选择,这就是网站告诉 >= IE8 浏览器如何呈现页面的能力非常有用的地方。

您只需在 head 标签内提供 X-UA-Compatible 元标签。网上有很多关于如何做到这一点以及可以使用哪些值的参考资料。记得把它设为第一个。

<html xmlns="http://www.w3.org/1999/xhtml">
  <head  id="Head1" runat="server">
    <meta http-equiv="X-UA-Compatible" content="IE=7" />

好的,到目前为止,这并不是什么新鲜事 - 但是它不适用于我的 ASP.NET 项目?我已经在我拥有的其他几个项目上进行了尝试,并且遇到了同样的问题。

是否存在这样一种情况,因为我正在使用 Visual Studio 等开发人员工具,IE 已配置为始终显示“兼容性视图”按钮以进行调试?我知道在这里抓稻草。

【问题讨论】:

    标签: asp.net-4.0 ie8-compatibility-mode


    【解决方案1】:

    我发现了为什么会这样。

    似乎 ASP.NET 的主题正在干扰。查看渲染输出时,主题中的样式表有一个动态插入的标签(每个标签一个)。

    ASP.NET 主题引擎将这些项目插入到 X-UA-Compatible 元标记之上,从而打破了 IE 将其作为 head 元素中的第一个标记的预期。

    所以是一个 ASP.NET 网站,在源代码中有主题和以下内容:

    <html xmlns="http://www.w3.org/1999/xhtml"> 
      <head  id="Head1" runat="server"> 
        <meta http-equiv="X-UA-Compatible" content="IE=7" />
    

    将呈现如下:

    <html xmlns="http://www.w3.org/1999/xhtml"> 
      <head id="ctl00_Head1"> 
        <link href="App_Themes/White/Default.css" type="text/css" rel="stylesheet" />
        <meta http-equiv="X-UA-Compatible" content="IE=7" />
    

    这似乎有点错误。我将为它创建一个 MS Connect 问题。

    【讨论】:

    • 这是 MS Connect 问题链接:connect.microsoft.com/VisualStudio/feedback/details/581278 如果您同意,请投票。
    • 三年后,一个全新的 Visual Studio 版本,这个可怕的错误仍然存​​在,导致我们的 CSS 问题(在 IE8 中)。微软决定不修复它。令人震惊。
    【解决方案2】:

    here 有一个有趣的解决方法。我将包括要点以使其更容易:

    “styleSheetTheme”设置总是将其 CSS 文件放在标题中 排在首位。移动“X-UA-Compatible”之前 它,您必须执行以下操作:

    1. 通过为元标记提供 ID 并添加“runat”属性,使元标记可从服务器代码访问: ...
    2. 将以下预呈现事件处理程序添加到您的页面(或母版页):
    protected void Page_PreRender(object sender, EventArgs e)
    {
        Control MyFirstCtrl = Page.Header.FindControl("FirstCtrlID");
        Page.Header.Controls.Remove(MyFirstCtrl);
        Page.Header.Controls.AddAt(0, MyFirstCtrl);
    }
    

    您可以通过这种方式在标题中移动任何内容 您在其中明确定义。

    【讨论】:

      猜你喜欢
      • 2012-09-01
      • 2011-10-08
      • 2012-05-27
      • 2012-06-27
      • 2015-02-18
      • 2017-11-01
      • 2012-06-01
      • 2014-09-14
      • 1970-01-01
      相关资源
      最近更新 更多