【问题标题】:Adding <meta http-equiv="X-UA-Compatible" content="IE=9" /> using javascript使用 javascript 添加 <meta http-equiv="X-UA-Compatible" content="IE=9" />
【发布时间】:2013-11-09 06:59:33
【问题描述】:

我在使用 IE 10 时遇到了一个奇怪的问题。许多 jQuery 脚本在 IE 8、9、Chrome、firefox 和 safari 上运行良好,但在 IE 10 上出现问题。只有当一些用户切换到 IE 10 时,问题才会出现。

我发现添加的最简单的解决方案

<meta http-equiv="X-UA-Compatible" content="IE=9" /> 

在&lt;head&gt;&lt;/head&gt;.

问题是网站有很多页面,大多数页面没有继承母版页。 那么有什么办法可以通过javascript添加这个,因为我们在所有网页中都有一个共同引用的js。

【问题讨论】:

  • meta 可以很方便的添加到head,但是没用,只有在页面加载的时候才有影响。
  • 同上,JS帮不了你。您最好的选择是在 IIS 中的服务器上设置 Http 标头。
  • @Teemu,这个问题实际上已经解决了,因为页面是在 IE 9 模式下呈现的,如果它的 IE 9 或 10,则客户端的 IE 版本较低。
  • @jfrej,我同意,但这可以在虚拟目录级别完成吗?因为 IIS 上有多个网站,我不想玩他们的设置

标签: javascript asp.net browser


【解决方案1】:

JavaScript 在页面加载后运行,这意味着之后您将无法修改从服务器到客户端的元响应。如果没有通用标头,则使用 IE 10 可能更容易解决问题

【讨论】:

    【解决方案2】:
    var m = document.createElement("meta");
    m.setAttribute("http-equiv", "X-UA-Compatible");
    m.setAttribute("content", "IE=9");
    document.getElementsByTagName("head")[0].appendChild(m);
    

    但正如提姆暗示的那样,它很可能不会显示任何效果。

    【讨论】:

    • 这是我正在寻找的东西。让我看看它是否有效。
    • @Pranav &lt;meta http-equiv="X-UA-Compatible" content="IE=9" /&gt; 如果不正确地放置在head 中,即使在页面加载期间也不会产生影响。 meta 应该在执行/解析任何东西之前,这可能会影响渲染或 JavaScript。这意味着它必须放在all link、style 或script 元素之前,否则完全没用。如果您尝试使用脚本设置它,很明显,“禁止”元素位于 meta....
    • @Cobra_Fast,感谢您的回复,但确实如上面评论中所述“它必须放在所有链接、样式或脚本元素之前,否则完全没用”
    • @Pranav 看看 DOM 节点的insertBefore() 方法。但我仍然怀疑它是否能为你做任何事情。
    【解决方案3】:

    不,在 Javascript 中没有办法做到这一点。至少,不会以实际实现任何目标的方式 - 加载页面时渲染模式是固定的,因此您无法从页面内的 JS 中更改它。

    另一种解决方案是将X-UA-Compatible 标志添加为HTTP 标头。这将在您网站的所有页面上设置它,而无需任何 HTML 更改。

    您提到您正在使用 IIS。 This page should help you configure it for your site.

    但是,真正的解决方案始终是修复网站,使其在 IE10 中运行。这可能是最适合您的解决方案,因为 IE10 实际上非常擅长符合标准;如果您的某些东西在 IE8 和 IE9 中有效,但在 IE10 中无效,那么几乎可以肯定它实际上是您的页面有问题,而不是 IE10 中的任何问题。

    这反过来意味着,即使它现在可以在其他浏览器中运行,您的代码中也可能存在一个错误,可能会在其他浏览器的未来版本中中断。

    使用 IE 兼容模式的另一个问题是它确实不是它应该兼容的旧 IE 版本的准确副本。对于 IE10 的兼容模式尤其如此,因为有一些旧功能已经从 IE10 中完全删除,因此在兼容模式下也不可用。这意味着 IE8 和 IE9 可能工作,但 IE9-compat 模式下的 IE10 可能无法工作。这取决于实际问题是什么,但您需要在兼容模式下像在真正的 IE10 模式下一样彻底测试它。

    还有一个问题是你如何处理未来的网站。 IE11 及更高版本呢?兼容模式删除了 IE 可能具有的新功能,因此如果坚持使用 IE9 模式,您将无法使用文本阴影或 CSS 过渡等功能。您最终会想要使用这些功能,因此您需要在某个时候修复该站点;为什么不是现在?

    【讨论】:

    • 确实我们需要修复 IE 10,但在此之前我们不能让它损坏。网站配置文件而不是网络服务器配置的任何更改都是我需要的。这可能吗?
    • @Pranav - 我添加了一个指向答案的链接,可以帮助您为 IIS 配置它。 (如果需要,该链接还包含指向 MSDN 的更多链接)
    【解决方案4】:

    很难(从问题中)弄清楚到底是什么被破坏了?你能分辨出哪些 JavaScript 代码被破坏了吗?

    无论如何,一种解决方案可能是更改文档模式,就像您在上面所说的那样。另一种解决方案可能是更改浏览器的 JavaScript 版本(如果问题是由于 JavaScript 不兼容)。

    您可以通过将浏览器配置文件添加到您的 asp.net 应用程序的 App_Browser 文件夹来更改浏览器的 JavaScript 版本。或者要自动执行,添加这个 nu-get 包并修改它。

    install-package App_BrowsersUpdate
    

    https://nuget.org/packages/App_BrowsersUpdate

    【讨论】:

    • 大多数地方的错误是“JavaScript 运行时错误:'JSON' 未定义”。让我看看它是否有效。
    • window.JSON is undefined 是一个常见错误,可能有多种解决方案,一种解决方案是包含 JSON2.js 文件。
    • 您可以使用以下命令从 nuget 添加文件 [ Install-Package json2 ] 安装后,在所有脚本引用之前添加对该文件的脚本引用
    • 您不应该期望客户升级软件,因为您不支持它,作为开发人员,您应该提供解决方案以防止出现问题,可能使用trycatchs
    • 感谢@Ammar Hasan,添加 json-2.js 解决了与此相关的问题,但核心问题仍然存在。
    【解决方案5】:

    感谢大家的回复和帮助。 我正在寻找的就像在 web.config 中添加以下代码:

            <httpProtocol>
                <customHeaders>
                    <clear/>
                    <!--This setting will make document mode to highest mode available we need have mode 8 and above-->
                    <add name="X-UA-Compatible" value="IE=IE9"/>
                </customHeaders>
            </httpProtocol>
    

    在&lt;system.webServer&gt; 部分。

    【讨论】:

    • 我希望通过 javascript 来实现,但是在 web.config 中添加它肯定是一个更好的解决方案。
    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 2012-03-04
    • 2012-06-28
    • 2017-03-09
    • 2014-04-25
    • 2012-09-05
    • 1970-01-01
    相关资源
    最近更新 更多