【问题标题】:Web Workers and Reference ErrorWeb Worker 和引用错误
【发布时间】:2015-02-24 20:29:19
【问题描述】:

我有一个包含 java 脚本代码的文本区域:

        <textarea id="jsCode">alert("done"); </textarea>

我有代码可以创建一个 Worker 来评估这个 javascript 代码。这里 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 的一部分传递的警报时,会发生这种情况。怎么可能做这样的评估?

未捕获的引用错误:未定义警报

也无法查看发布在工作人员内部的任何控制台消息,因此我无法调试(使用 Chrome 和开发人员工具)

【问题讨论】:

    标签: javascript eval web-worker


    【解决方案1】:

    WebWorker 无权访问原始 documentwindow 对象。因此它无法访问相应的功能。

    其中一些功能在 WebWorker 内部进行了镜像,但 alert() 不是其中之一。没有意义,因为 WebWorker 无论如何都无法访问任何形式的视觉输出。

    根据浏览器的不同,console 对象也是如此。不过,有一些工作可以改变这一点。参见,例如,这个Firefox bug report

    至于调试,你至少可以选择:

    • 在 WebWorker 内部定义一个 onerror 处理程序以捕获所有错误,并将(序列化)错误消息发送到原始文档以进行输出。

    • 根据this blog entry,您可以直接使用 Chrome 开发工具调试 WebWorker。

    【讨论】:

    • 正确,所以我使用的两个功能(警报和控制台)在工作线程中都不好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2016-11-30
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多