带有xml DOM的Chrome getElementsByTagName()返回不正确的NodeList [重复]

Posted

技术标签:

【中文标题】带有xml DOM的Chrome getElementsByTagName()返回不正确的NodeList [重复]【英文标题】:Chrome getElementsByTagName() with xml DOM returns improper NodeList [duplicate] 【发布时间】:2012-11-07 22:30:37 【问题描述】:

可能重复:Chrome: Disable same origin policy

关于我的问题的一些背景信息:

为画廊编写 javascript 文件;从 xml 中提取数据 文件,here。 使用 XMLHttpRequest() 加载 DOM 对象,使用异步加载。 使用 DOMParser 解析 responseText 以生成 DOM 对象。 在 FireFox 上工作,在 Chrome 上失败。

编辑(请阅读):

使用 console.log 后,Chrome 似乎报告了一个 跨域问题:

加载资源文件失败:./Gallery/dropdown_style.css XMLHttpRequest 无法加载文件:./Gallery/gallery_info.xml。叉 源请求仅支持 HTTP。 节点列表[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);
    

这是我的整个源文件夹,如果你想看的话:Source Folder

我不确定这是哪个问题:

    DOM xml 对象已损坏 NodeList 已损坏 getElementsByTagName() 的总体 Chrome 问题 其他

如果你们能帮我确定问题的确切根源和解决方案,我将不胜感激。

【问题讨论】:

尝试使用console.log。它实际上打印出对象的内容,包括 NodeList,这就是为什么建议在 window.alert 上进行调试。 我会试一试,谢谢。 好吧,你知道吗,看起来这是一个跨域错误,在本地访问时。 所以现在我的问题是:如何在本地解决这个问题?如果上传到服务器,这也会是一个问题吗? 如果您从本地 Web 服务器提供服务,则不会出现同源策略问题。在不设置网络服务器的情况下打开文件的另一种方法是将 Chrome 启动为 $ google-chrome --disable-web-security 【参考方案1】:

答案:看起来问题出在同源策略上。对于本地访问,将文件上传到本地 Web 服务器,或更改 Chrome 设置以进行测试。上传到服务器应该没有问题。

非常感谢用户 Luminously、Diego Pino 和 Bergi。

解决问题的步骤:

    使用 console.log() 而不是 window.alert() - 它更加详细和准确。 本地:将文件上传到本地网络服务器或更改 Chrome 设置(禁用网络安全) 全局:上传到服务器没有问题。

【讨论】:

以上是关于带有xml DOM的Chrome getElementsByTagName()返回不正确的NodeList [重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有 dom 文档的 xpath

带有 NO_MODIFICATION_ALLOWED_ERR DOM 异常 7 的 Chrome 错误

无法使用 DOM 解析器读取带有命名空间前缀的 xml

使用 Chrome 扩展操作 DOM

DOM2级中的XML

Chrome 扩展 - 在浏览器上加载 js 之前获取 Html DOM