0

Я пытаюсь поэкспериментировать с speechSynthesis API с помощью Eric's blog.speechSynthesis API не работает

This fiddle работает нормально, что означает, что для сайта есть no issue with the audio device permission (исправьте меня, если я ошибаюсь). Я сделал свой own fiddle, но, похоже, не работает (я имею в виду, что он не говорит Hello world).

Вот мой код:

function speak() { 
 
    var msg = new SpeechSynthesisUtterance('Hello world'); 
 
    msg.rate = 0.7; 
 
    msg.pitch = 1; 
 
    window.speechSynthesis.speak(msg); 
 
}
<button title="Click to listen" onclick="speak()"> 
 
     Say hello world 
 
</button>

Update: код работает здесь, как указывал enhzflep, но не в JSFiddle's editor

Любые предложения, добрые люди?

ответ

1

Hmmm.Well, фрагмент, который вы разместили здесь на этой странице, работает для меня, но скрипка, содержащая тот же код, не работает. Однако, если вы измените второй выпадающий список на "No wrap - in <head>", тогда все будет хорошо.

Это потому, что jsfiddle завернутого код в функцию, которая вызывается, когда документ загружен, например:

<script type="text/javascript">//<![CDATA[ 
window.onload=function(){ 
function speak() { 
    var msg = new SpeechSynthesisUtterance('Hello world'); 
    msg.rate = 0.7; 
    msg.pitch = 1; 
    window.speechSynthesis.speak(msg); 
} 
}//]]> 
</script> 

Делая это, код за пределами window.onload обработчика, в том числе инлайн JS в вашем HTML не может «видеть» вашу функцию speak.

Изменяя раскрывающийся, jsFiddle генерирует различные JS для фрейма, который показывает свой результат, например:

<script type="text/javascript">//<![CDATA[ 

function speak() { 
    var msg = new SpeechSynthesisUtterance('Hello world'); 
    msg.rate = 0.7; 
    msg.pitch = 1; 
    window.speechSynthesis.speak(msg); 
} 
//]]> 

</script>