0

我正在尝试通过以下代码在 Chrome 27 中使用网络语音 API -

$(function(){
    initRecognition();
});

function initRecognition(){
    if(window.recognition !== undefined){
        window.recognition.stop();
        window.recognition.start();
        // ^--- Exception is being thrown at this line
    }else{
        window.recognition = new webkitSpeechRecognition();
        window.recognition.onresult = function(event) {
          if (event.results.length > 0) {
            command.value = event.results[0][0].transcript;
            return execute();
          }else{
            command.value = "*&#^$&@^#?";
            return execute();
          }
        };
        window.recognition.continuous = true;
        window.recognition.start();
    }
}

function execute(){
    // some code
    initRecognition();
    return false;
}

当页面加载时,它会请求开始识别的权限。它识别一个单词或短语,然后停止并出现以下错误 -

Uncaught Error: InvalidStateError: DOM Exception 11
initRecognition
execute
window.recognition.onresult

似乎缺乏这方面的资源。因此在故障排除时遇到了一些麻烦。任何想法?

4

1 回答 1

0

似乎如果我设置continuous为,true我不必每次都这样做。我认为是导致问题的原因。所以我删除了这些声明,它工作正常。:)stop()start()stop()

$(function(){
    initRecognition();
});

function initRecognition(){
    window.recognition = new webkitSpeechRecognition();
    window.recognition.onresult = function(event) {
        console.log(event.results);
        console.log(event.results.length);
      if (event.results.length > 0) {
        command.value = event.results[event.results.length-1][0].transcript;
        return execute();
      }else{
        command.value = "*&#^$&@^#?";
        return execute();
      }
    };
    window.recognition.continuous = true;
    window.recognition.start();
}

function execute(){
    // some code
    return false;
}

虽然,出于某种原因,event.results它的行为就像一个堆栈 if continuous = true。所以我正在获取堆栈的最后一个结果。但我确信还有其他错误在等着我。

于 2013-05-30T13:21:49.753 回答