为什么HTML1113:从IE9标准来怪癖文档模式重新启动(Why HTML1113: Docume

2019-06-24 04:54发布

我打开IE9网页 - 一下子文档模式切换到怪癖模式。 页面本身是死的简单 - 没有DOCTYPE,没有meta标签,只是一块XSLT形成内页(测试目的)的JavaScript。
见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>

为什么会出现这种情况? 它是一个Internet选项设置触发此? 如何防止怪癖模式正在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

不知道字节顺序标记的消息是怎么一回事 - 也许这就是涉及到这个问题?

哦,开发工具也是在脚本部分显示此:

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

需要注意的是这一切都只能用新打开的标签发生,而不是现有的怪癖模式了。

Answer 1:

由于没有一个跳起来之际,我会回答这个问题我自己。
作为paulsm4评论中指出的问题,它是缺失的文档类型触发怪癖模式。 见http://hsivonen.iki.fi/doctype/为文档类型,浏览器类型和所得浏览器模式中的一个很好的概述。

对于亚洲字符的字符串滑稽 - 我做了一些这方面的深入研究,发现它从何而来。 我在UltraEdit打开一个新的文件,将其转换从UTF-8到Unicode,然后再复制的文本。 十六进制查看结果揭示了这一切:

正如我们看到的,它只是上传的xml文件,再加上前面的字节顺序标记FE FF,根据维基百科是一个UTF-16小端之一:

现在,在控制台消息:事件在浏览器中的顺序显然是如下:

  1. 获取XML文件
  2. 获得简称XSL文件和应用转化(XML5001); 处理结果
  3. BOM = FF FE是UTF-16替代UTF-8在XML头提及(HTML1114)
  4. IE9通知书丢失的文档类型,切换到怪异模式(HTML1113)和重载再次导致文件
  5. 再次,BOM编码覆盖XML头编码(HTML1114)
  6. 文件显示


Answer 2:

您是否尝试过明确设置在您生成HTML的兼容性?

HTML5的doctype把IE9进入怪癖模式?

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


文章来源: Why HTML1113: Document mode restart from IE9 Standards to Quirks