【问题标题】:Opening a page using File:///, AJAX working in Firefox, not Chrome or IE使用 File:/// 打开页面,AJAX 在 Firefox 中工作,而不是 Chrome 或 IE
【发布时间】:2015-10-18 19:17:41
【问题描述】:

我有一个用作配置编辑器的网页,这意味着将通过打开 .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 的功能可以让我在无需更改设置或传递参数的情况下读取/写入文件?最终用户不想为此烦恼。

【问题讨论】:

标签: javascript jquery ajax file google-chrome


【解决方案1】:
  • 要解决来源问题,请设置 Web 服务器并通过 localhost 托管您的页面。

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

  • 另一种方法是尝试使用 NW(以前称为 NodeWebkit),其中包含具有非常高权限的 Chromium,可让您完成这项工作。


假设这行得通而那行不通的原因是基于意见。但是 Chrome 和 IE 是属于某个公司的产品,而 Firefox 是由 Mozilla 基金会支持的。因此,商业公司为了他们的利益在安全问题上采取更加明智的行动是有道理的。同时,Mozilla 基金会希望在技术上进行更多的实验,因为 Brendan Eich(JavaScript 的创建者)是 Mozilla 的大人物。

【讨论】:

  • 感谢您的帮助。尽管在我的上下文中,我不能真正要求最终用户设置 Web 服务器只是为了编辑配置文件。这就是为什么我一直在寻找一种程序化的方式来做到这一点。
  • @Virus721 您可以在我的回答中尝试第二种和第三种方法。我个人更喜欢西北。
猜你喜欢
  • 2016-02-05
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 2023-03-05
  • 2011-09-28
  • 2010-09-21
  • 2012-04-21
相关资源
最近更新 更多