使用本地文件的jQuery的.getJSON在Firefox 3.6.13上停止工作

突然之间,使用jQuery的.getJSON进行本地文件访问对我来说不适用于Firefox(3.6.13)。

我知道在Chrome中使用它的问题 – 使用Chrome中的本地文件的jQuery getJSON问题 。 使用选项–allow-file-access-from-files修复了该问题。 我现在拥有适用于IE,Chrome(如上所述)并且曾经在Firefox上工作的代码,直到现在。

给你一些背景:

// get the only json file var script = _.detect($('script').toArray().reverse(), function(script) { return script.type === 'application/json'; }); // script.src is now '../../json/foo/foo1.json' return $.getJSON(script.src, function(json) { alert('hello');// says 'hello' in IE, Chrome (with arg), used to work in Firefox }); 

具体来说,正如小代码片段所示,.getJSON调用无法返回并说’hello’ – 有问题的json文件位于本地文件系统上(例如file:///d/foo/bla.json)。 JSON传递JSONLintvalidation器。

我已经尝试禁用所有插件 – 我也有一个带有Ubuntu的虚拟机和安装在其上的Firefox(3.6.13)有相同的问题 – 几天前工作,现在没有。 据我所知,自上次工作以来,我的代码中没有任何内容发生了变化。 我只知道有人会因为忘记一些非常愚蠢的东西而打我。

Firefox没有显示任何错误。 这适用于Chrome和IE排除最明显的错误。

任何提示或提示,为什么这可能会突然停止在Firefox上工作,将不胜感激。

我认为这是由于Firefox中的一项新的安全function:您只能将本地请求发送到页面目录或页面子目录中的文件。

从这里 (强调我的):

在Gecko 1.8或更早版本中,任何两个文件:URI都被认为是同源的。 换句话说,本地磁盘上的任何HTML文件都可以读取本地磁盘上的任何其他文件。

从Gecko 1.9开始,允许文件只读取某些其他文件。 具体地说, 只有当原始文件的父目录是目标文件的祖先目录时,文件才能读取另一个文件 。 但是,目录无法以这种方式加载。

例如,如果你有一个访问另一个文件bar.html的文件foo.html,只有当bar.html与foo.html在同一目录中或者在与foo相同的目录中的目录中时,加载才会成功html的。


来自PandaWood的脚注: 我可以确认将Firefox的设置:config – > security.fileuri.strict_origin_policy设置为false,因为您提供的链接显示,是立即修复