在code of the Webkit Speech Recognition之后(参见来源),我想在启动时捕获错误(例如,当您拒绝浏览器使用麦克风时)以执行其他操作。
问题是......我不知道如何抓住这个错误之王。
最终目标是将错误消息传递给尝试启动Webkit语音识别的对象。所以如果你有另一个(好的)解决方案来做到这一点。
我有这样的关系:
var anObject= {
recognizer : Recognizer,
listen : function() {
try{
this.recognizer.listen();
} catch (error) {
alert('I want to do something here with the error');
}
}
}
var Recognizer = {
listen: function()
{
var recognition = new webkitSpeechRecognition();
// recognition config
try{
recognition.start();
} catch (error) {
alert(error);
// I've also tried "throw error;" but we never pass in this catch
}
recognition.onerror = function(event) {
console.log(event.error); // this works
throw event.error; // the "exception" is thrown
}
// other functions
}
}
这不起作用,我不知道为什么。我得到了一个" Uncaught exception"所以异常被抛出,但没有被抓住。
谢谢你的帮助。
答案 0 :(得分:0)
您的两个示例代码都无法正常工作,因为异步调用onerror,而不是您的catch或条件语句捕获。
调用错误的函数的上下文是SpeechRecognition对象,而不是你试图捕获它的那个...最好的办法是从onerror函数中调用处理错误的对象。
这应该有效:
var Recognizer = {
listen: function()
{
var recognition = new webkitSpeechRecognition();
recognition.onerror = function(event) {
anObject.catchError(event);
}
recognition.start();
}
}
var anObject= {
recognizer : Recognizer,
listen : function() {
this.recognizer.listen();
},
catchError: function(event) {
switch (event.error) {
case 'network':
console.log('network error');
break;
case 'not-allowed':
case 'service-not-allowed':
console.log('permission denied by user or browser');
break;
}
}
}
anObject.listen();
没有自动方法来检测用户拒绝权限,浏览器拒绝权限,甚至是没有麦克风的用户之间的区别。
查看annyang Speech Recognition library,它使用一些额外的逻辑来找出错误的不同原因。它还涉及使用语音识别的所有其他令人头疼的问题,绕过可能导致浏览器崩溃的潜在错误,并使语音识别更加简单:https://www.talater.com/annyang/