Сообщение от
[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>