Joh*_*ohn -1 html javascript xhtml parsing
HTML是SGML的子集.
XHTML是XML的子集.
两者都使用单独的解析器.
假定正确地提供HTML文档并正确地提供text/htmlXHTML应用程序,application/xhtml+xml因为可以检测用于呈现页面的解析器,如果是,如何?
我确切地理解我在问什么.请不要坚持问我为什么要这样做.
我宁愿不接受答案,表明我不使用一种语言或另一种语言.这是为了避免争论并帮助产生我可以使用的答案.
[这是我原来答案的替代品.我最初的想法是利用innerHTML行为的差异.虽然它在IE9,Firefox和Chrome中运行良好,但事实证明它在Opera中失败了,它似乎使用了内部HTML的HTML解析器,即使对于作为application/xhtml+xml]的页面也是如此
除了HTML文档之外,没有太多方法可以告诉XML文档.然而,一种方法是利用HTML和XML之间的案例处理差异.
特别是,Element.tagName的行为有所不同.在HTML解析文档中,元素名称将被强制转换为大写,tagName而在XML解析文档中则不会.因此,我们可以document.createElement("div").tagName == "DIV"根据文档的解析方式测试哪个会产生不同的结果.
看到这个测试用例:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Test Case</title>
<script>
window.onload = function() {
document.getElementById("result")
.appendChild(document.createTextNode(
(document.createElement("div").tagName == "DIV")
? "HTML parser" : "XML parser"));
}
</script>
</head>
<body>
<p id="result"></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
看到它的实际效果: