2010-08-07 57 views
5

我正在放置一些演示頁面,並且我想要演示的內容之一涉及動態獲取HTML片段並進行後續處理。因此,我有簡單的jQuery這樣的代碼:通過「file://」中的「ajax」訪問相對URL內容

$('#target').load('./content_fragment.html', function() { 
    $(this).doSomething(); 
}); 

我做的這一切都源自文件://網址,因爲整個事情是,我(會)從拇指驅動器運行或演示的一部分一些東西。因此,「content_fragment.html」只是另一個本地文件,就像包含該代碼的主頁面一樣。

現在,這一切都適用於Firefox或Safari,其他相對URL的使用在Chrome(iframe「src」URL,圖片,腳本,CSS等)中正常工作,但Chrome不會支付注意那些「.load()」請求。如果我壓縮內容並將其部署到Web服務器,然後通過其「http:」URL訪問它,那麼Chrome工作正常。當它不起作用時,我在Chrome控制檯中看不到任何錯誤;它只是不提取內容。我已經在Linux和XP上用Chrome試過了,結果相同。 (和Safari或Firefox到相同的文件://URL總是做我期望和加載的內容。)

所以我的問題是,這種奇怪只是一個Chrome的怪癖,或者是有什麼固有的問題關於XMLHttpRequests和file://網址?換句話說,Chrome是不是在做的事情,這意味着其他瀏覽器被破壞了?

+0

它的安全性,你不希望邪惡的代碼進入你的HD。 – tcooc 2010-08-07 13:46:22

回答

12

啓動Chrome時禁用該安全功能:)

它是一個錯誤您可以添加--allow-file-access-from-files到命令行?也許,可能不是,發生了什麼事是不把file://當作單個域名,對另一個文件的請求被視爲不同的域名,因此被SOP rules阻止。這是Chrome/Chromium開發人員的選擇,是否正確取決於我的觀點。

在谷歌代碼的Chrome問題部分有很多關於此問題的討論,您可能會發現感興趣的討論,herehere

+1

你是一個了不起的知識源泉。謝謝!我確實做了一些Google搜索,但我找不到任何相關的東西。我同意,這是「正確的」還是「錯誤的」是一個意見問題,只要我能控制我不關心的行爲:-) – Pointy 2010-08-07 15:32:34

1

曾在Safari瀏覽器火狐+同一個問題:

代碼警報之下不會運行:

$ .getScript( '的script.js',函數(){警報(「腳本加載,執行。「);})

加載外部文件而不是script.js將運行。