Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Загрузка JS библиотек в iframe и вызов функции от имени родителя (https://javascript.ru/forum/misc/41324-zagruzka-js-bibliotek-v-iframe-i-vyzov-funkcii-ot-imeni-roditelya.html)

ANDRUkomod 08.09.2013 18:50

Загрузка JS библиотек в iframe и вызов функции от имени родителя
 
Доброго всем времени суток. Есть такая задача:
два файла
index.html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<iframe id="frame1" src="frame1.html"></iframe>
<button onClick="document.getElementById('frame2').contentWindow.Run();">run</button> 
</body>
</html>


и frame1.html
<!DOCTYPE html><html><head><title></title>
<script>
window.Run =  function ()
{
body=document.getElementsByTagName("body")[0];
alert(body.innerHTML);
}
</script></head><body>frame</body></html>

Данная конструкция работает и по клику на кнопку нам выдаст алертом слово "frame".
Как сделать, чтобы алерт выдавал body родителя а не iframe???
функцию Run() править запрещено, поэтому не предлагайте :
window.Run =  function ()
{
body=window.parent.document.getElementsByTagName("body")[0];
alert(body.innerHTML);
}

и конструкция
window.parent.Run =  function (){...}
тоже не потходит.


Как из iframe обьяснить родителю что у него есть функция Run() и она будет работать от имени родителя в родительском окне, не трогая iframe??????????????

ruslan_mart 08.09.2013 19:15

Цитата:

Сообщение от ANDRUkomod
window.parent.Run =  function (){...}

Чёйта? :blink: Вполне работоспособный вариант.

Deff 08.09.2013 19:47

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<iframe id="frame1" name="frame1"  src="frame1.html"></iframe>
<button onClick="frame1.Run();">run</button> 
</body>
</html>

ANDRUkomod 08.09.2013 19:51

НЕТ.
Все это приведет к алерту "frame", а не контента body родителя.

Deff 09.09.2013 03:03

ANDRUkomod,
Сделайте как советую, - Выложите ссылку на тестовую страницу
frame1.Run() - Запуск функции во фрейме, если Вы боитесь запутаться - можно поменять имя фрейма на иное

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<iframe id="frame1" name="frame001"  src="frame1.html"></iframe>
<button onClick="frame001.Run();">run</button> 
</body>
</html>

Во фрейме такая функция
window.Run =  function ()
{
var parent_body = window.parent.document.body;
alert(parent_body.innerHTML);
}


Часовой пояс GMT +3, время: 06:58.