2010-03-06 177 views
3

沙箱的JavaScript模块可以从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

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

可以削弱暂时覆盖window变量有什么可用的:

var window = {"Core": Core}; 

但随后没有全局变量(甚至如alert)将为被调用者存在。这很可能会破坏你的API。

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

3

我建议在应用沙盒,并在Slideshare的模块模式称为Building a JavaScript Module Framework at Gilt阅读本slidedeck。

+1

请不要发布链接的答案。如果你写了一个正确的答案,我会删除我的downvote。 – 2015-01-23 11:04:53