IOS Safari 8.1.3 WebAudio API不会在睡眠模式下停止

时间:2015-03-30 16:20:15

标签: ios html5 safari web-audio

在HTML5 for IOS 8.1.3 Safari浏览器中。我正在使用背景音乐,使用AudioContext循环播放。最重要的是,一些语音音频随机出现,我使用了普通的音频对象(var _audio = new Audio())。

根据需要,所有工作都绝对完美。现在,当我按下主页按钮时,语音立即停止,但背景音乐继续播放。此外,如果我恢复野生动物园,请从已停止的地方继续播放声音。

我想到了几个解决方案:

  1. 不要对上下文使用loop属性。在结束回调时重新播放上下文。但这在我的情况下是不可能的。

  2. 使用“pagehide”和“pageshow”事件来了解浏览器进入或退出睡眠状态。这对我有用,但不适用于所有设备。我在多台iPad上检查这一点,所有这些都是IOS 8.但奇怪的是,在一些iPad中,事件根本没有触发。

  3. 所以我被困在这里。任何建议将不胜感激。感谢。

1 个答案:

答案 0 :(得分:2)

使用页面可见性API可能会有更多成功。它有很好的support across browsers and devices。要覆盖所有供应商前缀:

var hidden, visibilityChange;

function onVisibilityChange() {
    if (document[hidden]) {
        // hidden, stop audio
    } else {
        // shown, restart audio
    }
}

if (typeof document.hidden !== 'undefined') {
    hidden = 'hidden';
    visibilityChange = 'visibilitychange';
} else if (typeof document.mozHidden !== 'undefined') {
    hidden = 'mozHidden';
    visibilityChange = 'mozvisibilitychange';
} else if (typeof document.msHidden !== 'undefined') {
    hidden = 'msHidden';
    visibilityChange = 'msvisibilitychange';
} else if (typeof document.webkitHidden !== 'undefined') {
    hidden = 'webkitHidden';
    visibilityChange = 'webkitvisibilitychange';
}

if(visibilityChange !== undefined) {
    document.addEventListener(visibilityChange, onVisibilityChange, false);
}