Как закрыть доступ к глобальному объекту window?
Есть скрипт. Возможно ли каким-нибудь способом сделать так, чтобы из этого скрипта не было доступа к объекту window?
|
Нет.
|
Цитата:
|
А так нельзя ?
(function(window) { window = {}; window.a = 'aaaa'; //Это тот скрипт который не должен иметь доступа к window })(window); alert(window.a); |
Цитата:
сайт site.ru <script> window.a = 'hello'; </script> <iframe src="anothersite.ru"></iframe> сайт anothersite.ru <script> alert( window.a ); // undefined <script> Цитата:
|
Цитата:
Цитата:
|
walik,
(function(window) { window = {}; (function(){return this})().a = "mhahahaha, I'm badboy!"; b = 'Much easier way'; window.a = 'aaaa'; //Это тот скрипт который не должен иметь доступа к window })(window); alert([window.a, window.b]); |
Обидно :) :) :)
|
function create_isolated_closure(func) { var global = (function(){return this;}).call(null); var undefined; // перекрываем абсолютно все что есть в global var scope = {}; for(attr in global) { scope[attr] = undefined; } delete scope.alert; // оставляем доступ к alert(), чтобы тестировать функции with(scope) return eval("(function () { return ("+func.toString()+"); })()"); } function test() { alert(document); alert(window); } test(); // обычный вызов, DOM доступен var t = create_isolated_closure(test); // делаем изолированную копию функции t.call({}); // вызов изолированной копии, DOM недоступен |
По-прежнему
function create_isolated_closure(func) { var global = (function(){return this;}).call(null); var undefined; // перекрываем абсолютно все что есть в global var scope = {}; for(attr in global) { scope[attr] = undefined; } delete scope.alert; // оставляем доступ к alert(), чтобы тестировать функции with(scope) return eval("(function () {return ("+func.toString()+"); })()"); } function test() { var w = (function(){return this})(); w.alert(['hacked', w.document]); } var t = create_isolated_closure(test); // делаем изолированную копию функции t.call({}); // вызов изолированной копии, DOM недоступен |
Часовой пояс GMT +3, время: 13:33. |