23

IE9 で Web ページを開くと、突然ドキュメント モードが Quirks モードに切り替わります。ページ自体は非常にシンプルです。doctype も meta タグもありません。ページを形成する 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

バイト オーダー マーク メッセージの意味がよくわかりません。それが問題に関連している可能性がありますか?

ああ、開発ツールもスクリプト部分でこれを示しています:

㼼浸敶獲潩㵮ㄢ〮•湥潣楤杮∽呕ⵆ∸㸿㰊砿汭猭祴敬桳敥⁴祴数∽整瑸砯汳•牨晥∽整瑳〲㈱㐰㤱㄰砮汳㼢ਾ琼獥⽴ਾ

これはすべて、新しく開いたタブでのみ発生することに注意してください。既に互換モードになっている既存のタブでは発生しません。

4

2 に答える 2

20

誰もその機会に飛びつくことはないので、私は自分で質問に答えます.
質問へのコメントでpaulsm4が示したように、クワークモードをトリガーするのは欠落しているdoctypeです。doctypes、ブラウザの種類、および結果として生じるブラウザ モードの優れた概要については、 http://hsivonen.iki.fi/doctype/を参照してください。

アジアの文字の面白い文字列に関して、私はこれについてさらに調査を行い、それがどこから来たのかを発見しました. UltraEdit で新しいファイルを開き、最初に utf-8 から unicode に変換してから、テキストをコピーしました。16 進ビューでの結果は、すべてを明らかにします。

リトル エンディアン

ご覧のとおり、これはアップロードされた xml ファイルに加えて、先行するバイト オーダー マーク FF FE であり、ウィキペディアによると、これは utf-16 リトル エンディアンのものです。

バイトオーダーマーク

コンソールのメッセージについて: ブラウザでのイベントの順序は明らかに次のとおりです。

  1. XMLファイルを取得
  2. 参照された XSL ファイルを取得し、変換を適用します (XML5001); 処理結果
  3. utf-16 である BOM = FF FE は、xml ヘッダーに記載されている utf-8 をオーバーライドします (HTML1114)
  4. IE9 が doctype の欠落に気づき、quirks モード (HTML1113) に切り替えて、結果ファイルを再度リロードする
  5. ここでも、BOM エンコーディングが xml ヘッダー エンコーディングをオーバーライドします (HTML1114)
  6. 表示されたファイル
于 2012-05-08T07:34:34.193 に答える
3

生成する HTML で互換性を明示的に設定しようとしましたか?

IE9を癖モードにするHTML5 doctype?

<head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
  ..
于 2012-05-04T22:57:08.473 に答える