Mat*_*man 14 javascript safari jquery html5-audio
我使用这个简单的代码处理HTML5音频标签:
HTML
<audio id="audioFrenata">
<source src="sounds/frenata.ogg">
<source src="sounds/frenata.mp3"></audio>
Run Code Online (Sandbox Code Playgroud)
JS
$('#audioFrenata').on('ended', function() {
manageImageObjectsLevel();
}).get(0).play();
Run Code Online (Sandbox Code Playgroud)
使用Chrome,这可以正常工作,Windows上的Safari 5.1.7和iPad 3上的Safari我收到:
'undefined' is not a function (evaluating '$('#audioFrenata').on('ended', function() {
manageImageObjectsLevel();
}).get(0).play()')
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么?
Las*_*sen 16
我遇到了完全相同的问题,我发现这是由于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
};
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29613 次 |
| 最近记录: |