我有一个具有Java脚本代码的文本区域:
<textarea id="jsCode">alert("done"); </textarea>
我有创建用于评估此javascript代码的Worker的代码。此处jsCode的值为-alert(“ done”);
var jsCode=$("#jsCode").val();
var worker = new Worker("worker.js");
worker.addEventListener('message', function(e) {
console.log('Worker said: ', e.data);
}, false);
worker.postMessage(jsCode);
我的worker.js如下:
self.addEventListener('message', function(e) {
eval(e.data);
self.postMessage(e.data);
}, false);
当我运行此文件时,出现参考错误。我认为这是在尝试评估作为从文本区域获得的e.data的一部分传递的警报时发生的。如何进行这种评估?
未被捕获的ReferenceError:未定义警报
也无法查看工作进程中发布的任何控制台消息,因此无法调试(使用Chrome和开发人员工具)
最佳答案
WebWorker无法访问原始的document
或window
对象。因此,它无法访问各个功能。
有些功能已在WebWorker内部镜像,但是alert()
不是其中之一。毫无意义,因为WebWorker始终无法访问任何形式的视觉输出。
取决于浏览器,console
对象也是如此。但是,有一些工作可以改变这一点。参见例如此Firefox bug report。
至于调试,至少要有以下选择:
在WebWorker中定义一个onerror
处理程序以捕获所有错误,并将(序列化的)错误消息发送到原始文档以进行输出。
根据this blog entry,您可以直接使用Chrome Dev Tools调试WebWorker。
关于javascript - 网络 worker 和引用错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27675559/