HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #24  
Старый 28.12.2007, 17:02
astrologer
Постоянный
Регистрация: 30.08.2007
Сообщений: 773
Провел на форуме:
3069349

Репутация: 808


По умолчанию

Цитата:
Сообщение от [x26]VOLAND  
Ежу понятно я и сам так могу зделать. Можно кстати и не юзать id="target_js" и eval(parent.document.getElementById('target_js').t ext); ----- всё и без них работает....

Загвоздка в том что целевая функция ВЛОЖЕНА в другую (родительскую )и именно:
main_function(...)
{
target_function(...){...};
}


Обрати внимание!
Никак. Это вложенная функция будет видна только внутри родительской.
// Читать: никак, если использовать стандартные и не извращённые методы

Код:
<script type="text/javascript">
<!--

var main_function = new function()
{
  this.target_function = function(){}
}

//-->
</script>
А так - нужная ф-ия будет доступна как main_function.target_function

Если нужно сохранить именно такую структуру, код которой ты привёл, то решение тоже есть, но нужно ли?

----------------------------------------------------------------------

Вот так вроде работает:
1.html
Код:
<html>
<head>
<script type="text/javascript">

function wrapper() 
{
  function needed()
  {
    alert('Got it!');
  }
}

</script>
</head>
<body>
  Main<br />
  <iframe src="2.html"></iframe>
</body>
</html>
2.html
Код:
<html>
<head>
<script type="text/javascript">
function getNeeded()
{
  // Переводим функцию в строковый вид для обработки
  var str = new String(top.wrapper);

  // Удаляем первую фигурную скобку,
  // всё, что идёт до неё и последнюю - избавляясь от внешней функции
  str = str.replace(/^[^{]+{/, '');
  str = str.substring(0, str.length-1);

  // Заменяем "закрытые" объявления функций на "открытые"
  // Всё это условно, т.к. работаем всё ещё со строкой
  // Может понадобиться изменить регулярное выражение
  str = str.replace(/function\s*([^\(\s]*)\s*/ig, 'this.$1 = function');

  str = new Function(str); // Создаём функцию
  var created = new str;   // Создаём экземпляр
  created.needed();        // Запускаем
}
</script>
</head>
<body>
  <a href="#" onclick="getNeeded();return false;">Click</a>
</body>
</html>

Последний раз редактировалось astrologer; 28.12.2007 в 19:11..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi]/[Pascal] Задай вопрос, получи ответ Isis С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 6762 17.06.2010 21:23



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ