是否可以从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 */
}
});
答案 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
。