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,画外音会从停止的地方继续播放。
我想到了几个解决方案:
不要对上下文使用循环 属性。在结束回调时重新播放上下文。但这在我的情况下是不可能的。
使用 "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);
}
在 HTML5 中 IOS 8.1.3 Safari 浏览器。我正在使用使用 AudioContext 连续循环播放的背景音乐。最重要的是,我使用了普通音频对象 (var _audio = new Audio())。
一切都按照要求完美运行。现在,当我按下主页按钮时,画外音立即停止,但背景音乐仍在播放。此外,如果我恢复 safari,画外音会从停止的地方继续播放。
我想到了几个解决方案:
不要对上下文使用循环 属性。在结束回调时重新播放上下文。但这在我的情况下是不可能的。
使用 "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);
}