2012-09-07 24 views
0

以下代碼在Safari上正常工作。如何以同步方式加載文件? (訪問控制允許來源)

在Chrome,它失敗,因爲:

"XMLHttpRequest cannot load file:///Users/jem/Sites/AA/data/articles.csv. Origin null is not allowed by Access-Control-Allow-Origin." 

這是什麼意思?如何使用同步調用正確讀取此文件?

function(file) { 

    var content; 

    $.ajax({ 
     url : file, 
     success : function (data) { 
      content = data.split(/\r\n|\n/); 

     }, 
     async: false 
    }); 

    return content; 
} 
+1

這是可怕的是Safari瀏覽器將讓你這樣做......的東西這樣想'文件:/// PROC/cpuinfo',將讓一個惡意網站檢測架構和其他信息,可以讓它嘗試更精確的感染。雖然這種方式不能修改,但是很多數據可以通過'/ proc'訪問。許多有價值的,可挖掘數據的,可破解的數據。 '/ proc'中的幾乎任何數據都可能被惡意使用。 – Linuxios

+0

Duplicates:http://stackoverflow.com/questions/5224017/origin-null-is-not-allowed-by-access-control-allow-origin-in-chrome-why,http://stackoverflow.com/questions/4208530/xmlhttprequest-origin-null-is-not-allowed-access-control-access-allow-for-file,http://stackoverflow.com/questions/10865869/origin-null-is-not-allowed-by -access-control-allow-origin,http://stackoverflow.com/questions/8456538/origin-null-is-not-allowed-by-access-control-allow-origin,http://stackoverflow.com/questions/3851691 /負載本地JSON-文件,通過文件的觸發跨網域無效起源違章-S。 – apsillers

+0

@Linuxios Safari可能會[像Firefox一樣](https://developer.mozilla.org/en-US/docs/Same-origin_policy_for_file:_URIs)並將'file:'頁面的原點限制在同一個目錄或子目錄中。因此,如果您在Downloads文件夾中打開一個新下載的HTML文件,它可能會在該目錄中讀取文件,但它可能*不會*上*文件系統樹以到達'/ proc'。 (這並不是說讓一個奇怪的HTML頁面讀取下載文件夾中的任何文件當然是一件好事!) – apsillers

回答

3

問題是,鉻不允許你從本地系統默認使用ajax加載文件。這是一個安全設置。

使用--allow-file-access-from-files參數啓動Chrome以跳過此安全檢查。

的chrome.exe --allow-文件訪問從檔案

+0

好吧,但想象一下,我發送給一個無法訪問測試Web服務器/沒有本地Web服務器的同事。 csv文件位於./data文件夾下。我怎麼能爲他做這項工作? – Jem

+2

你不能。不使用file://方法。您需要將文件放在服務器上並使用http://鏈接到它。它還需要位於同一個域中,否則您將收到域策略警告。 – koenpeters

+0

@Jem我不太理解你的評論。這個答案不需要Web服務器 - 如果你的同事無法訪問Web服務器(但有HTML文件和'。/ data'文件夾),他應該遵循這個答案中的確切建議,並使用' - 允許從文件訪問文件標誌。 (或者我誤解/誤解了什麼?) – apsillers