我有一个包含java脚本代码的文本区域:
<textarea id="jsCode">alert("done"); </textarea>
我有代码创建一个工具来评估这个javascript代码。这里jsCode的值是 - alert(&#34; done&#34;);
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和开发人员工具)
答案 0 :(得分:4)
WebWorker无权访问原始document
或window
对象。因此,它无法访问各自的功能。
某些功能在WebWorker中镜像,但alert()
不是其中之一。没有意义,因为WebWorker无论如何都无法访问任何形式的视觉输出。
根据浏览器的不同,console
对象也是如此。但是,有一些工作要改变这一点。例如,参见Firefox bug report。
至于调试,你至少有选择:
在WebWorker中定义onerror
处理程序以捕获所有错误,并将(序列化的)错误消息发送到原始文档以进行输出。
根据this blog entry,您可以使用Chrome开发工具直接调试WebWorker。