JavaScript WebWorker未从onClick执行
我指定了一名网络工作者,如下所示:JavaScript WebWorker未从onClick执行,javascript,onclick,web-worker,Javascript,Onclick,Web Worker,我指定了一名网络工作者,如下所示: var w; function startWorker() { if(typeof(Worker) !== "undefined") { if(typeof(w) == "undefined") { w = new Worker("scripts/gameengine.js"); } w.onmessage = function(event) { conso
var w;
function startWorker() {
if(typeof(Worker) !== "undefined") {
if(typeof(w) == "undefined") {
w = new Worker("scripts/gameengine.js");
}
w.onmessage = function(event) {
console.log("Testing web worker");
};
} else {
console.log("No support for web workers");
}
}
function stopWorker() {
w.terminate();
w = undefined;
}
但是,;当我运行startWorker()时代码>从onClick函数中我得到错误:
Uncaught TypeError: undefined is not a function on line 117
第117行是w.terminate()
;在mystopWorker
中
有什么想法吗?如果单击处理程序触发两次,w
将在第二次调用时取消定义
出于以下原因,防御性编程是可取的:
代码应该只调用定义良好的东西;否则JS会阻止后面语句的执行
如果处理得当,console.log可以用来告诉您发生了什么
function stopWorker() {
if ( w && (typeof(w.terminate)==='function') ){
w.terminate();
w = undefined;
console.log('terminated worker per click request');
} else {
console.log('received click request to terminate worker, but worker undefined');
}
}
另外,请注意,上次我检查时,工作人员无法访问浏览器功能,只能将消息传递回主脚本。这意味着没有jQuery,没有事件处理,没有试图写入屏幕上的对象,等等。只是计算和消息传递。它不应该触发两次;但是我将尝试这样做。实现您的代码确实显示了第二个控制台日志;有什么可以避免的原因吗?我的onClick是基于在我创建的对象上悬停的结果。因此,如果检测到单击并将鼠标悬停在某个对象上,则应激活单击事件。您是否也获得了正确的行为以及第二次单击?否;我没有从startWorker()获取预期的控制台日志;它似乎从未被调用过。