加载非托管HTML5应用程序的外部文件

时间:2012-08-27 04:53:20

标签: html5 xmlhttprequest

我目前正在开发一款加载外部资源的HTML5游戏。目前,我正在使用XMLHttpRequest读取文件,但这不适用于Chrome,导致

XMLHttpRequest cannot load file:///E:/game/data.txt
Cross origin requests are only supported for HTTP.

该文件与HTML5文件位于同一目录中。

问题:

  1. HTML5应用程序是否有任何方法可以使用XMLHttpRequest(或 其他方法)加载外部文件而不需要它 托管在网络服务器上?

  2. 如果我将HTML5代码打包为平板电脑/手机上的应用程序 它支持HTML5,XMLHttpRequest能够加载外部 文件?

1 个答案:

答案 0 :(得分:1)

  1. (a)是和否。作为安全策略的问题,XHR传统上都是同一协议(即:http://,而不是file:///),并且最重要的是,传统上也是同一个域(如:在同一个子域中 - http://pages.site.com/index无法从http://scripts.site.com/获取文件。跨域请求现在可用,但无论如何都需要Web服务器,托管该文件的服务器必须专门接受该请求。

    (b)所以以迂回的方式,答案是肯定的,有些实现可能(错误地)允许您通过XHR获取文件,即使页面是以文件系统术语发言,而不是http请求(较旧)浏览器的版本......)但是否则你将需要一种或那种的网络服务器。好消息是它们很容易安装。 EasyPHP就足够了,它几乎是一个3点击的解决方案。还有无数其他人。如果你想要的只是一个apache中的文件服务器,并且你不打算使用服务器端脚本语言(或者如果你打算使用它),这只是脑关闭安装方面首先想到的。 PHP)。

  2. XMLHttpRequest绝对可以获取外部文件...
    IF 它们实际上是外部的(即:未捆绑在手机专用缓存中 - 使用手机的内置文件访问API,并编写包装器用相同的自定义界面处理每一个, 手机当前有接收 - 准备好处理故障条件(比如有一个默认设置对象,或者有错误处理或任何最好的情况,对于任何遗漏的东西)。

    另外,请查看Application Cache Manifests。同样,这是一个html5解决方案,不同版本的不同手机处理方式不同(早期与更标准化的格式)。 在开发过程中不要使用它,因为它会使代码/内容更改变得缓慢而痛苦 ,但是当您的产品完成并且没有错误时,它非常有用,并且距离发布几秒钟,您可以告诉用户的浏览器永久缓存所有内容,以便他们可以脱机播放,并且可以节省各种带宽,而不必在下次播放时下载所有内容。