首页 > 解决方案 > 为什么 addEventListener 不适用于在 vm nodejs 上运行的脚本?

问题描述

我正在尝试使用vm模块在隔离上下文中执行脚本nodejs,但是,由于我无法控制脚本(因为脚本来自用户),我无法避免用户使用addEventListener方法。我需要检测脚本何时抛出错误,因为try{}catch(){}在这种情况下不起作用。我正在使用 node 版本12.19.0和 electronjs 版本9.3.1,下面是代码:

var vm = require('vm'),
    fs = require('fs');
var sandbox = {
    createElement: function(tag_name){
        return document.createElement(tag_name);
    }
};
var script = new vm.Script(fs.readFileSync('script_path.js'));

//Create context
vm.createContext( sandbox );

//run
script.runInContext( sandbox );

该代码在脚本代码中使用时会失败addEventListener,例如:(script_path.js)

var element = createElement('p');
//If addEventListener is needed
element.addEventListener('click', function(){}, false);

如果我加载该脚本,窗口浏览器 (Electron) 会显示一个空白页面,并且控制台会断开连接。如果我添加一个 try-catch 来处理可能的错误,它也不起作用。

标签: javascriptnode.jselectron

解决方案


推荐阅读