6

我有一个特殊的情况,我只能控制文档 <body> 的内容。我假设为了保持灵活性,主机并没有声明会立即将 IE 置于怪异模式的 doctype。由于我对文档的控制有限,我可以做些什么来强制 IE 以标准模式呈现页面?

4

3 回答 3

4

我相信你不能做任何事情,除非你说,用JS动态重写页面的内容并强制插入一个doctype。

您能否详细说明您对<body>. 你可以做JS/脚本吗?

编辑:这是一个尝试,但我没有在 IE 中测试它。它可能会给你一些想法。我document.write()outerHTMLdocument.documentElement它把 compatMode 变成 CSS1Compat。

您可能需要在重写时删除脚本块。就像我说的,我真的不建议尝试这个......

http://medero.org/first-line.html

编辑#2:它似乎在 IE6 中出人意料地工作。但是在刷新时,IE 会以某种方式对其进行缓存,并永久保持其.document.write()ed 形式。为了解决这个问题,请在其后面附加一个查询字符串,例如?203984234.

同样,我不确定你的情况是什么,但我希望这能给你一些想法或帮助。

编辑#3:我重写了它并将其绑定document.writewindow.onload. 每次访问它时都需要附加一个唯一的查询字符串才能看到效果,因为它会在它之后缓存它.write

http://medero.org/rewrite.html?f30324433322111

如果你需要更即时的东西,你可以在窗口加载之前插入 jQuery 的 DOM 就绪函数来重写它。


杂项说明:

  • 如果在视觉上很重要,您可能可以通过 CSS 隐藏整个 html 文档,直到document.write调用
  • 您可能应该<script>在保存之前剥离 document.write,outerHTML以便新写入的页面没有script块。
于 2010-08-01T22:33:39.797 回答
1

查看MSDN 上的定义文档兼容性文章。也许写出X-UA-Compatible元标记会起作用。

于 2010-08-01T22:39:34.387 回答
0

根据 meder 的回答,这是我设法解决的方法。

我首先尝试写出X-UA-Compatible元数据,但没有奏效。

在文档的末尾(或在头部,但我也无权访问):

<script type="text/javascript">
if (navigator.appName == 'Microsoft Internet Explorer'){
    window.onload=function(){
        if (document.documentMode == 5){
            contents = document.documentElement.outerHTML;
            newdoc = document.open("text/html", "replace");
            newdoc.writeln('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'); 
            newdoc.write(contents);
            newdoc.close();
        }
    };
}
</script>

内层if是为了防止死循环。剥离代码本身可能会更好,比如把它放在一个函数中并用 删除函数调用string.replace(),但我无法让它工作,所以不得不解决这个问题。

于 2011-12-01T15:21:18.117 回答