Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как закрыть доступ к глобальному объекту window? (https://javascript.ru/forum/misc/21004-kak-zakryt-dostup-k-globalnomu-obektu-window.html)

m00 25.08.2011 13:26

Как закрыть доступ к глобальному объекту window?
 
Есть скрипт. Возможно ли каким-нибудь способом сделать так, чтобы из этого скрипта не было доступа к объекту window?

Sweet 25.08.2011 13:27

Нет.

m00 25.08.2011 13:47

Цитата:

Сообщение от Sweet (Сообщение 122364)
Нет.

Почему?

walik 25.08.2011 13:52

А так нельзя ?
(function(window) {
   window = {};

   window.a = 'aaaa'; //Это тот скрипт который не должен иметь доступа к window
})(window);

alert(window.a);

melky 25.08.2011 13:56

Цитата:

Сообщение от m00 (Сообщение 122363)
Есть скрипт. Возможно ли каким-нибудь способом сделать так, чтобы из этого скрипта не было доступа к объекту window?

можно. запустить его в iframe с другого домена

сайт site.ru

<script>
window.a = 'hello';
</script>
<iframe src="anothersite.ru"></iframe>

сайт anothersite.ru
<script>
alert( window.a ); // undefined
<script>


Цитата:

Сообщение от m00 (Сообщение 122363)
Есть скрипт.

у меня складывается впечатление, что все посты, так начинающиеся, несут в себе троллинг отвечающего.

m00 25.08.2011 14:11

Цитата:

Сообщение от Sweet (Сообщение 122364)
Нет.

Цитата:

Сообщение от walik (Сообщение 122375)
А так нельзя ?
(function(window) {
   window = {};

   window.a = 'aaaa'; //Это тот скрипт который не должен иметь доступа к window
})(window);

alert(window.a);

Вариант, спасибо.

B@rmaley.e><e 25.08.2011 14:18

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]);

walik 25.08.2011 14:52

Обидно :) :) :)

m00 26.08.2011 07:09

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 недоступен

B@rmaley.e><e 26.08.2011 08:15

По-прежнему
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.