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

IOS Safari 8.1.3 WebAudio API doesn't stop in sleep mode

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

一切都按照要求完美运行。现在,当我按下主页按钮时,画外音立即停止,但背景音乐仍在播放。此外,如果我恢复 safari,画外音会从停止的地方继续播放。

我想到了几个解决方案:

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

  2. 使用 "pagehide" 和 "pageshow" 事件来了解浏览器进入睡眠状态或从睡眠状态恢复。这对我有用,但不适用于所有设备。我正在多台 iPad 上检查这个,它们都是 IOS 8。但奇怪的是,在某些 iPad 上,事件根本没有被触发。

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

使用页面可见性 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);
}