AudioContext 不允许启动。它必须在页面上的用户手势后恢复(或创建)

问题描述 投票:0回答:0

使用 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);
        }
      });
    }
javascript greasemonkey tampermonkey userscripts
© www.soinside.com 2019 - 2024. All rights reserved.