HCL Notes 11中Javascript的context.text仅IE可用火狐等浏览器失效问题
问题根因
getElementsByTagName方法返回的是类数组的节点集合(NodeList),并非单个DOM节点。旧版IE对该集合做了非标准的.context属性扩展,其他符合W3C标准的浏览器没有这个特性,所以直接访问eitems.context必然返回undefined,不管后面追加什么属性都会报同样错误- 原代码里的
.text也是IE独有的非标准属性,标准浏览器需要使用标准属性.textContent读取节点文本
修复方案
先读取节点集合内的首个匹配节点,再调用标准属性读取文本,同时增加集合非空判断避免索引越界报错:
var node = xmlHttp.responseXML.documentElement; var eitems = node.getElementsByTagName("nib:ProcessRequestResponse"); // 先判断是否匹配到对应节点 if (eitems && eitems.length > 0) { // 取第一个匹配的节点,用标准textContent属性读取文本 var txt = eitems[0].textContent; // 用正则全局替换所有换行符,原写法只会替换第一个出现的换行 var txt2 = txt.replace(/\n/g, ""); }
命名空间兼容优化
如果XML严格遵循命名空间规范,部分标准浏览器用命名空间查询方法稳定性更高,可以替换节点查询逻辑:
// 第一个参数替换为你XML文件中nib前缀对应的实际命名空间URI即可 var eitems = node.getElementsByTagNameNS("此处填nib对应的命名空间URI", "ProcessRequestResponse");
内容的提问来源于stack exchange,提问作者Keertika
相关产品推荐
相关产品推荐

