我可以派生一个Web Worker并从父“”向其注入JavaScript函数吗;过程”;

Can I spawn a Web Worker and inject JavaScript functions into it from the parent "process"?

本文关键字:注入 JavaScript 过程 函数 派生 一个 Worker Web 我可以      更新时间:2023-09-26

是否可以生成一个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
});