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

时间:2011-01-15 11:39:53

标签: jquery json getjson

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

我知道在Chrome中使用此功能的问题 - Problems with jQuery getJSON using local files in Chrome。使用选项 - 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传递JSONLint验证器。

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

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

任何关于为什么会突然停止使用Firefox的提示或提示,将不胜感激。

1 个答案:

答案 0 :(得分:4)

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

来自here(强调我的):

  

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

     

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

     

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

<小时/> 来自PandaWood的脚注:我可以确认设置Firefox的 about:config - &gt; security.fileuri.strict_origin_policy 为false,因为您提供的链接显示,是立即修复