如何通过开发者工具或JS脚本判断页面是否为XML处理的XHTML
区分XML处理的XHTML与普通HTML页面的DOM标识及检测方法
一、能直接标识XML处理页面的DOM属性/方法
document.contentType:XML处理的XHTML页面会返回application/xhtml+xml,普通HTML页面则返回text/html,这是最直观的区分方式。document.xmlVersion:只有XML解析模式下才会有这个属性,返回对应的XML版本(比如1.0);普通HTML页面里这个属性是undefined。- 元素命名空间的严格性:虽然
document.documentElement.namespaceURI返回值一致,但XML模式下创建元素必须指定命名空间才能正确关联到XHTML命名空间;HTML模式下即使不指定,元素也会自动继承XHTML命名空间。另外调用document.documentElement.isDefaultNamespace("http://www.w3.org/1999/xhtml"),XML模式下会稳定返回true,结合命名空间创建的行为差异就能区分两种模式。 - 空元素的DOM结构:XML模式下,
<br/>这类空元素的childNodes长度是0;而HTML模式下的<br>(哪怕写了闭合标签)会被解析成带有一个空文本节点的元素,childNodes长度不为0。
二、是否需要复杂检测流程?
如果上面的直接属性没法确认(比如遇到极端的特殊配置场景),可以用仅XML环境下生效的操作来验证:
- 创建XML实体引用:XML模式下可以调用
document.createEntityReference("amp")创建实体引用节点;HTML模式下调用这个方法会直接抛出错误。 - 尝试XSLT转换:XML模式下能正常初始化XSLT处理器并执行转换操作;HTML模式下会因为文档类型不兼容而失败。
- 测试XML语法严格性:比如插入一个未闭合的标签,XML模式下会直接解析失败并抛出DOM异常;HTML模式下浏览器会自动修复这个语法错误,不会抛出异常。
补充:你提到的Firefox错误页源码路径
view-source:chrome://global/content/aboutNetError.xhtml无法直接访问,是因为Chrome协议的资源受浏览器安全策略限制,只能在浏览器内部特定场景加载。
内容的提问来源于stack exchange,提问作者myf
相关产品推荐
相关产品推荐

