我想搞乱语音识别API,所以我从简单的页面开始,点击body元素开始识别。我的scripts.js文件是:
var recognition = new window.webkitSpeechRecognition();
document.body.addEventListener("click", recognition.start, false);
现在当我点击body元素上的任何地方时,我在Chrome控制台中出现了一个奇怪的错误:
Uncaught TypeError: Illegal invocation
它指的是我的HTML代码的第一行。我的HTML文件是:
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<script src="scripts.js"></script>
</body>
</html>
如何解决这个奇怪的错误?
答案 0 :(得分:3)
你失去了背景:
document.body.addEventListener("click", recognition.start, false);
等于:
var start = recognition.start;
document.body.addEventListener("click", start, false);
所以在开始之内,这个将引用 window ,而Windows无法说话。要解决它,请绑定:
document.body.addEventListener("click", recognition.start.bind(recognition), false);
或使用中间的函数:
document.body.addEventListener("click", _=>recognition.start(), false);