我在IE9中打开一个网页 - 文档模式突然切换到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
不确定字节顺序标记消息是什么 - 可能与问题有关吗?
哦,开发工具也在脚本部分显示:
㼼浸敶獲潩㵮ㄢ〮•湥潣楤杮∽呕ⵆ∸㸿㰊砿汭猭祴敬桳敥⁴祴数∽整瑸砯汳•牨晥∽整瑳〲㈱㐰㤱砮汳㼢ਾ琼獥⽴ਾ
请注意,所有这些只发生在新打开的标签上,而不是现有的怪癖模式。
答案 0 :(得分:20)
由于没有人跳起来,我会自己回答这个问题 正如paulsm4在对问题的评论中指出的那样,它是缺少的触发怪癖模式的doctype。有关doctypes,浏览器类型和生成的浏览器模式的完美概述,请参阅http://hsivonen.iki.fi/doctype/。
关于有趣的亚洲字符串 - 我对此做了一些进一步的研究,并发现了它的来源。我在UltraEdit中打开了一个新文件,首先将它从utf-8转换为unicode,然后复制文本。十六进制视图中的结果显示了所有内容:
正如我们所看到的,它只是上传的xml文件,加上前面的字节顺序标记FF FE,根据维基百科是一个utf-16 Little Endian:
现在,对于控制台中的消息:浏览器中的事件顺序显然如下:
答案 1 :(得分:3)
您是否尝试在您生成的HTML中明确设置兼容性?
HTML5 doctype putting IE9 into quirks mode?
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
..