2015-08-25 67 views
2

我正在處理一個簡單的項目,該項目涉及通過本地.html文件將本地.xml文件加載到DOM結構中。我們可以假設.html和.xml文件放在同一臺計算機上的同一個文件夾中。問題是,IE 11禁止與本地XML文件的任何互動。 (SCRIPT5:訪問被拒絕使用IE加載本地XML文件11

到目前爲止,我想這解決方案(方案1,2的Mozilla Firefox和谷歌瀏覽器進行測試,並功能,微軟邊緣有一些不同的問題 - 首先看到的代碼片段):

同步/異步的XMLHttpRequest(異步的示例中)

function loadXMLDoc(doc) 
{ 
    try{ 
     xmlhttp = new XMLHttpRequest(); 
    }catch(e){ 
     try { 
      xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.3.0"); 
     } 
     catch(e){ 
      try { 
       xmlhttp = new ActiveXObject("MSXML2.XMLHTTP"); 
      } 
      catch(e) { 
       try { 
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       catch(e) { 
        alert("XMLHTTP Not Supported On Your Browser"); 

       } 
      } 
     } 
    } 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) /*Microsoft edge returns status 0 here */ 
     { 
      alert(xmlhttp.responseText); 
     } 
    }; 
    xmlhttp.open("GET",doc,true);/*IE11 prints "SCRIPT5: Access is denied." into console*/ 
    xmlhttp.send(); 
} 

而且JQuery的異步溶液

window.onload = function() { 
$.ajax({ 
     url: "output.xml", 
     aync: true, 
     success: myHandle, 
     isLocal:true, 
     dataType: "xml" 
    }); 
} 

function myHandle(data) { 
    alert(data); 
} 

第三解決方案包括簡單Node.js的web服務器(見Using node.js as a simple web server) ,但是這似乎是對我來說是太大的槍。 也有一個問題,網絡服務器必須啓動明確通過CMD /腳本,但我只是想擊中。HTML並看到解釋的XML數據。

TL; DR我的問題是:

  • 是否存在,使得對 IE11訪問的本地.xml文件的任何解決方法嗎?
  • 爲什麼IE的這種「安全風險」,而不是其他?

注: 由於.xml文件可以有更多的MB,異步解決方案者優先我。

謝謝。

+0

是您的最終目標是以特定的方式呈現XML,看起來像是一個頁面嗎?您的XML是靜態的還是生成的,如果生成時您是否有可能影響生成過程? – smnbbrv

+0

生成Xml(根據特定的DTD)。無論如何,你的期望是正確的我只需要呈現本地頁面模塊(即圖形/表),其中數據從XML加載。 – Smarty77

+0

你堅持JS解決方案嗎?或者只有結果對你有幫助? – smnbbrv

回答

0

那麼,我建議作爲備份的機會是從html + js解決方案中消失一點,然後嘗試XML + XSLT。這不應該有任何安全問題,唯一改變你的 - 你不需要打開index.html,但你需要在瀏覽器中打開output.xml

此外,您需要將指向XSLT文件的指針添加到XML文件中,請參閱here該怎麼做。

一旦你加載你的XML和XSLT用它處理你有相同的JavaScript相同的HTML,但所有數據已經​​呈現。 XSLT是相當強大的,我相信它會滿足您的所有需求

1

如果你想提供的文件路徑爲本地路徑,那麼就不會在其他瀏覽器爲好,使用普通的JavaScript,和您可能會收到Cross域錯誤。如果您有Web服務器,則可以將該文件放在適當的位置,並提供路徑爲"http://localhost/.../file.xml"。這可能有幫助。

+0

不過,還有一個問題沒有答案。我假設在localhost:63342 /.../ output.xml中。「63342是端口號,我想它可以改變嗎?如果有的話,是否有一個通用的解決方案? – Smarty77

+0

是的,在localhost後出現的數字是端口號。如果端口號改變了,URL也必須改變 –

+0

是的,但是有沒有辦法在js中找到port no?如果你在本地打開html,location.port不起作用(也就是說,它在瀏覽器中以本地路徑開始) – Smarty77