使用File:///,在Firefox中工作的AJAX打开页面,而不是Chrome或IE。
问题描述:
我有一个作为配置编辑器的网页,这意味着它将通过打开.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的特定功能,可以让我读取/写入文件而不必更改设置或传递参数?一个终端用户不会想为此烦恼。
谢谢。 :)
答
为了解决这个问题的起源,建立了一个网络服务器,并通过本地主机托管您的网页。
如果您要发布基于HTML的应用程序,则可能会在应用程序中包含Web服务器。
另一种方法是尝试NW(以前称为NodeWebkit),其中包括具有非常高权限的Chromium,可以让您完成这项工作。
这是相当基础的假设,为什么这工作,并且没有理由的意见。但Chrome和IE是属于某公司的产品,而Mozilla基金会支持Firefox。因此,商业公司为了他们的利益而在安全问题上采取更明智的做法是有道理的。与此同时,Mozilla基金会希望在技术上更具实验性,关于Brendan Eich(JavaScript的创造者)在Mozilla中是一个大个子。
[在Chrome中禁用相同来源策略]的可能重复(http://stackoverflow.com/questions/3102819/disable-same-origin-policy-in-chrome) – Hacketo
每个浏览器都有自己的本地文件保护策略。您可以更改它:https://wiki.fluidproject.org/display/fluid/Browser+settings+to+support+local+Ajax+calls – Krzysiek
Chrome不允许ajax运行'file:' – lshettyl