Javascript:什么算是;用户与网页交互?“;

Javascript:什么算是;用户与网页交互?“;,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在尝试构建一个chrome扩展,当页面上的值发生变化时,它会播放一个音频文件,以提醒用户它已经发生了变化。有时它是有效的,但有时它说“play()”方法是不允许的,因为“用户没有与网页交互” 它通常会在网页首次加载时工作,但当在同一站点内导航时,它通常会抛出此错误 这个问题可以分为两个小问题: 在Chrome中,什么算是“用户交互”?我似乎找不到这方面的任何信息 是否有任何方法可以使用Javascript检查是否设置了“用户交互”标志 这与Web音频API有关。从: 浏览器已经开始实施自动播

我正在尝试构建一个chrome扩展,当页面上的值发生变化时,它会播放一个音频文件,以提醒用户它已经发生了变化。有时它是有效的,但有时它说“play()”方法是不允许的,因为“用户没有与网页交互”

它通常会在网页首次加载时工作,但当在同一站点内导航时,它通常会抛出此错误

这个问题可以分为两个小问题:

  • 在Chrome中,什么算是“用户交互”?我似乎找不到这方面的任何信息
  • 是否有任何方法可以使用Javascript检查是否设置了“用户交互”标志

  • 这与Web音频API有关。从:

    浏览器已经开始实施自动播放策略,这在 一般可概括为:

    “从用户手势内部创建或恢复上下文”

    这是为了防止网页在没有用户交互的情况下在页面加载时发出刺耳的声音。这些文件接着说明:

    但这在实践中意味着什么?一个用户手势已经被激活 解释为指用户发起的事件,通常为
    点击事件。
    浏览器供应商决定不允许使用Web音频上下文
    自动播放音频;它们应该由用户启动。
    这是因为自动播放音频真的很烦人而且
    咄咄逼人的但我们该如何处理呢

    创建音频上下文(脱机或联机)时 使用
    状态创建,该状态可以是
    挂起
    运行
    ,或
    关闭

    使用
    音频上下文时,如果您创建音频上下文
    在
    单击事件内部,应将
    状态自动设置为
    
    正在运行


    资料来源:

    好的,我想出来了

    该扩展现在在页面顶部附加了一个名为“激活”的按钮。单击该按钮时,它会调用:

    function checkVal(){
        if ( /*check if the value has changed*/ ){
            let myAudio = new Audio('my_audio.mp3');
            myAudio.play();
        }
        else{
            setTimeout(checkVal, 5);
        }
    }
    

    这有点老套,但对我来说是可行的。

    用户交互就是在网页上单击或滚动。可以通过编程方式触发这些事件,但当用户未专门触发某些事件以保护用户免受恶意代码攻击时,浏览器将阻止这些事件。如果这是Chrome安全功能,则在用户真正与页面交互之前,您可能无法执行任何操作,也许有必要接受这一点。到目前为止,您尝试了哪些代码来解决这个问题?既然这是一个chrome扩展,那么在页面上添加一个名为“激活”的无用按钮会满足用户交互,还是最好让该按钮启动一个异步循环,在变量更改时播放音频?IE:
    While(pageValue<0){donothing};音频播放()我的理解是,启动音频上下文只需要这个按钮。一旦启动,你可以用它做任何你想做的事。我可以在不立即播放音频的情况下启动音频上下文吗?是的,你可以这样做好。。。怎样?我真的不确定你指的是什么“音频上下文”。这仅仅是
    让myAudio=newaudio('file')