在Chrome中使用本地文件的jQuery getJSON问题

我有一个非常简单的testing页面 ,使用jQuery的$ .getJSON和$ .ajax方法使用XHR请求。 同一页面在某些情况下有效,而在其他情况下不起作用 具体来说,它不适用于Ubuntu上的Chrome。

我正在使用Chrome 5.0.342.7 betatestingUbuntu 9.10,使用Chrome 5.0.307.9testing版testingMac OSX 10.6.2。

  • 当从Ubuntu / Chrome和Mac / Chrome将文件安装到Web服务器上时,它可以正常工作( 在这里试试 )。
  • 在Mac / Chrome(通过file:/// …访问)文件安装在本地硬盘驱动器上时,它工作正常。
  • 在Ubuntu / Chrome中使用本地硬盘安装文件时失败 (使用file:/// …进行访问)。

可以从这里下载tar / gzip文件中的一小组3个文件: http : //issues.tauren.com/testjson/testjson.tgz

当它工作时,Chrome控制台会说:

XHR finished loading: "http://issues.tauren.com/testjson/data.json". index.html:16Using getJSON index.html:21 Object result: "success" __proto__: Object index.html:22success XHR finished loading: "http://issues.tauren.com/testjson/data.json". index.html:29Using ajax with json dataType index.html:34 Object result: "success" __proto__: Object index.html:35success XHR finished loading: "http://issues.tauren.com/testjson/data.json". index.html:46Using ajax with text dataType index.html:51{"result":"success"} index.html:52undefined 

当它不起作用时,Chrome控制台会显示:

 index.html:16Using getJSON index.html:21null index.html:22Uncaught TypeError: Cannot read property 'result' of null index.html:29Using ajax with json dataType index.html:34null index.html:35Uncaught TypeError: Cannot read property 'result' of null index.html:46Using ajax with text dataType index.html:51 index.html:52undefined 

注意它甚至不显示XHR请求,尽pipe成功处理程序正在运行。 我发誓这是以前在Ubuntu / Chrome工作,并担心有些事情搞砸了。 我已经卸载并重新安装了Chrome,但没有帮助。

有人可以在你的Ubuntu系统本地尝试它,并告诉我,如果你有任何麻烦? 请注意,它似乎在Firefox中正常工作。

这是Chrome的一个已知问题。

以下是错误跟踪器中的链接:

问题40787:本地文件不加载Ajax

另一种方法是在你的目录中启动一个本地HTTP服务器。 在安装了Python的Ubuntu和MacOs上,这是一个单线程。

转到包含您的Web文件的目录,并:

 python -m SimpleHTTPServer 

然后用任何networking浏览器连接到http:// localhost:8000 / index.html来testing你的页面。

在Windows上,Chrome可能安装在您的AppData文件夹中:

“C:\用户\\应用程序数据\本地\谷歌\镀铬\应用程序”

在执行命令之前,请确保您的所有Chrome窗口都已closures ,而不是以其他方式运行。 或者,命令行参数不会有效。

 chrome.exe --allow-file-access-from-files 

你可以把你的json放到js文件中并保存到全局variables中。 它不是asynchronous的,但它可以帮助。

解决此问题的另一种方法是利用Flash Player的本地安全沙箱和ExternalInterface方法。 可以通过JavaScript请求使用Local Only安全沙箱发布的Flash应用程序从硬盘加载文件,Flash可以通过Flash的ExternalInterface类将数据传回给JavaScript。 我已经在Chrome,FF和IE9中testing过了,效果很好。 如果有人感兴趣,我很乐意分享代码。

编辑:我已经开始执行谷歌代码(讽刺?)项目: http : //code.google.com/p/flash-loader/

@Mike在Mac上,在terminal中input:

 open -b com.google.chrome --args --disable-web-security