2016-11-23 2 views
5

HTML5 연설, 나는 오류가HTML 연설

, 그것은 크롬과 파이어 폭스에서 작동

TypeError: Argument 1 ('utterance') to SpeechSynthesis.speak must be an instance of SpeechSynthesisUtterance

, 맥 10.0.1에 사파리에서 작동하지 않습니다 그리고 나는 Safari에서 작업하는 데 꽤 익숙하다고 확신합니다 ...

var u = new SpeechSynthesisUtterance(); 
u.text = "hello world"; 
u.lang = "en"; 
window.speechSynthesis.speak(u); 
+2

음, 이상합니다. 방금 같은 버전의 Safari (10.0.1)에서 테스트했는데 정상적으로 작동했습니다. –

+0

이 기능은 OS X 10.11.6에서 실행되는 Safari 10.0.1 (11602.2.14.0.7)에서도 유용합니다. 이 오류가 표시되는 Safari의 버전은 무엇입니까? OS X 10.0.1을 실행하는 경우 Safari의 이전 버전을 사용하고 있습니까? – Whymarrh

+0

버전은 Safari 10.0.1입니다. – James

답변

2

좋아요, 결국 알아 냈습니다. 내가 HTML5 연설없이 브라우저를 지원하는 몇 가지 호환성 코드를했다

,

if (SpeechSynthesisUtterance == undefined) { 
    function SpeechSynthesisUtterance(text) { 
     this.text = text; 
    } 
} 

이는 크롬과 파이어 폭스에서 작동하지만 사파리에 너무 스크립트 구문 분석 할 때 모든 스크립트의 모든 기능을 평가할 것 같습니다 SpeechSynthesisUtterance가 이미 존재하더라도 함수가 선언됩니다.

내가 다르게해야 할 것 같네요 ...

+1

아마도 다음과 같을 것입니다 : if (! window.SpeechSynthesisUtterance) {window.SpeechSynthesisUtterance = function (text) {this.text = text; }}', if 문의 명명 된 함수는 유효하지 않습니다. http://stackoverflow.com/questions/10069204/function-declarations-inside-if-else-statements –