沙盒javascript模块

时间:2010-03-06 14:49:28

标签: javascript sandbox

是否可以从DOM操作沙箱javascript模块?例如

var Core = { 
    register: function(config){config.init()},
    publicApi: {
        msgbox: function(msg){alert(msg)} 
    } 
}
Core.register({
    name: 'testmodule',
    init: function(){
        /* from there i want to see only function defined in Core.publicApi, no jQuery direct access, no DOM */
    }
});

2 个答案:

答案 0 :(得分:3)

我建议在名为Building a JavaScript Module Framework at Gilt的Slideshare的应用沙盒模块模式下阅读此幻灯片。

答案 1 :(得分:0)

嗯,有点:你可以沙箱功能,但它的被调用者也将被沙箱化。这意味着即使Core.publicApi中的内容也无法访问document等。或者,至少,Javascript中没有可以进行桥接的防弹沙箱。

您可以通过暂时覆盖window变量来削弱可用内容:

var window = {"Core": Core};

但是后来没有全局变量(甚至是alert)将存在给被调用者。这很可能会破坏您的API。

您可以在新的_unsandboxed变量中添加其他成员(如window或其他),以允许您的API访问成员。但是,正如我所说,它不是防弹的,因为沙盒功能仍然可以访问_unsandboxed