我使用这个简单的代码处理HTML5音频标签:
HTML
<audio id="audioFrenata">
<source src="sounds/frenata.ogg">
<source src="sounds/frenata.mp3"></audio>
JS
$('#audioFrenata').on('ended', function() {
manageImageObjectsLevel();
}).get(0).play();
使用Chrome,这可以正常工作,Windows上的Safari 5.1.7和iPad 3上的Safari我收到:
'undefined' is not a function (evaluating '$('#audioFrenata').on('ended', function() {
manageImageObjectsLevel();
}).get(0).play()')
任何人都知道为什么?
我遇到了完全相同的问题,我发现它是由于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 Audio对象的实例并将其存储在“静态”/“全局”变量中,并将其用于进一步回放。
- 更新
这是一篇博客文章,描述了该问题以及如何处理它: http://blog.gopherwoodstudios.com/2012/07/enabling-html5-audio-playback-on-ios.html
这是一个类似的stackoverflow问题,讨论同样的事情: 使用HTML5在iPad上自动播放音频文件
以下是我编写的用于处理HTML5中音频播放的JavaScript“模块”:
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
};
})();
在我的情况下,问题是由HTML格式引起的,我切换到以下格式,它工作。希望这有助于某人:
<audio id="audioFrenata" src="sounds/frenata.ogg"></audio>
注意缺乏 <source>
上面布局中的元素。
检查您提到的浏览器是否支持您想要的HTML5功能。你可以检查一下 这里。希望这会帮助你。
ID似乎是错误的。
$('#audioLevel').on('ended', function() {
manageImageObjectsLevel();
}).get(0).play();
它假设是
$('#audioFrenata').on('ended', function() {
manageImageObjectsLevel();
}).get(0).play();
使用以下HTML
<audio id="audioFrenata" controls="controls">
<source src="sounds/frenata.ogg" type="audio/ogg">
<source src="sounds/frenata.mp3" type="audio/mpeg">
</audio>
参考 现场演示