Javascript 使用文件打开页面://,AJAX在Firefox中工作,而不是Chrome或IE

Javascript 使用文件打开页面://,AJAX在Firefox中工作,而不是Chrome或IE,javascript,jquery,ajax,file,google-chrome,Javascript,Jquery,Ajax,File,Google Chrome,我有一个用作配置编辑器的网页,这意味着可以通过打开.html文件而不是使用http来访问它 此页面需要访问位于同一目录中的另一个文件(要编辑的配置文件)。使用相对路径General.json访问该文件 var getJSONFileContent = function( url ) { return $.ajax({ type: "GET", url: url,

我有一个用作配置编辑器的网页,这意味着可以通过打开.html文件而不是使用http来访问它

此页面需要访问位于同一目录中的另一个文件(要编辑的配置文件)。使用相对路径
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和其他浏览器)上是被禁止的,我必须用特殊参数启动Chrome来绕过这一点

但为什么它能在Firefox上运行呢?在运行Chrome时,有没有一种方法可以让它在Chrome上工作而不传递特殊参数

是否有特定于Chrome的功能允许我在不更改设置或传递参数的情况下读取/写入文件?最终用户不想为此烦恼。

  • 要解决来源问题,请设置web服务器并通过localhost托管您的页面

  • 如果您正在发布一个基于HTML的应用程序,您可能会在应用程序中包含一个web服务器

  • 另一种方法是试穿(以前称为NodeWebkit),其中包括一个具有非常高权限的Chromium,允许您完成这项工作



假设这样做的原因有效,而那样做无效,这是基于观点的。但是Chrome和IE是属于某公司的产品,而Firefox则是由Mozilla基金会支持的。因此,商业公司为了自身利益在安全问题上采取更明智的行动是有道理的。同时,Mozilla基金会希望在技术上更具实验性,关于布兰登·艾奇(JavaScript的创建者)在Mozilla中是一个大的。

每个浏览器的可能副本都有自己的本地文件保护策略。您可以更改它:Chrome不允许ajax在
文件:
上运行,谢谢您的帮助。尽管在我的上下文中,我不能要求最终用户仅仅为了编辑配置文件而设置web服务器。这就是为什么我在寻找一种程序化的方法来实现它。@Virus721您可以在我的答案中尝试第二种和第三种方法。我个人更喜欢NW。