3

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 */
    }
});
4

2 に答える 2

3

Gilt での JavaScript モジュール フレームワークの構築と呼ばれる SlideshareのAppSandbox、およびModuleパターンに関するこのスライド資料を読むことをお勧めします。

于 2011-07-02T02:11:07.690 に答える
0

まあ、多少: 関数をサンドボックス化できますが、その呼び出し先もサンドボックス化されます。つまり、入っているものでもCore.publicApiアクセスできなくなりますdocument。または、少なくとも、そのブリッジングを可能にする防弾サンドボックスは Javascript にありません。

変数を一時的に上書きすることで、利用可能なものを無効にすることができwindowます:

var window = {"Core": Core};

ただし、呼び出し先にはグローバル変数 ( など) は存在しませんalert。これにより、API が破損する可能性が高くなります。

別のメンバー (など_unsandboxed) を新しいwindow変数に追加して、API がメンバーにアクセスできるようにすることができます。しかし、私が言ったように、サンドボックス化された関数は引き続きアクセスできるため、防弾ではありません_unsandboxed

于 2010-03-06T15:05:52.540 に答える