XML DOM 跨浏览器兼容性差,IE6–IE8 依赖 ActiveX 的 MSXML 解析器且需手动处理异步与错误,现代浏览器统一支持 DOMParser 并返回标准 XML Document,但需检查 parsererror;命名空间、节点遍历及属性获取在两者间行为不一致,建议封装降级加载、使用 document.evaluate 和严格节点判断。

XML DOM 在不同浏览器中确实存在明显差异,尤其在旧版 IE(如 IE6–IE8)与其他现代浏览器(Chrome、Firefox、Safari、Edge)之间。核心问题集中在 XML 解析方式、节点访问方法、命名空间支持以及错误处理机制上。
IE 使用 ActiveX 的 MSXML 解析器
IE6–IE8 不支持原生 DOMParser,必须依赖 ActiveXObject("Microsoft.XMLDOM") 加载和解析 XML 字符串。该对象行为与标准 DOM 不完全一致:异步默认为 true,需手动设为 false;loadXML() 方法不抛异常,需检查 parseError.errorCode 判断是否成功。
- 加载字符串示例:
xmlDoc.loadXML(xmlStr),之后要检查xmlDoc.parseError.errorCode === 0 - 加载外部文件用
xmlDoc.load("data.xml"),注意跨域限制和本地文件协议(file://)下可能被拒绝 - MSXML 版本影响行为(如 MSXML2、MSXML3、MSXML6),建议显式指定最新稳定版
现代浏览器统一使用 DOMParser
Chrome、Firefox、Safari 和新版 Edge 均支持标准 DOMParser 接口,调用简单且返回标准 XML Document 对象:
const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlStr, "text/xml");- 解析失败时不会报错,但返回的文档中会包含
元素,可通过检查xmlDoc.querySelector("parsererror")判断 - 对命名空间敏感(如 SVG 或带前缀的 XML),需用
getElementsByTagNameNS()或querySelectorNS()访问
节点遍历与属性获取不一致
IE 的 MSXML 中,childNodes 可能包含文本节点(包括空白换行),而某些版本会过滤掉空文本节点;getAttribute() 在带命名空间属性时行为不稳定。现代浏览器严格遵循规范,但需注意:
6款图片鼠标悬停效果JS代码,鼠标悬停在图片上后,文字标题以6种不同的动画形式出现,兼容主流浏览器,php中文网推荐下载! 使用方法: 1、head区域引用css文件,modernizr.custom.js 2、在文件中加入!-- 代码 开始 --!-- 代码 结束 --区域代码 3、复制images文件夹里的图片到相应的路径
- 避免直接用
element.childNodes[0].nodeValue取文本内容,推荐用element.textContent或element.firstChild?.nodeValue并判空 - 获取带命名空间属性(如
xmlns:xsi)时,IE 可能忽略前缀,建议统一用element.getAttributeNS(namespaceURI, localName) -
getElementsByTagName("*")在 IE 中可能不返回所有元素,改用document.evaluate()或递归遍历更可靠
跨浏览器兼容写法建议
为兼顾 IE8+ 与现代浏览器,可封装一个通用 XML 加载函数:
- 先尝试
DOMParser,失败则降级到ActiveXObject - 统一用
document.evaluate()执行 XPath 查询,它在 IE9+ 和其他浏览器中均有良好支持(IE6–8 需 MSXML 的selectNodes()) - 对关键节点操作(如取值、遍历)增加存在性判断,例如
node && node.nodeType === Node.ELEMENT_NODE - 避免依赖
innerHTML处理 XML 字符串,它不是标准行为,且在 XML 文档中不可用
不复杂但容易忽略。









