我有一个具有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无法访问原始的documentwindow对象。因此,它无法访问各个功能。

有些功能已在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/

10-11 20:36