Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.08.2011, 13:26
m00 m00 вне форума
Интересующийся
Отправить личное сообщение для m00 Посмотреть профиль Найти все сообщения от m00
 
Регистрация: 10.11.2009
Сообщений: 22

Как закрыть доступ к глобальному объекту window?
Есть скрипт. Возможно ли каким-нибудь способом сделать так, чтобы из этого скрипта не было доступа к объекту window?
Ответить с цитированием
  #2 (permalink)  
Старый 25.08.2011, 13:27
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Нет.
Ответить с цитированием
  #3 (permalink)  
Старый 25.08.2011, 13:47
m00 m00 вне форума
Интересующийся
Отправить личное сообщение для m00 Посмотреть профиль Найти все сообщения от m00
 
Регистрация: 10.11.2009
Сообщений: 22

Сообщение от Sweet Посмотреть сообщение
Нет.
Почему?
Ответить с цитированием
  #4 (permalink)  
Старый 25.08.2011, 13:52
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

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

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

alert(window.a);
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай

Последний раз редактировалось walik, 25.08.2011 в 13:54.
Ответить с цитированием
  #5 (permalink)  
Старый 25.08.2011, 13:56
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

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

сайт site.ru

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

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


Сообщение от m00 Посмотреть сообщение
Есть скрипт.
у меня складывается впечатление, что все посты, так начинающиеся, несут в себе троллинг отвечающего.
Ответить с цитированием
  #6 (permalink)  
Старый 25.08.2011, 14:11
m00 m00 вне форума
Интересующийся
Отправить личное сообщение для m00 Посмотреть профиль Найти все сообщения от m00
 
Регистрация: 10.11.2009
Сообщений: 22

Сообщение от Sweet Посмотреть сообщение
Нет.
Сообщение от walik Посмотреть сообщение
А так нельзя ?
(function(window) {
   window = {};

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

alert(window.a);
Вариант, спасибо.
Ответить с цитированием
  #7 (permalink)  
Старый 25.08.2011, 14:18
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

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]);
Ответить с цитированием
  #8 (permalink)  
Старый 25.08.2011, 14:52
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Обидно
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #9 (permalink)  
Старый 26.08.2011, 07:09
m00 m00 вне форума
Интересующийся
Отправить личное сообщение для m00 Посмотреть профиль Найти все сообщения от m00
 
Регистрация: 10.11.2009
Сообщений: 22

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 недоступен
Ответить с цитированием
  #10 (permalink)  
Старый 26.08.2011, 08:15
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

По-прежнему
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 недоступен
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как закрыть текущую вкладку браузера? Nicko Общие вопросы Javascript 6 14.06.2016 20:58
Как закрыть динамичное окно вместе\после родительского? Vilmos Элементы интерфейса 1 16.07.2009 20:54
Как закрыть окно и вернуться на html-метку предыдущего? Kokaln Events/DOM/Window 6 21.04.2009 04:12
dynatree.jquery - как получть доступ к родительскому узлу. ast-ross jQuery 0 23.03.2009 18:39
как при открытии окна закрыть предыдущее Евдокимова Events/DOM/Window 3 16.09.2008 17:12