语音更改事件未在 Safari 中触发
voiceschanged event not fired in Safari
据
我所知,voiceschanged事件不会在Safari中触发,无论是在Mac上还是在iOS上。同样奇怪的是,它似乎也没有在iOS上的Chrome中触发,但我假设iOS上的Chrome使用与Safari相同的JavaScript引擎。
这是我用来验证的一个演示:http://jsbin.com/gosaqihi/9/edit?js,console(取自获取语音中的声音列表Chrome(Web Speech API)合成)
我也尝试过使用addEventListener:
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)在Chrome for Windows,Android和Mac中都可以正常工作,但在Chrome for iOS和Safari for Mac和iOS上失败。据我所知,Safari 根本不会触发语音更改事件。
更复杂的是,我实际上并不拥有任何Apple设备,所以我不得不通过让朋友尝试来解决这个问题。
我需要在 Safari 中做一些特别的事情来获取声音列表吗?还是语音合成 API 尚未(完全)实现?
显然,到目前为止,Safari 只对 Web 语音 API 提供部分支持。
为了使代码在不同环境中工作,您可以做的是检测onvoiceschanged
是否存在于speechSynthesis
中。如果没有,您可以只打电话给speechSynthesis.getVoices()
而不听onvoiceschanged
。
function doVoices() {
var voices = speechSynthesis.getVoices(),
// ...
}
if ('onvoiceschanged' in speechSynthesis) {
speechSynthesis.onvoiceschanged = doVoices;
} else {
doVoices();
}
相关文章:
- Safari扩展中是否有任何Safari Popover隐藏事件
- 在移动 Safari 上向下拖动时,触摸事件停止触发 - iPad HTML5
- 在iPad上运行时,Mobile Safari中即将切换选项卡的Pagehide事件不会触发
- 如何将Javascript事件附加到移动Safari后退按钮
- HTML中的onclick事件<选择>无法运行Chrome和Safari
- 在 Safari 浏览器 (iOS 7) 上,在捏合缩放下调整事件大小,仅在横向缩放中
- 语音更改事件未在 Safari 中触发
- Mobile Safari 忽略了我的自动对焦 jQuery 事件
- 在点击事件上从父窗口调用子窗口的功能在 Safari 和 Chrome 上不起作用
- Onchange 事件未在 Safari 浏览器中触发
- 使用Apple Script选择带有*浏览器事件*的Safari下拉菜单
- 控制Apple Ipad上的事件's Safari
- 奇怪的点击事件气泡在iPhone safari上,它在冒泡到document.body之前停止
- 重新加载页面时未在 Safari 上触发加载事件
- 绑定到触摸启动事件,导致自动对焦集中在Mobile Safari中的任何单击上
- 动态创建的ahref点击事件在firefox或safari中不起作用
- Safari上的Colorbox关闭事件没有响应
- 移动Safari中的Google Maps v3 InfoBox事件传播
- Safari中没有密钥设置事件
- iPad Safari-文本选择事件