3

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

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

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

<head></head>.

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

4

5 回答 5

13

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

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

您提到您正在使用 IIS。这个页面应该可以帮助您为您的站点配置它

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

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

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

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

于 2013-06-06T11:20:09.290 回答
6

感谢大家的回复和帮助。我正在寻找的就像在 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>

<system.webServer>部分。

于 2013-06-07T06:53:16.137 回答
3

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

于 2013-06-06T11:11:13.563 回答
2
var m = document.createElement("meta");
m.setAttribute("http-equiv", "X-UA-Compatible");
m.setAttribute("content", "IE=9");
document.getElementsByTagName("head")[0].appendChild(m);

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

于 2013-06-06T11:12:33.693 回答
1

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

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

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

install-package App_BrowsersUpdate

https://nuget.org/packages/App_BrowsersUpdate

于 2013-06-06T11:39:37.520 回答