net*_*ger 30 javascript google-chrome web-worker
为什么我一直收到这个错误?
我应该可以使用这个全局函数吗?
http://www.html5rocks.com/en/tutorials/workers/basics/
我正在使用铬.
我正在使用https://code.google.com/p/bitjs/,它始于
importScripts('io.js');
importScripts('archive.js');
Run Code Online (Sandbox Code Playgroud)
小智 31
当你创建一个worker时,它实际上被执行了两次.第一遍是在全局"窗口"对象的上下文中(意味着您可以访问所有窗口对象函数).第二个调用是在具有不同全局对象的worker的上下文中,其中存在"importScripts".
// proper initialization
if( 'function' === typeof importScripts) {
importScripts('script2.js');
addEventListener('message', onMessage);
function onMessage(e) {
// do some work here
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,addEventListener位于if语句中.如果将它放在它之外,你的回调将被注册两次.一旦进入'窗口'全球,一旦进入工人的全球.
快乐的编码!
gm2*_*008 11
我也遇到了这个错误.在我的情况下,这是因为我正在使用Karma/Jasmine测试代码.由于测试框架,worker.js文件也由主线程加载.
我通过wrappig worker.js文件避免了这个错误:
if( 'undefined' === typeof window){
importScripts('workerscript2.js');
...
}
Run Code Online (Sandbox Code Playgroud)
请参阅Rob下面的评论,它提供了另一种解决方案.