1

私は JavaScript ライブラリを使用していますが、この大きなサイトにある他のライブラリが原因で失敗しているようです。どういうわけかサンドボックス化する方法はありますか?おそらくそれをiframeに入れてから、javascriptクラスにvarを次のように割り当てます

var myvar = iframe.theJSlib;

アイデアを書いているだけです。サンドボックスの方法も、それができるかどうかもわかりません。javascript ライブラリをサンドボックス化し、メイン ページでアクセスするにはどうすればよいですか?

4

4 に答える 4

1

これが、変数をグローバル スコープから除外することを実践している理由です。次のように、lib 内のすべてを独自の関数で囲むようにしてください。

(function(){
  // the library code
}());

これは、 のような明示的に宣言された変数のみを修正しますvar foo = 'bar';が、 のような暗黙的に宣言された変数は修正しないことに注意してくださいfoo = 'bar'。これらは引き続きグローバル オブジェクトに割り当てられますwindow

次のように、単一の名前空間を使用するようにすべてのコードを変更することもできます。

var myApp = {};

myApp.foo = { /* maybe my validator code */ };
myApp.bar = { /* maybe my utilities code */ };
于 2013-01-24T16:49:15.450 に答える
0

それを無名関数に入れてください:

(function(){
    // >Your code goes here<
})();
于 2013-01-24T18:05:16.993 に答える
0

それを Iframe に入れると、確実に正しく動作しなくなります。問題のあるコードを関数にラップするだけで、すべてがその関数のスコープ内で実行されます。

参照: Javascript ネームスペース

そして: JavaScript 名前空間

于 2013-01-24T16:49:22.403 に答える
0

一度に 1 つのライブラリをサンドボックス化することはできません。独自の名前空間で互換モードで実行して、すべてをサンドボックス化する必要があります。

(function(myLib){
    // do stuff with this lib here
})(theLongLibname)
于 2013-01-24T16:49:42.600 に答える