我的理解是iPhone上的Safari不会从异步线程播放音频(html5)。这是为了限制音频的播放,使其仅仅是对用户交互的响应,例如点击按钮。但是,这对我来说是一个问题。我希望通过单击按钮来播放声音,但是单击按钮后,我需要建立要播放的mp3文件的地址,我目前通过异步AJAX调用来执行此操作,如下所示:
function play() {
$.ajax({
url: 'http://apifree.forvo.com/etc/etc', jsonpCallback: "pronounce", jsonp: false, cache: true, dataType: "jsonp",
success: function (json) {
if (json.items.length !== 0) {
_player.src = json.items[0].mp3path;
_player.load();
}
},
error: function () {
}
});
}
正如你所看到的,我在回调中调用了_player.load()(以及随后的_player.play()),这在iphone上不起作用,但可以在我的电脑上运行。如何使此AJAX调用同步或如何解决此问题?
以下是展示问题的两个小提琴:
Asyncronous _player.load()无法在iPhone上工作但在PC上工作:http://jsfiddle.net/8muHa/27/
Syncronous _player.load()在iPhone和PC上运行:http://jsfiddle.net/8muHa/28/
答案 0 :(得分:1)
如果必须异步加载文件名,可以预取它吗?如果没有太多这些,只需预取值(例如,当用户导航到您网站的此部分时),然后在点击按钮时调用_player.play()
。