我可以生成一个 Web Worker 并从父"process"注入 JavaScript 函数吗?



是否可以生成一个web工作程序,并以某种方式从父线程向其注入JavaScript函数?也就是说,不必让工作程序包含一个文件,而是希望父级以某种方式注入它。

一个选项是通过常规通道发送函数代码,并使用构造函数new Function()(或eval())重新创建函数。

在这两种情况下,您都应该检查实际传输的内容,以防止安全风险。

主脚本

// your function given as arguments and code
var funktion = {
  args: ['a', 'b' ],
  source: 'return a + b;'
};
// send it to your worker
worker.postMessage( funktion );

工人

self.addEventListener( 'message', function( msg ){
  // build array for constructor arguments
  var args = [ null ].concat( fk.a, fk.c );
  // create function
  var yourFunc = new (Function.prototype.bind.apply(Function, args));
  // use yourFunc
});

这使用了Function构造函数的动态使用,如本答案中所述。


使用eval()可能更简单,具体取决于函数代码的使用方式:

主脚本

// your function given as arguments and code
var funktion = "function add(a,b){ return a + b; }";
// send it to your worker
worker.postMessage( funktion );

工人

self.addEventListener( 'message', function( msg ){      
  // create function
  var yourFunc = eval( "(function(){ return " + funktion + "; })()" );
  // use yourFunc
});

最新更新