npm NodeJS `isolated-vm`:如何在isolate内部引用函数

nc1teljy  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(160)

下面的代码:

const ivm = require('isolated-vm');

const isolate = new ivm.Isolate();
const context = isolate.createContextSync();

context.setSync('log', new ivm.Callback(x => console.log(x)));
// receives a function and triggers it on an interval
context.setSync('onEvent', new ivm.Callback((handler) => {
   setInterval(() => handler(), 1000)
}));

const script = isolate.compileScriptSync(`onEvent(() => log('hello'))`);
script.runSync(context);

字符串
产生以下错误:

function '() => log('hello')' could not be cloned


我理解为什么一个函数不能从一个隔离点复制到另一个隔离点,但是我想返回一个对那个回调的引用,这样我就可以在以后用ref.apply(..)触发它。
如何从隔离内部获取对函数的引用?

  • (不将ivm模块本身暴露于不安全的隔离物)*
vngu2lb8

vngu2lb81#

我用

context.evalClosureSync(`
  globalThis.console = {
    log: $0
  }
`,
[
   (...args) => console.log(...args)
]);

字符串
这段代码能解决你的问题吗?

相关问题