1

我目前正在开发一个加载外部资源的 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 是否能够加载外部文件?

4

1 回答 1

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

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

  2. XMLHttpRequest 绝对能够获取外部文件...
    如果它们实际上是外部文件(即:未捆绑在特定于手机的缓存中 - 为此使用手机的内置文件访问 API,并编写一个包装器来处理每个都具有相同的自定义界面),并且电话当前具有接收功能-准备好处理故障条件(例如具有默认设置对象,或具有错误处理或任何最佳情况,无论是什么失踪)。

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

于 2012-08-27T05:10:26.000 回答