对象 SandBox

安全沙箱对象,用于管理一个独立的运行空间

所有的代码都运行在自己的沙箱中,全局的 require 会调用当前沙箱加载模块,沙箱会通过 require 传递给加载的沙箱。下面的示例创建一个沙箱,限制只允许访问全局基础模块中的 assert 模块,并添加 a 和 b 两个定制模块:

var vm = require('vm');
var sbox = new vm.SandBox({
    a: 100,
    b: 200,
    assert: require('assert')
});

var mod_in_sbox = sbox.require('./path/to/mod');

继承关系

构造函数

SandBox

构造一个新的安全沙箱对象,并初始化基础模块

new SandBox(Object mods);

调用参数:


构造一个新的安全沙箱对象,并初始化基础模块

new SandBox(Object mods,
    Function require);

调用参数:


构造一个独立 Global 新的安全沙箱对象,并初始化基础模块

new SandBox(Object mods,
    Object global);

调用参数:


构造一个独立 Global 新的安全沙箱对象,并初始化基础模块

new SandBox(Object mods,
    Function require,
    Object global);

调用参数:

成员属性

global

Object, 查询沙箱的 global 对象

readonly Object SandBox.global;

成员函数

add

向沙箱中添加一个基础模块

SandBox.add(String id,
    Value mod);

调用参数:


向沙箱中添加一组基础模块

SandBox.add(Object mods);

调用参数:


addScript

向沙箱中添加一个脚本模块

Value SandBox.addScript(String srcname,
    Buffer script);

调用参数:

返回结果:


remove

从沙箱中删除指定的基础模块

SandBox.remove(String id);

调用参数:


clone

复制当前沙箱,新沙箱包含当前沙箱的模块,以及相同的名称和 require 函数

SandBox SandBox.clone();

返回结果:


run

运行一个脚本

SandBox.run(String fname,
    Array argv = []);

调用参数:


resolve

查询一个模块并返回模块完整文件名

String SandBox.resolve(String id,
    String base);

调用参数:

返回结果:


require

加载一个模块并返回模块对象

Value SandBox.require(String id,
    String base);

调用参数:

返回结果:


dispose

强制回收对象,调用此方法后,对象资源将立即释放

SandBox.dispose();

equals

比较当前对象与给定的对象是否相等

Boolean SandBox.equals(object expected);

调用参数:

返回结果:


toString

返回对象的字符串表示,一般返回 "[Native Object]",对象可以根据自己的特性重新实现

String SandBox.toString();

返回结果:


toJSON

返回对象的 JSON 格式表示,一般返回对象定义的可读属性集合

Value SandBox.toJSON(String key = "");

调用参数:

返回结果:


valueOf

返回对象本身的数值

Value SandBox.valueOf();

返回结果: