使用File:///打开网页,AJAX在Firefox中工作但在Chrome或IE中不工作

4
我有一个网页作为配置编辑器,这意味着它将通过打开.html文件而不是使用http来访问。
这个页面需要访问另一个文件(要编辑的配置文件),该文件位于同一目录中。使用相对路径General.json访问文件。
            var getJSONFileContent = function( url ) {
                return $.ajax({
                    type: "GET",
                    url: url,
                    async: false
                }).responseText;
            };

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

这段代码在火狐浏览器上完美运行,无需更改任何设置,但在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

网络浏览器错误:

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

我读到了一些关于Chrome(和可能是IE和其他浏览器)由于安全原因禁止此操作的信息,并且必须使用特殊参数启动Chrome才能绕过此限制。

但是为什么在Firefox上可以工作?有没有办法让它在Chrome上不需要传递特殊参数就能正常工作?

是否有Chrome特定的功能可允许我读写文件,而无需更改设置或传递参数?最终用户不希望被打扰。


可能是在Chrome中禁用同源策略的重复问题。 - Hacketo
每个浏览器都有自己的本地文件保护策略。您可以更改它:https://wiki.fluidproject.org/display/fluid/Browser+settings+to+support+local+Ajax+calls - Krzysiek
1
Chrome不允许在“file:”下运行ajax。 - lshettyl
1个回答

1
  • 为解决源问题,请设置一个 Web 服务器并通过 localhost 托管您的页面。

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

  • 另一种方法是尝试使用 NW(以前称为 NodeWebkit),它包括具有非常高权限的 Chromium,允许您完成此工作。


这种工作是否可行很大程度上是基于个人看法。然而,Chrome和IE都属于一些公司的产品,而Firefox得到Mozilla基金会的支持。因此,商业公司在安全问题上表现得更为谨慎是有道理的,因为这关系到它们的利益。同时,Mozilla基金会希望在技术方面更具实验性,毕竟JavaScript的创造者Brendan Eich就是Mozilla的重要人物之一。

感谢您的帮助。虽然在我的情况下,我不能要求最终用户设置Web服务器来编辑配置文件。这就是为什么我正在寻找一种编程方式来完成这个任务。 - Virus721
@Virus721 你可以尝试我的答案中的第二和第三种方法。我个人更喜欢NW。 - Leo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接