我遇到了完全相同的问题,我发现这是由于 Safari 中的以下限制:
在 iOS 上的 Safari(适用于所有设备,包括 iPad)中,用户可能在蜂窝网络上并按数据单位收费,预加载和自动播放被禁用。在用户启动数据之前不会加载数据。这意味着 JavaScript play() 和 load() 方法在用户开始播放之前也是不活动的,除非用户操作触发了 play() 或 load() 方法。换句话说,用户启动的播放按钮有效,但 onLoad="play()" 事件无效。
参考:http: //developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html
解决它的一种方法是默认静音,当用户“取消静音”时,您可以创建 HTML5 音频对象的实例并将其存储在“静态”/“全局”变量中,并进一步使用它回放。
- 更新
这是描述该问题以及如何处理它的博客文章:http: //blog.gopherwoodstudios.com/2012/07/enabling-html5-audio-playback-on-ios.html
这是一个类似的 stackoverflow 问题,讨论的是同一件事:Autoplay audio files on an iPad with HTML5
下面是我编写的一个 JavaScript“模块”,用于处理 HTML5 中的音频播放:
NS.modules.html5.audio = (function () {
var _snd = false;
function playAudio(src) {
if (!_snd)
_snd = new Audio();
else
$(_snd).empty();
for (var i = 0; i < src.length; i++) {
var source = document.createElement('source');
source.type = src[i].type;
source.src = src[i].src;
_snd.appendChild(source);
}
_snd.load(); // Needed on safari / idevice
_snd.play();
};
var playAudio = function () {
var src = [
{ src: "/path/to/audio.wav", type: "audio/vnd.wave" },
{ src: "/path/to/audio.ogg", type: "application/ogg; codecs=vorbis" },
{ src: "/path/to/audio.mp3", type: "audio/mpeg" }
];
playAudio(src);
};
return {
playAudio: playAudio,
// more play functions here
};
})();