web-dev-qa-db-fra.com

Pourquoi HTML1113: redémarrage du mode document des normes IE9 aux bizarreries

J'ouvre une page Web dans IE9 - et tout à coup, le mode document passe en mode Quirks. La page elle-même est très simple - pas de doctype, pas de balise META, juste un morceau de javascript (à des fins de test) à l'intérieur du xslt formant la page.
Voir http://home.arcor.de/martin.honnen/xslt/test2012041901.xml en utilisant le xsl mentionné au même emplacement. Pour plus de commodité, j'ai copié le contenu ci-dessous.

Le contenu de la page est

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test2012041901.xsl"?>
<test/>

Et xsl contient

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

Pourquoi cela arrive-t-il? Est-ce un paramètre d'options Internet qui déclenche cela? Comment puis-je éviter que le mode excentrique soit automatiquement choisi dans IE9?
. Mais quoi?

Les outils de développement F12 affichent ce qui suit dans la console:

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

Vous ne savez pas de quoi parle le message de marque d'ordre des octets - peut-être est-ce lié au problème?

Oh et les outils de développement le montrent également dans la partie script:

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

Notez que tout cela ne se produit qu'avec les onglets nouvellement ouverts, pas déjà existants en mode bizarreries.

23
Maestro13

Comme personne ne saute sur l'occasion, je répondrai moi-même à la question.
Comme l'a indiqué paulsm4 en commentaire de la question, c'est le doctype manquant qui déclenche le mode excentrique. Voir http://hsivonen.iki.fi/doctype/ pour un excellent aperçu des doctypes, des types de navigateur et des modes de navigation résultants.

En ce qui concerne la drôle de chaîne de caractères asiatiques - j'ai fait d'autres recherches à ce sujet et j'ai découvert d'où cela venait. J'ai ouvert un nouveau fichier dans UltraEdit, l'ai d'abord converti d'utf-8 en unicode, puis copié le texte. Le résultat en vue hexadécimale révèle tout:

Little Endian

Comme nous le voyons, c'est juste le fichier xml téléchargé, plus une marque d'ordre d'octets précédente FF FE, qui selon wikipedia est un Little Endian utf-16:

byte order mark

Maintenant, pour les messages dans la console: l'ordre des événements dans le navigateur est apparemment le suivant:

  1. obtenir un fichier XML
  2. obtenir le fichier XSL référé et appliquer la transformation (XML5001); résultat du processus
  3. BOM = FF FE qui est utf-16 remplace utf-8 mentionné dans l'en-tête xml (HTML1114)
  4. IE9 remarque un doctype manquant, passe en mode excentrique (HTML1113) et recharge à nouveau le fichier de résultats
  5. Encore une fois, le codage de nomenclature remplace le codage d'en-tête xml (HTML1114)
  6. Fichier affiché
20
Maestro13

Avez-vous essayé de définir explicitement la compatibilité dans le code HTML que vous générez?

HTML5 doctype mettant IE9 en mode bizarre?

<head>
  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>
  ..
3
paulsm4