使用 Tampermonkey,我设置了一个脚本来监视网页并在满足一组条件时提醒我。
只要页面有焦点并且与之交互不是脚本的重点,它就可以正常工作。它旨在在后台监视页面(打开选项卡但未选中)。
这似乎是由于 chrome 的
Autoplay policy
,正如控制台警告所解释的那样:
AudioContext 不允许启动。它必须在页面上的用户手势后恢复(或创建)。 https://developer.chrome.com/blog/autoplay/#webaudio
有没有办法绕过这个限制? 否则,请随意提出实现以下目标的任何其他方法:在 Tampermonkey 中,只要在给定页面上满足给定条件,就会按需启动音频警报。页面打开但不一定有焦点。
工作片段:
let audioCtx = new (window.AudioContext || window.webkitAudioContext)();
const url = 'https://assets.mixkit.co/active_storage/sfx/1005/1005.wav';
function playAlarm() {
GM.xmlHttpRequest({
method: "GET",
url: url,
responseType: 'arraybuffer',
onload: function(response) {
let playsound = (audioBuffer) => {
let source = audioCtx.createBufferSource();
source.buffer = audioBuffer;
source.connect(audioCtx.destination);
source.loop = false;
source.start();
// recursive call!
setTimeout(function () {
playsound(audioBuffer);
}, 10000 + Math.random()*2500);
};
audioCtx.decodeAudioData(response.response).then(playsound);
}
});
}