2015-01-05 1 views
1

내가 알 수있는 한, voiceschanged 이벤트는 Mac 또는 iOS에서 Safari로 실행되지 않습니다. 또한 이상한 점은 iOS에서도 Chrome에서는 실행되지 않는 것 같지만 iOS의 Chrome은 Safari와 동일한 자바 스크립트 엔진을 사용한다고 가정합니다. voiceschanged 이벤트가 Safari에서 실행되지 않음

speechSynthesis.addEventListener("voiceschanged", function() { 
    var voices = speechSynthesis.getVoices(), 
     keys = Object.keys(voices[0]), 
     i, j; 

    document.write("<table border=1><tr>"); 

    for (i = 0; i < keys.length; i++) { 
     document.write("<td>" + keys[i] + "</td>"); 
    } 

    document.write("</tr>"); 

    for (i = 0; i < voices.length; i++) { 
     document.write("</tr>"); 
     for (j = 0; j < keys.length; j++) { 
      document.write("<td>" + voices[i][keys[j]] + "</td>"); 
     } 
     document.write("</tr>"); 
    } 

    document.write("<table>"); 
}, false); 

두 가지 접근법이 (onvoiceschanged, 또는 addEventListener가) 크롬에서 잘 작동

: 나는 또한하여 addEventListener를 사용하여 시도했습니다

(Getting the list of voices in speechSynthesis of Chrome (Web Speech API)에서 가져온) http://jsbin.com/gosaqihi/9/edit?js,console을 : 여기

내가 확인하는 데 사용 데모입니다 Windows, Android 및 Mac의 경우 iOS 용 Chrome과 Mac 및 iOS 용 Safari에서는 실패합니다. 내가 말할 수있는 한, Safari는 단순히 음성으로 변경된 이벤트를 실행하지 않습니다.

복잡한 일들, 나는 실제로 어떤 Apple 장치도 소유하고 있지 않으므로 친구들에게 물건을 사용해보아야 만했습니다.

음성 목록을 얻으려면 Safari에서해야 할 특별한 기능이 있습니까? 아니면 음성 합성 API가 아직 완전히 구현되지 않았습니까?

답변

3

Apparently Safari는 지금까지 Web Speech API를 부분적으로 만 지원합니다.

코드가 서로 다른 환경에서 작동하도록하려면 onvoiceschangedspeechSynthesis에 있는지 감지해야합니다. 그렇지 않은 경우 onvoiceschanged 청취없이 speechSynthesis.getVoices()으로 전화하면됩니다.

function doVoices() { 
    var voices = speechSynthesis.getVoices(), 
    // ... 
} 

if ('onvoiceschanged' in speechSynthesis) { 
    speechSynthesis.onvoiceschanged = doVoices; 
} else { 
    doVoices(); 
} 
+0

감사합니다. 나는 이것이 어딘가에서 더 잘 기록되기를 바란다. : / – Asmor