【问题标题】:Add IE Edge meta tag after title tag from ASP include在 ASP 的标题标签之后添加 IE Edge 元标签包括
【发布时间】:2024-05-23 09:35:01
【问题描述】:

我在一个 CMS 驱动的网站上有数千个页面在公司网络中呈现不佳,因为 IE 将它们视为 Intranet 页面,而 IE 的默认设置是以兼容模式呈现 Intranet 页面。

我想在标题标签之后插入 IE Edge 元标签以强制浏览器进入其最新版本,但我无法为此编辑每个页面。为了避免编辑单个页面或必须在 CMS 中重新生成页面,我认为我应该能够使用执行此操作的服务器端脚本更新所有页面共有的包含。那可能吗?我认为它需要在服务器端,因为在 onload 时添加元标记不会强制浏览器模式,但也许我错了。

所以我想要这个:

<head>
...some stuff...
<title>My Title</title>
...some other stuff...
<!--#include virtual="/myinclude.asp"-->
</head>

变成这样:

<head>
...some stuff...
<title>My Title</title>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
...some other stuff...
...rendered include...
</head>

有没有办法做到这一点?还是我没有看到的其他解决方法?

【问题讨论】:

    标签: internet-explorer iis asp-classic x-ua-compatible


    【解决方案1】:

    事实证明,您可以使用以下方法将内容添加到标题中:

    <%  Response.AddHeader "CustomHeader","CustomValue" %>
    

    看起来我把它放在页面上的哪个位置都没有关系,所以我可以将它粘贴在公共包含中,并且所有页面都会获得自定义标题。在这种情况下:

    <% Response.AddHeader "X-UA-Compatible","IE=Edge,chrome=1" %>
    

    希望我早点知道这种方式!这是规格:

    http://msdn.microsoft.com/en-us/library/ms524327(v=vs.90).aspx

    【讨论】:

    • 对于未来的读者来说,这样做的原因是 IIS5+ 默认缓冲内容并“修复”发送信息的顺序。在使用过......旧......版本的 IIS 之后,我仍然在想你发送的内容的顺序很重要的日子。如果您关闭缓冲,信息的顺序将再次变得重要。
    • 对于潜伏者:Chrome 标签已于 2014 年第一季度过时/停产blog.chromium.org/2013/06/retiring-chrome-frame.html
    【解决方案2】:

    您可以将 IIS 设置为发送所服务的所有页面的标头。 An MSDN article 将步骤描述为:

    在 IIS7 中配置 EmulateIE7 HTTP 标头(通过用户界面)

    1. 打开 Internet 信息服务 (IIS) 管理器
    2. 从连接窗格中选择服务器
    3. 在中心任务窗格中右键单击“HTTP 响应标头”,然后选择“打开功能”
    4. 从“操作”窗格中选择“添加”
    5. 添加名称为“X-UA-Compatible”且值为“IE=Edge”的自定义标头

    他们也有通过命令行进行更改的步骤。

    IIS Blog 上有一篇文章,其中列出了可能的值以及它们的作用。

    模拟 IE8 模式 --> IE=EmulateIE8 模拟 IE7 模式 --> IE=EmulateIE7 IE5 模式 --> IE=5 IE7 模式 --> IE=7.5 IE8 模式 --> IE=8 边缘模式 --> IE=Edge

    【讨论】:

    • 好的,这是有道理的,尽管我没有访问 IIS 的权限,并且必须发送请求以查看是否可以完成。还有一些 Intranet 页面正在提供服务,以及我不一定想更改的旧页面。没有其他方法可以从包含中强制它,我实际上可以自己做吗?
    • @Kfunk 没有在 IIS 上设置标题,没有简单的方法可以更改所有页面,除非所有页面的标题中已经有一个公共包含(这听起来不像原始问题)。可能有一些具有可比性模式的快乐媒介,它允许 CMS 正常运行,而不会对服务器的其他部分产生不利影响 - 这就是我包含更大选项列表的部分原因。
    • 在我想要影响的所有页面中,is 包含在头部中,就像在我的简短示例中一样。我的理解是 UA 元标记必须直接出现在标题之后,但是才能正常工作,这就是问题所在。就像在这个答案中一样:*.com/a/9624500/2839314。没有像这个 PHP 答案一样的服务器端脚本吗? *.com/a/10077921/2839314
    • @Kfunk 有一种方法可以发送自定义标头,但如果我没记错的话,它必须在您将 any HTML 发送到浏览器之前发送。
    • 感谢您的想法 - 您给我的信息很有帮助。如果我不是菜鸟,我会给你打勾。最终,这使我找到了适合我情况的正确解决方案(请参阅我的答案),使用Response.AddHeader