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