Показать сообщение отдельно

  #228  
Старый 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..
 
Ответить с цитированием