Почему HTML1113: режим документа перезапускается из стандартов IE9 в причуды

Я открываю веб-страницу в IE9 - и внезапно режим документа переключается в режим Quirks. Сама страница предельно проста - без doctype, без мета-тэга, просто кусочек (тестового) javascript внутри xslt, формирующего страницу.
См. http://home.arcor.de/martin.honnen/xslt/test2012041901.xml используя упомянутый xsl в том же месте. Для удобства я скопировал содержимое ниже.

Содержание страницы

<?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

Не уверен, что такое сообщение с меткой порядка байтов - может быть, это связано с проблемой?

О, и инструменты разработчика также показывают это в части скрипта:

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

Обратите внимание, что все это происходит только с недавно открытыми вкладками, а не с уже существующими в режиме причуд.

2 ответа

Решение

Поскольку никто не подойдет к этому случаю, я сам отвечу на вопрос.
Как указывал в комментарии к вопросу paulsm4, именно отсутствующий тип документа запускает режим причуд. См. http://hsivonen.iki.fi/doctype/ для превосходного обзора типов документов, типов браузеров и полученных режимов браузера.

Что касается забавной цепочки азиатских иероглифов - я провел дальнейшее исследование этого и выяснил, откуда он взялся. Я открыл новый файл в UltraEdit, сначала преобразовал его из utf-8 в unicode, а затем скопировал текст. Результат в шестнадцатеричном представлении показывает все это:

Little Endian

Как мы видим, это всего лишь загруженный xml-файл плюс знак порядка следования байтов FF FE, который, согласно википедии, является буквой UTF-16 Little Endian:

знак порядка байтов

Теперь о сообщениях в консоли: порядок событий в браузере выглядит следующим образом:

  1. получить файл XML
  2. получить указанный XSL-файл и применить преобразование (XML5001); результат процесса
  3. BOM = FF FE, то есть utf-16 переопределяет utf-8, упомянутый в заголовке xml (HTML1114)
  4. IE9 замечает отсутствующий тип документа, переключается в режим причуд (HTML1113) и снова загружает файл результатов
  5. Опять-таки, BOM-код переопределяет кодировку XML-заголовка (HTML1114).
  6. Файл отображается

Вы пытались явно установить совместимость в генерируемом HTML?

HTML5 Doctype перевод IE9 в режим причуд?

<head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
  ..
Другие вопросы по тегам