0

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

4

1 回答 1

1

如果一定要异步加载文件名,可以预取吗?如果其中没有太多,那么只需预取值(例如当用户导航到您网站的此部分时)然后_player.play()在他们单击按钮时调用就可以了。

于 2013-07-23T00:17:09.310 回答