ste*_*zer 6 javascript google-chrome speech-synthesis
我以这种方式使用了SpeechSynthesis API:
speechSynthesis.speak(new SpeechSynthesisUtterance("hello world"));
Run Code Online (Sandbox Code Playgroud)
但是现在更新Google Chrome后出现错误:
自2018年12月左右以来,自M71开始,不再允许未经用户激活的[Deprecation] speechSynthesis.speak()。有关更多详细信息,请参见 https://www.chromestatus.com/feature/5687444770914304。
如何解决此问题并寻求许可?
这是Chrome有关从网页发出声音的新政策的一部分。
您只需要您的用户在父文档的生存期内提供一个用户手势(您可以在此处找到列表)(即,只要用户与该页面进行了交互,该事件就很可能消失了)。
请注意,这些事件甚至可以遍历框架,因此,例如,在StackOverflow中,您必须单击“运行”按钮的简单事实将使内部框架可以执行以下代码:
const ut = new SpeechSynthesisUtterance('No warning should arise');
speechSynthesis.speak(ut);Run Code Online (Sandbox Code Playgroud)
并且在您的代码中,您只需要提供某种类型的UI,即可确保您的用户在调用此方法之前已与页面进行了交互(例如,按钮/切换将非常完美)。
如果您在 chrome://settings/content/sound 中将您的站点地址设置为“受信任”,即使没有用户交互,它似乎也能启用声音和语音合成。
我在电视中使用 Chrome 作为系统监视器,使用 kiosk 模式并且没有任何用户交互。它甚至没有键盘和鼠标。尽管如此,我仍然能够在某些版本的 Chrome/Chromium 中启用,但在其他版本中却无法启用。
这个错误意味着整个文档(网站)没有用户交互,谷歌浏览器更新了关于在没有用户交互的情况下从网站发出声音的政策。
用户交互意味着: click, dblclick, mouseup, pointerup, reset, submit etc.
解决方案:
因此,如果您想在speechSynthesis.speak();没有真正用户交互的情况下运行,那么您只需使用诸如.click()等方法创建临时用户交互。