speechSynthesis 是否允许 运行 没有用户交互的问题

The question of whether speechSynthesis is allowed to run without user interaction

似乎 speechSynthesis 似乎不允许 运行 在某些设备上有时没有用户交互。我的 PC 浏览器过去常常对此发出警告,但现在它可以工作了(我不知道我是否在此期间不小心更改了一些权限),而我的 Android 驱动的平板电脑似乎允许它来自 [= http 上的 11=],但在 https 上不允许从我的生产站点使用它。电话总是不允许的。

我想知道是否有某种方法可以确定 运行ning 设备是否允许它,以便我可以显示通知,或隐藏我的文本到语音转换选项应用程序?

它取决于浏览器。 Chrome,至少,过去默认情况下允许在没有用户交互的情况下进行语音,但现在改变了 a bit ago。一种 hacky 的检查方法是将 empty 语句排队,然后查看 SpeechSynthesis.speakingSpeechSynthesis.pending 是否为 true:

// Allowed:
btn.onclick = () => {
  speechSynthesis.speak(new SpeechSynthesisUtterance(''));
  const worked = speechSynthesis.speaking || speechSynthesis.pending;
  console.log(worked);
};
<button id="btn">click</button>

// Not allowed, silent failure:
speechSynthesis.speak(new SpeechSynthesisUtterance(''));
const worked = speechSynthesis.speaking || speechSynthesis.pending;
console.log(worked);

不幸的是,speechSynthesis.speak 不会抛出(甚至异步)由于首先没有用户交互而阻止语音的情况,因此检查 speaking 属性 看起来是唯一的其他方式。