检测Chrome / Safari中的speechSynthesis API中的暂停

时间:2015-09-23 11:57:16

标签: javascript google-chrome mobile-safari text-to-speech speech-synthesis

我们正在使用speechSynthesis API向用户读取文本。我们希望为用户提供暂停输出的选项,并且有speechSynthesis.pause()和speechSynthesis.resume()方法。

根据文档,speechSynthesis对象上还应该有一个标志,speechSynthesis.paused表示暂停状态。这个指示似乎不起作用,我们可以暂停speechSynthesis,但似乎没有可能的方法来跟踪暂停状态,并且语音合成对象上的暂停标志保持为假。甚至speechSynthesis.speaking标志在暂停时也保持为真!

我们可以手动跟踪状态,但如果用户在暂停时刷新标签,则可能是我们失去了自定义跟踪。

我们使用的API是错误的还是仅仅是错误的?

http://blog.teamtreehouse.com/getting-started-speech-synthesis-api

1 个答案:

答案 0 :(得分:1)

我修改了引用文章中的CodePen以添加暂停/恢复按钮:http://codepen.io/anon/pen/MKEdZp

在我的Mac上,Safari 9.0.2和Firefox 45.0a2似乎表现得如预期一样(但Chrome 47.0.2526.111很挑剔)。

即使speechSynthesis.speaking = true

,以下代码也会显示window.speechSynthesis.paused = true
// Set up an event listener for when the 'pause' button is clicked.
button2.addEventListener('click', function(e) {
  console.log("window.speechSynthesis.speaking = " + window.speechSynthesis.speaking);
  console.log("window.speechSynthesis.paused = " + window.speechSynthesis.paused);

  if (window.speechSynthesis.speaking) {
    if (window.speechSynthesis.paused) {
      window.speechSynthesis.resume();
      button2.innerText = "Pause";
    } else {
      window.speechSynthesis.pause();
      button2.innerText = "Resume";
    }
  }
});

可能是自原始帖子以来已修复的错误API。