带有xml DOM的Chrome getElementsByTagName()会返回不正确的NodeList

时间:2012-11-19 22:20:54

标签: javascript ajax google-chrome

  

可能重复:
  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
  •   
     

现在我的问题是:

     
      
  1. 如何在本地级别(离线)修复此问题?
  2.   
  3. 即使我将所有文件上传到同一台服务器,这仍然会出现问题吗?
  4.   
  5. 如果是这样,那么解决方案是什么(在线)?
  6.   

现在,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

我不确定这是哪个问题:

  1. DOM xml对象已损坏
  2. NodeList已损坏
  3. getElementsByTagName()
  4. 的首要Chrome问题
  5. 其他
  6. 如果你们能帮助我找出问题的确切来源和解决方案,那么我将非常感激。

1 个答案:

答案 0 :(得分:0)

答案:看起来这个问题与同源政策有关。要进行本地访问,请将文件上传到本地Web服务器,或更改Chrome设置以进行测试。如果上传到服务器应该没有问题。

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

解决问题的步骤:

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