Safari 不使用应用程序缓存清单

Safari not utilizing application cache manifest

我正在构建一个 HTML5 网页游戏,准确地说是经典小行星游戏的衍生版。我 运行 遇到的问题是,与 Chrome 或 Firefox 不同,Safari 不会自动缓存和使用 .wav 声音文件。如果出现大量声音,这将导致严重的延迟。在每次需要 "shooting" 声音的情况下,浏览器将执行一个新的 GET 请求以获取音频文件,如下所示:

你会看到151013__bubaproducer__laser-classic-shot-2.wav是通过网络一遍又一遍请求的射击声音,没有被缓存。为了强制 Safari 缓存此文件,我创建了一个 Asteroids.manifest 文件供应用缓存使用:

是的,这是相对于 index.html 和 Asteroids.manifest 的正确目录位置。清单文件似乎已被消耗,因为它在 Safari 的调试器存储中可见:

如果您有任何建议,请告诉我,因为我尝试了 .manifest 文件的各种不同设置,包括将其命名为 .appcache,确保它以 [= 的 MIME 类型提供30=],并删除 NETWORK/CACHE/FALLBACK 字段

编辑注释:window.applicationCache.status() 为 1(空闲)

我认为即使在清单文件中列出,Safari 也不会缓存音频文件。您是否尝试过将音频编码为 BASE64 字符串并在启动时将 decode/convert 编码回音频?看看 WepApi,它可能会帮助你完成这个过程。

如果您指的是移动设备,那么这里有一些帖子:HTML5 offline video caching in mobile safari

总而言之,移动版 Safari 中的缓存有大约 5mb 的限制。桌面上可能有类似的东西。另一位发帖者表示,音频和视频不会被 iPhone 缓存,因为它们是由外部应用程序播放的。似乎唯一的解决方法是将它们作为 base64 存储在本地数据库中(或者也可能是本地存储? - 请记住 "in private" 浏览会禁用它)。

如果没有,如果您确实计划以移动版本为目标,也许需要考虑一些事情。