Как я могу активировать ResponsiveVoice, как только страница загрузится?
Этот простой код отлично работает, когда я нажимаю кнопку "Play":
<html>
<head>
<script src="https://code.responsivevoice.org/responsivevoice.js"></script>
</head>
<body>
<input
onclick="responsiveVoice.speak('Lily, you can not just freeze me out like this.','US English Female'); responsiveVoice.speak('love you.','US
English Female');"
type="button"
value="Play"
/>
</body>
</html>
Однако, когда я попытался поместить его в функцию, вызываемую под нагрузкой, это не сработало:
<html>
<head>
<script src="https://code.responsivevoice.org/responsivevoice.js"></script>
<script type="text/javascript">
function read(){
responsiveVoice.speak('Lily, you can not just freeze me out like this.','US English Female');
responsiveVoice.speak('Love you.','US English Female');
}
</script>
</head>
<body onload="javascript:read();">
</body>
</html>
Вы знаете, в чем может быть проблема?
3 ответа
Если вы посмотрите на отзывчивый голосовой код, у них в коде будет странный тайм-аут ~200 миллисекунд:
a.enableFallbackMode()) : setTimeout(function() {
var b = setInterval(function() {
var c = window.speechSynthesis.getVoices();
0 != c.length || null != a.systemvoices &&
0 != a.systemvoices.length ? (console.log("RV: Voice support ready"),
a.systemVoicesReady(c),
clearInterval(b)) : (console.log("Voice support NOT ready"),
a.voicesupport_attempts++,
a.voicesupport_attempts > a.VOICESUPPORT_ATTEMPTLIMIT && (clearInterval(b),
null != window.speechSynthesis ? a.iOS ? (a.iOS9 ? a.systemVoicesReady(a.cache_ios9_voices) : a.systemVoicesReady(a.cache_ios_voices),
console.log("RV: Voice support ready (cached)")) : (console.log("RV: speechSynthesis present but no system voices found"),
a.enableFallbackMode()) :
a.enableFallbackMode()))
}, 100)
}, 100);
a.Dispatch("OnLoad")
Если вы попытаетесь использовать голос до истечения времени ожидания, вы попадете в консольный журнал:
1570RV: ОШИБКА: Голос не найден для: US English Женский
Что, по моему опыту, плохо и, вероятно, должно приводить к ошибке.
Если вы хотите продолжать использовать этот сценарий, единственное решение - подождать не менее 201 мс, чтобы дождаться загрузки всех голосов (но вы должны сделать это только один раз)
let readItOnce = false;
function read(){
const readIt = () => {
readItOnce = true;
responsiveVoice.speak('Lily, you can not just freeze me out like this.','US English Female');
responsiveVoice.speak('Love you.','US English Female');
}
if (!readItOnce) { setTimeout(readIt, 201)}
else { readIt(); }
}
Также сделайте то, что предлагается здесь: /questions/9410998/kak-ya-mogu-aktivirovat-responsivevoice-kak-tolko-stranitsa-zagruzitsya/9411005#9411005 в onload функции.
<html>
<head>
<script src="https://code.responsivevoice.org/responsivevoice.js"></script>
<script type="text/javascript">
let readItOnce = false;
function read(){
const readIt = () => {
readItOnce = true;
responsiveVoice.speak('Lily, you can not just freeze me out like this.','US English Female');
responsiveVoice.speak('Love you.','US English Female');
}
if (!readItOnce) { setTimeout(readIt, 201)}
else { readIt(); }
}
</script>
</head>
<body onload="read();">
</body>
</html>
Неправильно:
<body onload="javascript:read();">
против
Правильный:
<body onload="read();">
Просто подождите секунду, пока он загрузится, как они предлагают
<html>
<head>
<script src="https://code.responsivevoice.org/responsivevoice.js"></script>
<script type="text/javascript">
function read(){
responsiveVoice.speak('Lily, you can not just freeze me out like this.','US English Female');
responsiveVoice.speak('Love you.','US English Female');
}
setTimeout(function(){ read(); }, 1000);
</script>
</head>
<body>
</body>
</html>