我们希望制作一个基于音频的网络应用,它将包含许多声音片段。我们希望缓存这些文件,以便性能良好并且不依赖于网络速度。 HTML5可以将音频缓存为离线模式吗?
答案 0 :(得分:8)
在我看来,这个应该工作,我找不到任何文档说它不应该工作(无论是来自W3C还是来自像Apple这样的供应商),但是放音频文件作为缓存清单中的资源似乎不适用于iPad上的Safari& iPhone至少。
当应用程序处于联机状态时声音播放正常(虽然它似乎每次都重新加载它们并且不会缓存它们)并且它不会抱怨在脱机模式下不存在的资源(如果你立即执行忘记包含JavaScript,CSS,HTML或图像资源)。
而不是抱怨(或加载);如果元素有一个控件,控件被替换为“无法播放音频文件”的框。或者,如果它是一个没有控件的元素 - 即通过JavaScript全部访问.play() - 然后它只是不播放(它不会导致任何错误,没有声音,JavaScript否则继续执行正常)。
我用非常小的(&lt; 20k)文件测试了这个,结果是一样的,所以它似乎与大小无关,只是全面拒绝复制。 我不确定你是否可以将声音编码为页面中的资源(例如以base64编码),就像你对图像一样,但我会调查那个选项 - 我怀疑这是可能的。< / strike>我尝试将音频数据编码为数据URI字符串甚至尝试动态生成音频 - 在桌面上的Safari中工作正常但在iPhone / iPad OS上无法工作(至少在版本3.x上 - 我有没有在iOS 4上尝试过,但它不会出现一个星期,并且预计几个月内不会出现在iPad上,即使他们确实修复了它。)
我猜想拒绝在iOS中缓存声音文件是一个实现错误或意图有限的功能。对于很多用例而言,它确实令人讨厌并且显示出阻塞性。
我不确定其他HTML5客户端会发生什么,我有兴趣知道(特别是在Andriod上)。谷歌对音频的支持也不是很好,所以它也可能受到同样的限制。
答案 1 :(得分:1)
您始终可以开发与客户端SQLite DB对话的解码/编码层
答案 2 :(得分:0)
我认为您无法在cache manifest中指定音频文件。