2015-07-28 76 views
3

我有一個作爲配置編輯器的網頁,這意味着它將通過打開.html文件並且不使用HTTP。使用File:///,在Firefox中工作的AJAX打開頁面,而不是Chrome或IE。

此頁面需要訪問位於同一目錄中的另一個文件(要編輯的配置文件)。該文件使用相對路徑General.json進行訪問。

  var getJSONFileContent = function(url) { 
       return $.ajax({ 
        type: "GET", 
        url: url, 
        async: false 
       }).responseText; 
      }; 

      var currentConfigAsJson = getJSONFileContent("General.json"); 

它在Firefox上完美工作,無需更改設置或任何設置,但在IE和Chrome上均失敗。

Chrome的錯誤:

file:///C:/Users/XXX/Desktop/XXX/General.json. 
Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.m.ajaxTransport.send 
@ jquery-1.11.3.min.js:5m.extend.ajax 
@ jquery-1.11.3.min.js:5getJSONFileContent 
@ General.html:68(anonymous function) 
@ General.html:75m.Callbacks.j 
@ jquery-1.11.3.min.js:2m.Callbacks.k.fireWith 
@ jquery-1.11.3.min.js:2m.extend.ready 
@ jquery-1.11.3.min.js:2J 
@ jquery-1.11.3.min.js:2 

Internet Explorer錯誤:

SCRIPT5: Access denied. 
Fichier : jsoneditor.min.js, line : 7, column : 8725 

我看,這是在Chrome(也可能是IE等)出於安全原因禁止的,而且我不得不開始鉻與特殊的參數繞過這一點。

但爲什麼它在Firefox上開火?有沒有辦法使Chrome在Chrome中運行,而無需在運行Chrome時傳遞特殊參數?

是否有Chrome的特定功能,可以讓我讀取/寫入文件而不必更改設置或傳遞參數?一個終端用戶不會想爲此煩惱。

謝謝。 :)

+0

[在Chrome中禁用相同來源策略]的可能重複(http://stackoverflow.com/questions/3102819/disable-same-origin-policy-in-chrome) – Hacketo

+0

每個瀏覽器都有自己的本地文件保護策略。您可以更改它:https://wiki.fluidproject.org/display/fluid/Browser+settings+to+support+local+Ajax+calls – Krzysiek

+1

Chrome不允許ajax運行'file:' – lshettyl

回答

0
  • 爲了解決這個問題的起源,建立了一個網絡服務器,並通過本地主機託管您的網頁。

  • 如果您要發佈基於HTML的應用程序,則可能會在應用程序中包含Web服務器。

  • 另一種方法是嘗試NW(以前稱爲NodeWebkit),其中包括具有非常高權限的Chromium,可以讓您完成這項工作。


這是相當基礎的假設,爲什麼這工作,並且沒有理由的意見。但Chrome和IE是屬於某公司的產品,而Mozilla基金會支持Firefox。因此,商業公司爲了他們的利益而在安全問題上採取更明智的做法是有道理的。與此同時,Mozilla基金會希望在技術上更具實驗性,關於Brendan Eich(JavaScript的創造者)在Mozilla中是一個大個子。

+0

感謝您的幫助。儘管在我的情況下,我不能要求最終用戶設置一個Web服務器來編輯配置文件。這就是爲什麼我正在尋找一種程序化的方式。 – Virus721

+0

@ Virus721你可以在我的答案中嘗試第二種和第三種方法。我個人比較喜歡NW。 – Leo

相關問題