2010-03-06 174 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