添加<;meta http equiv=";“X-UA-Compatible”;内容=”;IE=9“/&燃气轮机;使用javascript

添加<;meta http equiv=";“X-UA-Compatible”;内容=”;IE=9“/&燃气轮机;使用javascript,javascript,asp.net,browser,Javascript,Asp.net,Browser,我对IE 10有一个奇怪的问题。许多jQuery脚本在IE8、9、Chrome、firefox和safari上运行良好,但在IE10上出现故障。只有当一些用户切换到IE10时,这个问题才暴露出来 我找到的最简单的解决方案 <meta http-equiv="X-UA-Compatible" content="IE=9" /> 在中 问题是网站有很多页面,大多数页面并没有继承的母版页。 因此,有没有办法通过javascript添加这一点,因为我们在所有网页中都有一个共同引用的j

我对IE 10有一个奇怪的问题。许多jQuery脚本在IE8、9、Chrome、firefox和safari上运行良好,但在IE10上出现故障。只有当一些用户切换到IE10时,这个问题才暴露出来

我找到的最简单的解决方案

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

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

javascript在页面加载后运行,这意味着您以后将无法修改从服务器到客户端的元响应。如果没有通用的头文件,那么用IE10解决这些问题可能会更容易

var m = document.createElement("meta");
m.setAttribute("http-equiv", "X-UA-Compatible");
m.setAttribute("content", "IE=9");
document.getElementsByTagName("head")[0].appendChild(m);

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

不,在Javascript中没有办法做到这一点。至少,在某种程度上不会真正实现任何功能——加载页面时,呈现模式是固定的,因此在JS中,您无法从页面内更改呈现模式

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

您提到您正在使用IIS

然而,真正的解决方案始终是修复站点,使其在IE10中工作。这可能是对您来说最好的解决方案,因为IE10实际上非常擅长遵守标准;如果你的某些东西在IE8和IE9中有效,但在IE10中无效,那么几乎可以肯定的是,它实际上是页面中的某个错误,而不是IE10中的任何错误

这反过来意味着,即使它现在可以在其他浏览器中工作,代码中也可能存在bug,可能会在其他浏览器的未来版本中出现漏洞

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

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

很难(从问题中)弄清楚到底是什么被破坏了?你能告诉我哪个JavaScript代码被破坏了吗

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

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

install-package App_BrowsersUpdate

感谢大家的回应和帮助。 我想要的是在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>


部分中。

您可以轻松地将
元添加到
标题中,但它没有用,只有在加载页面时才有影响。如上所述,JS不会帮助您。您最好的选择是在IIS中的服务器上设置Http头。@Teemu,这个问题实际上已经解决了,因为页面是在IE 9模式下呈现的,如果是IE 9或10,则是客户端IE的较低版本。@jfrej,我同意,但这可以在虚拟目录级别上完成吗?由于IIS上有多个网站,我不想玩他们的设置,这是我正在寻找的东西。让我检查一下它是否有效。@Pranav
即使在页面加载过程中,如果它被错误地放置在
标题中,也不会产生影响。
meta
应该在执行/解析任何可能影响渲染或JavaScript的内容之前。这意味着它必须放在所有
链接
样式
脚本
元素之前,否则它将毫无用处。如果您试图用脚本设置它,很明显,一个“禁止”元素在
meta
…@Cobra\u Fast之前,感谢您的回复,但实际上正如上面的评论所述,“它必须放在所有链接、样式或脚本元素之前,否则它是完全无用的”@Pranav查看DOM节点的
insertBefore()
方法。但我仍然怀疑它是否能为你做任何事情。确实,我们需要修复IE 10,但在这之前,我们不能让它坏掉。我需要更改网站配置文件而不是Web服务器配置。这可能吗?@Pranav-我添加了一个指向答案的链接,可以帮助您为IIS配置它。(如果需要,该链接还包含指向MSDN的更多链接)在大多数地方,错误是“JavaScript运行时错误:'JSON'未定义”。让我检查一下它是否有效。window.JSON未定义是一个常见错误,可能有多个解决方案,一个解决方案是包含JSON2.js文件。安装后,您可以使用以下命令[Install Package JSON2]从nuget添加该文件,在所有脚本引用之前将脚本引用添加到此文件您不应该期望客户端升级软件,因为您不支持它,作为开发人员,您应该提供防止