2012-11-19 70 views
3

Possible Duplicate:
Chrome: Disable same origin policy鉻的getElementsByTagName()的XML DOM節點列表返回不當有關我的問題

那麼一點點背景資料:

  • 寫作畫廊的JavaScript文件;從xml 文件中提取數據,here
  • 使用XMLHttpRequest()加載DOM對象,使用異步加載。
  • 使用DOMParser解析responseText以生成DOM對象。
  • 適用於FireFox,在Chrome上無法使用。

EDIT(請讀):

After using console.log, it seems that Chrome is reporting a Cross-Origin Issue:

  • Failed to load resource file: ./Gallery/dropdown_style.css
  • XMLHttpRequest cannot load file: ./Gallery/gallery_info.xml. Cross origin requests are only supported for HTTP.
  • NodeList[0]
  • length: 0
  • Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101
  • Failed to load resource ./Gallery/Pictures/bg_one.jpg

Now my questions are:

  1. How do I fix this on the local level (offline)?
  2. Will this still be a problem even if I upload all the files to the same server?
  3. If so, what's the solution for that as well (online)?

現在DOM對象來通過,在兩個Firefox和Chrome大概是正確的。 而在下面的代碼:

window.alert(xmlDoc.getElementsByTagName("pic")); 

它返回「HTML集」,或者在Chrome中,「節點列表」的響應。但是當我在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. 節點列表已損壞
  3. 總體Chrome的問題與的getElementsByTagName()
  4. 其他

如果你們能幫助我確定問題的確切來源和解決方案,那麼我會非常感激。

+1

嘗試使用console.log。它實際上打印出對象的內容,包括NodeList,這就是爲什麼建議通過window.alert進行調試的原因。 – Luminously

+0

我會給你一個鏡頭,謝謝。 – jhwg

+0

好吧,whaddya知道,它看起來像是一個跨本地錯誤,本地訪問。 – jhwg

回答

0

答案:看起來問題與同源策略有關。要進行本地訪問,請將文件上傳到本地網絡服務器,或更改Chrome設置以進行測試。如果上傳到服務器應該沒有問題。

非常感謝用戶Luminously,Diego Pino和Bergi。

步驟來解決問題:

  1. 使用的console.log(),而不是window.alert() - 它是如此多的更詳細,更準確。
  2. 本地:上傳文件到本地網絡服務器或更改Chrome設置(禁用網絡安全)
  3. 全局:如果上傳到服務器沒有問題。