未捕获的ReferenceError:未定义importScripts

时间:2013-01-24 11:19:22

标签: javascript google-chrome web-worker

为什么我一直收到此错误?

我应该可以使用这个全局函数吗?

http://www.html5rocks.com/en/tutorials/workers/basics/

我正在使用chrome。

我正在使用https://code.google.com/p/bitjs/,它以

开头
importScripts('io.js');
importScripts('archive.js');

4 个答案:

答案 0 :(得分:25)

创建工作人员时,实际执行了两次。第一遍是在全球“窗口”的背景下。对象(意味着您可以访问所有窗口对象函数)。第二个调用是在具有不同全局对象的工作者的上下文中,其中一个是“importScripts”。存在。

// proper initialization
if( 'function' === typeof importScripts) {
   importScripts('script2.js');
   addEventListener('message', onMessage);

   function onMessage(e) { 
     // do some work here 
   }    
}

请注意,addEventListener位于if语句中。如果将它放在它之外,你的回调将被注册两次。进入'窗口后'全球性和曾经在工人的全球化。

快乐的编码!

答案 1 :(得分:15)

此代码需要位于工作人员脚本中。工作人员本身是通过新的Worker对象创建的 - 请参阅Getting Started in the tutorial

您链接的代码位于创建的工作人员here内。

答案 2 :(得分:8)

我也遇到了这个错误。在我的情况下,这是因为我正在使用Karma / Jasmine测试代码。由于测试框架,worker.js文件也由主线程加载。

我通过使用:

包装worker.js文件来避免此错误
    if( 'undefined' === typeof window){
       importScripts('workerscript2.js');
    ...
    }

请参阅Rob的下面评论,它提供了另一种解决方案。

答案 3 :(得分:0)

如果这是您面临的 linting 问题,您可以在包含 importScripts 的文件中添加以下注释

/* eslint-disable no-undef */