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