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

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

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

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

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

最佳答案

我修改了参考文章中的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可能已修复。

09-28 09:43