Chrome使用XML DOM的getElementsByTagName()返回不正确的NodeList
Chrome使用XML DOM的getElementsByTagName()返回不正确的NodeList
这个问题已经有答案了:
可能重复:
关于我的问题,以下是一些背景信息:
- 编写一个用于图片库的JavaScript文件;从一个XML文件中拉取数据,点此查看。
- 使用XMLHttpRequest()异步加载DOM对象。
- 使用DOMParser解析响应文本以生成DOM对象。
- 在Firefox上工作,但在Chrome上失败。
编辑(请阅读):
使用console.log后,似乎Chrome报告了跨源问题:
- 无法加载资源文件:./Gallery/dropdown_style.css
- XMLHttpRequest无法加载文件:./Gallery/gallery_info.xml。跨源请求仅支持HTTP。
- NodeList[0]
- 长度:0
- 未捕获的错误:NETWORK_ERR:XMLHttpRequest异常101
- 无法加载资源./Gallery/Pictures/bg_one.jpg
现在我的问题是:
- 如何在本地级别(离线)解决这个问题?
- 即使我将所有文件上传到同一个服务器,这仍然是一个问题吗?
- 如果是,那么解决方案是什么(在线)?
现在DOM对象在Firefox和Chrome上都正确传递。
并在以下代码中:
window.alert(xmlDoc.getElementsByTagName("pic"));
它返回“HTML Collection”或在Chrome中是“NodeList”的响应。但是,当我在Chrome中询问该NodeList的长度时,它返回0,这意味着NodeList的格式不正确,或者不像我想要的那样。
在FireFox中,长度将返回一个值为2,这正是我想要的。
这是我的源代码,没有冗余术语:
var elemPic = []; function initGallery(xmlFName){ var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", xmlFName, true); xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4){ //since it's offline and local, don't check status == 200 //use a DOMParser, which is in a different file myCallBack(parseXml(xmlhttp.responseText)); } } xmlhttp.send(); } function myCallBack(xmlDoc){ //window.alert(xmlDoc); elemPic = xmlDoc.getElementsByTagName("pic"); //window.alert(elemPic); for(var i = 0; i < elemPic.length; i++){ //whats the source path? var src = elemPic[i].getElementsByTagName('src')[0].childNodes[0].nodeValue; window.alert(src); } }
如果您想查看它,请这里看我的整个源文件夹:源文件夹
我不确定这是哪些问题之一:
- DOM xml对象损坏
- NodeList损坏
- getElementsByTagName()的Chrome总体问题
- 其他
如果您能帮助我确定问题的确切来源和解决方法,那么我将非常感激。
admin 更改状态以发布 2023年5月21日