Как закрыть доступ к глобальному объекту 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, время: 23:43. |