Javascript window.speechSynthesis.speak(msg)在单击按钮之前不工作

Javascript window.speechSynthesis.speak(msg)在单击按钮之前不工作,javascript,google-chrome,text-to-speech,speech-synthesis,Javascript,Google Chrome,Text To Speech,Speech Synthesis,下面的简短页面不起作用。具体来说,“window.speechSynthesis.speak(msg)”在按下按钮之前不起作用。如果按下该按钮,则“Hello”消息有效。如果没有,则对“window.speechSynthesis.speak(msg)”的任何调用都不会产生任何音频输出 怀疑它与speechSynthesis的初始化有关——下面尝试了一些方法,以确保在调用“Hello”时初始化它。没有一个奏效。虽然看起来应该是这样。似乎只有在按下按钮调用它时,它才被正确初始化 无论是通过按钮调用

下面的简短页面不起作用。具体来说,“window.speechSynthesis.speak(msg)”在按下按钮之前不起作用。如果按下该按钮,则“Hello”消息有效。如果没有,则对“window.speechSynthesis.speak(msg)”的任何调用都不会产生任何音频输出

怀疑它与speechSynthesis的初始化有关——下面尝试了一些方法,以确保在调用“Hello”时初始化它。没有一个奏效。虽然看起来应该是这样。似乎只有在按下按钮调用它时,它才被正确初始化

无论是通过按钮调用还是通过超时调用,SpeechSynthesistTerrance本身的设置都是相同的。该设置在通过按钮调用时工作。但在被按钮调用之前,没有其他地方

这里怎么了

<!DOCTYPE html>
<html>

    <head>
        <title>Voice Test 3</title>
    </head>

    <body>

        <div id="header">User Interface Terminal</div>
        <input type="text" id="control_box"></input><br>
        <button id="startButton" onclick="voicemessage('Button');">start</button><br>
        <script>

            function voicemessage(ttstext) {
                var msg = new SpeechSynthesisUtterance(ttstext);
                msg.volume = 1;
                msg.rate = 0.7;
                msg.pitch = 1.3;
                window.speechSynthesis.speak(msg);
                document.getElementById('control_box').value = ttstext; 
            }


            window.speechSynthesis.onvoiceschanged = function() {
                document.getElementById('control_box').value = "tts voices recognized";
                window.setTimeout(function() {
                    voicemessage("Hello");
                }, 5000);
            };

            window.addEventListener('load', function () {
                var voices = window.speechSynthesis.getVoices();
            })

        </script>

    </body>

</html>

语音测试3
用户界面终端

开始
功能语音信息(ttstext){ var msg=新的演讲综合交流(ttstext); msg.volume=1; msg.rate=0.7; msg.pitch=1.3; window.speechSynthesis.speak(msg); document.getElementById('control_box')。value=ttstext; } window.speechSynthesis.onvoiceschanged=函数(){ document.getElementById('control_box').value=“tts语音识别”; setTimeout(函数(){ 语音留言(“你好”); }, 5000); }; window.addEventListener('load',函数(){ var voices=window.speechSynthesis.getVoices(); })
这可能是由于浏览器本身。。。
某些浏览器(Firefox和Chrome)的最新更新有防止访问音频的策略,除非某些用户交互触发音频(如单击按钮).

尝试通过调用setTimeout函数中的button.click()来绕过此问题。那是行不通的。是否有方法告诉浏览器信任此页面?您可以在初始化脚本之前尝试从用户处获取音频访问权限。。。(类似于您获得位置访问权限的方式)。。。