IE9でWebページを開くと、突然ドキュメントモードがQuirksモードに切り替わります。ページ自体は非常に単純です-doctypeもメタタグもなく、ページを形成するxslt内の(テスト目的の)JavaScriptの一部にすぎません。
同じ場所で前述のxslを使用して http://home.arcor.de/martin.honnen/xslt/test2012041901.xml を参照してください。便宜上、以下の内容をコピーしました。
ページ内容は
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test2012041901.xsl"?>
<test/>
そして、xslには
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:ms="urn:schemas-Microsoft-com:xslt"
xmlns:my="http://example.com/my"
exclude-result-prefixes="ms my">
<xsl:output method="html" version="5.0"/>
<ms:script language="JScript" implements-prefix="my">
<![CDATA[
function tokenize (input) {
var doc = new ActiveXObject('Msxml2.DOMDocument.6.0');
var fragment = doc.createDocumentFragment();
var tokens = input.split(';');
for (var i = 0, l = tokens.length; i < l; i++)
{
var item = doc.createElement('item');
item.text = tokens[i];
fragment.appendChild(item);
}
return fragment.selectNodes('item');
}
]]>
</ms:script>
<xsl:template match="/">
<html>
<head>
<title>Example</title>
</head>
<body>
<h1>Example</h1>
<ul>
<xsl:apply-templates select="my:tokenize('Kibology;for;all')"/>
</ul>
</body>
</html>
</xsl:template>
<xsl:template match="item">
<li>
<xsl:value-of select="."/>
</li>
</xsl:template>
</xsl:stylesheet>
なぜこれが起こるのですか?これを引き起こすのはインターネットオプション設定ですか? IE9で互換モードが自動的に選択されないようにするにはどうすればよいですか?
そして:同じページで以前は、この自動癖モードは発生していませんでした。設定を変更したり、元の値に戻したりして、この動作を変更した可能性があります。しかし、何ですか?
F12開発者ツールでは、コンソールに次のように表示されます。
XML5001: Applying Integrated XSLT Handling.
HTML1114: Codepage unicode from (UNICODE byte order mark) overrides conflicting codepage utf-8 from (10)
test2012041901.xml
HTML1113: Document mode restart from IE9 Standards to Quirks
test2012041901.xml
HTML1114: Codepage unicode from (UNICODE byte order mark) overrides conflicting codepage utf-8 from (10)
test2012041901.xml
バイトオーダーマークメッセージの内容がわからない-それは問題に関連しているのではないでしょうか?
ああ、開発ツールもスクリプト部分でこれを示しています:
㼼浸敶獲潩㵮ㄢ〮•湥潣楤杮∽呕ⵆ∸㸿㰊砿汭猭祴敬桳敥⁴祴数∽整瑸砯汳•牨晥∽整瑳〲㈱㐰㤱砮汳㼢ਾ琼獥⽴ਾ
これはすべて、新しく開いたタブでのみ発生し、quirksモードの既存のタブでは発生しないことに注意してください。
誰もその場にジャンプしないので、私は質問に自分で答えます。
質問に対するコメントでpaulsm4が示したように、quirksモードをトリガーするのは、欠落しているdoctypeです。 doctype、ブラウザタイプ、および結果として得られるブラウザモードの概要については、 http://hsivonen.iki.fi/doctype/ を参照してください。
アジアの文字の面白い文字列に関して-私はこれについてさらに調査し、それがどこから来たのかを発見しました。 UltraEditで新しいファイルを開き、最初にutf-8からUnicodeに変換してから、テキストをコピーしました。 16進数ビューの結果は、すべてを明らかにします。
ご覧のとおり、これはアップロードされたxmlファイルと、それに先行するバイトオーダーマークFF FEだけです。これは、Wikipediaによると、UTF-16リトルエンディアンのファイルです。
ここで、コンソールのメッセージについて説明します。ブラウザでのイベントの順序は、明らかに次のとおりです。
生成したHTMLで互換性を明示的に設定してみましたか?
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>
..