Я использую веб-API speechSynthesis в своем веб-приложении, я создал одну кнопку-переключатель, которая запускает, приостанавливает и возобновляет речьSynthesis. Также я создал еще одну кнопку, которая устанавливает источник в Iframe.
При запуске приложения в браузере firefox voiceSynthesis возобновляется сам по себе, когда я устанавливаю источник в Iframe.
Вот мой код (index.hrml):
<html>
<head>
<script>
var btnState = 'Start';
var ttsState = 'completed';
function toggleTTS() {
if (btnState === 'Start') {
if (ttsState === 'completed') {
StopTTS();
ttsState = 'started';
speak(document.getElementById("speakText").innerText);
document.getElementById('toggleBtn').innerHTML = "Pause";
} else {
ResumeTTS();
}
btnState = 'Stop';
} else {
PauseTTS();
btnState = 'Start';
document.getElementById('toggleBtn').innerHTML = "Resume";
}
}
function StopTTS() {
speechSynthesis.cancel();
}
function PauseTTS() {
if (!speechSynthesis.paused && speechSynthesis.pause) {
speechSynthesis.pause();
}
}
function ResumeTTS() {
if (speechSynthesis.pending || speechSynthesis.paused) {
speechSynthesis.resume();
}
}
function speak(text) {
var u = new SpeechSynthesisUtterance(text);
u.lang = 'en-US';
u.onend = (e) => {
console.log('completed')
ttsState = 'completed';
btnState = 'Start';
document.getElementById('toggleBtn').innerHTML = "Speak";
};
speechSynthesis.speak(u);
}
function setSrc(){
document.getElementById('dummyIframe').src = "index.html";
}
</script>
</head>
<body>
<button id="toggleBtn" onclick="toggleTTS()">Speak</button>
<button id="setSrcBtn" onclick="setSrc()">SetSrc</button>
<div id="speakText">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</div>
<iframe id="dummyIframe"></iframe>
</body>
<html>
Действия по воспроизведению ошибки:
- Запустите синтез речи, нажав кнопку «Говорить», и сделайте паузу между ними.
- Теперь установите источник в iframe, нажав кнопку «setSrc».
Ожидаемый результат: SpeechSynthesis должен оставаться в состоянии паузы.
Фактический результат: SpeechSynthesis самостоятельно возобновляет работу в браузере Firefox.
Примечание. Это происходит только в браузере Firefox, а не в других браузерах.