2013-11-20 170 views
3

我在解決某些問題時遇到了困難。我正在開發一個沒有服務器的網站。這樣做時,我試圖通過XMLHttpRequest訪問文件時遇到問題。如您在示例代碼片段中看到的,我創建變量,使用相對路徑將其打開,並使用send函數。XMLHttpRequest.send失敗,並顯示相對路徑

當我使用必須遍歷父目錄的相對路徑時,send()函數失敗。但是,如果我提供的路徑與網頁位於同一目錄中,或者在當前網頁目錄的子文件夾中轉發,我會看到XMLHttpRequest成功返回。在這些成功案例中,我可以在request.responseText中看到測試文件的數據。

任何幫助,這將不勝感激。

我現在唯一的領導是可能存在一個安全威脅,以防止'get'請求遍歷父目錄。

謝謝。

代碼段:

function test(){ 
    var request = new XMLHttpRequest(); 
    request.open('GET', "../test.txt", true); 
    request.send();//FAILS HERE 

    //Get Response 
    var response = request.responseText; 
} 

function test2(){ 
    var request = new XMLHttpRequest(); 
    request.open('GET', "test.txt", true); 
    request.send(); 
    //Get Response 
    var response = request.responseText; //SUCCESSFUL 
} 
+0

爲什麼不安裝像Apache/IIS這樣的本地服務器?這將解決您的問題。從安全角度來看,瀏覽器可能不允許這樣做 – geedubb

回答

2

the MDN website,對Gecko引擎,因此Firefox瀏覽器:

文件可以讀取另一個文件只有原始文件的父目錄是目標文件的祖先目錄。

其他瀏覽器中也有類似的規則。這是file:///協議的限制。這是有很好的理由。試圖打破它是沒有意義的。解決方案是在計算機上運行本地服務器,這甚至不會有點困難。

澄清:讓我們假設你有一個文件的結構是這樣的:

- file1.html 
- dir1/ 
    - file2.html 
- dir2/ 
    - index.html 
    - file3.html 
    - dir3/ 
    - file4.html 

index.html中,您可以使用JavaScript訪問file3.htmlfile4.html。它不能訪問file1.htmlfile2.html

0

直接打開文件 - 使用在瀏覽器中的文件>打開,然後在地址欄中複製URL。

相關問題