自 M71 以来不再允许未经用户激活的 JavaScript speechSynthesis.speak()

新手上路,请多包涵

我以这种方式使用 speechSynthesis API:

 speechSynthesis.speak(new SpeechSynthesisUtterance("hello world"));

但是现在我在更新 Google Chrome 后收到错误消息:

[弃用] 自 2018 年 12 月左右的 M71 以来,不再允许没有用户激活的 speechSynthesis.speak()。有关详细信息,请参阅 https://www.chromestatus.com/feature/5687444770914304

我该如何解决这个问题并请求许可?

原文由 stepozer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 952
2 个回答

这是 Chrome 关于从网页发出声音的新政策的一部分。

您只需要您的用户在父文档的生命周期内提供一个用户手势(您可以 在此处 找到一个列表)(即,只要用户与页面进行过交互,该事件可能早就死了)。

请注意,这些事件甚至可以遍历框架,例如,在 StackOverflow 中,您必须单击“运行”按钮这一简单事实将使内部框架允许执行此代码:

 const ut = new SpeechSynthesisUtterance('No warning should arise');
speechSynthesis.speak(ut);

在您的代码中,您只需提供某种 UI,以确保您的用户在您调用此方法之前已与页面进行交互(例如,按钮/切换将完美地完成)。

原文由 Kaiido 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您在 chrome://settings/content/sound 中将您的站点地址设置为“可信”,即使没有用户交互,它似乎也能启用声音和语音合成。

我在电视中将 Chrome 用作系统监视器,使用 kiosk 模式并且没有任何用户交互。它甚至没有键盘和鼠标。不过,我可以在某些版本的 Chrome/Chromium 中启用,但不能在其他版本中启用。

原文由 TNT 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏