使用JavaScript将IE9强制进入兼容模式

5
我有一个框架需要兼容模式,但父框架似乎已经设置了它,所以框架内部的以下标签不起作用。
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

有没有办法只将兼容模式应用于框架,或者让框架将兼容模式应用于父框架。

我在想如果有一种JavaScript方法可以切换模式,我可以从子框架向父框架应用它。


很遗憾,这是不可能的。在IE中,框架始终使用父文档的呈现模式。我假设由于您无法更改父文档,它们不在同一域上,因此跨域边界将阻止您从框架中更改父文档的呈现模式。 - pseudosavant
我在同一个域上,但这是一个庞大的遗留应用程序,有数千个页面。简单地在整个应用程序上设置兼容模式似乎会在IE7支持逐渐淘汰时引发更多问题。然而,如果我可以让子页面更改父页面的文档,那就正是我想要的。跨域边界在我的情况下不是问题。 - Serhiy
如果您使用open打开iframe,则iframe将可以访问opener并执行类似于opener.set_XUA("IE=EmulateIE7")的操作。为了实现这一点,您可以使用带有iframe名称作为目标的open,以便它使用iframe在那里打开页面。这可能比它值得的麻烦要多。 - Tei
我了解,但恐怕我无法在新窗口中打开该框架。实际上这不是 iframe,而是旧式的分割窗格,其中一个窗格是导航。 - Serhiy
这个需要IE7模式的框架将在多少个页面上使用?如果只在几个页面上使用,那么您可以通过htaccess或IIS的管理员控制来为该页面设置必要的自定义头。 - pseudosavant
几百个……?htaccess头文件会将该框架设置为该模式,还是IE9会覆盖它? - Serhiy
2个回答

2

这是我收集到的信息。

唯一有效的方法似乎是使用元标记(meta tag)。

然而,在框架(frame)中似乎不起作用,因为IE9已禁用了一个框架与另一个框架不同类型的能力。

据我观察,meta标签也不能在script或link标签之前出现,只能在其他meta标签之后出现,否则也会失败。

测试案例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <title>Test test</title>
        <meta name="keywords" content="keywords, keyword, keyword phrase, etc.">
        <!--<link href="test.css" rel="stylesheet" type="text/css" />-->
        <!--<script type="text/javascript">alert('test');</script>-->
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
    </head>
    <body>
        inline-block <div style="display:inline-block">test</div>
    </body>
</html>

1

从我的经验来看,您可以尝试创建元标记并将其插入到父框架头中。但我不确定这是否会强制进行仿真。

var meta = document.createElement('meta');
meta.setAttribute('http-equiv', 'X-UA-Compatible');
meta.setAttribute('content', 'IE=EmulateIE7');

parent.document.getElementsByTagName('head')[0].appendChild(meta);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接