为什么我一直收到此错误?
我应该可以使用这个全局函数吗?
http://www.html5rocks.com/en/tutorials/workers/basics/
我正在使用chrome。
我正在使用https://code.google.com/p/bitjs/,它以
开头importScripts('io.js');
importScripts('archive.js');
答案 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 */