ドキュメントの <body> の内容の制御しか与えられていないという特殊な状況があります。ホストは、柔軟性を維持するために、IEをすぐに癖モードにするdoctypeを宣言していないと思います。ドキュメントに対する制御が制限されているため、IE に強制的にページを標準モードで表示させるにはどうすればよいですか?
3 に答える
ページの内容をJSで動的に書き換えて、doctypeを強制的に挿入しないとどうにもならないのではないかと思います。
をどの程度コントロールできるか、具体的に教えていただけます<body>
か? JS/スクリプトを実行できますか?
編集:これは試みですが、IEではテストしませんでした。それはあなたにアイデアを与えるかもしれません。これdocument.write()
によりouterHTML
、document.documentElement
compatMode が CSS1Compat に変わります。
書き換え時にスクリプト ブロックを削除する必要がある場合があります。私が言ったように、私はこれを試すことを本当にお勧めしません...
http://medero.org/first-line.html
EDIT #2 :驚くべきことにIE6で動作するようです。しかし、リフレッシュすると、IE はそれを何らかの方法でキャッシュし、永続的に.document.write()
ed 形式のままにします。それに対抗するには、クエリ文字列を追加します?203984234
。
繰り返しますが、あなたの状況がどのようなものかはわかりませんが、これがアイデアや助けになることを願っています.
EDIT #3 :私はそれを書き直してにバインドしdocument.write
ましたwindow.onload
。効果を確認するには、アクセスするたびに一意のクエリ文字列を追加する必要があります.write
。
http://medero.org/rewrite.html?f30324433322111
もっと瞬時に何かが必要な場合は、おそらく jQuery の DOM 対応関数をジャックして、ウィンドウがロードされる前に書き直すことができます。
雑記:
document.write
視覚的に重要な場合は、が呼び出されるまで、CSS を使用して HTML ドキュメント全体を非表示にすることができます。- 新しく書き込まれたページにブロックが含まれないように、おそらく
<script>
保存する前に document.write を削除する必要があります。outerHTML
script
MSDN のドキュメントの互換性の定義に関する記事をご覧ください。X-UA-Compatible
おそらく、メタタグを書き出すとうまくいくでしょう。
meder's answer に基づいて、どうにか解決できた方法は次のとおりです。
最初にメタを書き出そうとしました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()
ができなかったため、これで解決する必要がありました。