我的理解是 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/