Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Передача параметров javascript между iframe и документом. (https://javascript.ru/forum/events/12603-peredacha-parametrov-javascript-mezhdu-iframe-i-dokumentom.html)

freedon 25.10.2010 18:38

Передача параметров javascript между iframe и документом.
 
Здравствуйте.
Бьюсь над следующей задачей:
1.Есть html документ.
2.Из него вызывается iframe
В iframe через php echo создаются javascript'ы, в которых используется значение php переменных.
3. Затем в основном html документе вызывается javascript, который использует параметры определенные в javascript'ах что создавались в iframe.
Для чего это всё надо - надо чтобы в html документе отображался через javascript текст задаваемый динамически, но чтобы этого текста не было в самом html теле документа.
Минимальный html:
---------------------------------------
<html>
<head>
</head>
<body>
текст-текст-текст
<iframe width='410' height='350' id="inli" name="inli" src='initialization.php'></iframe>
<script type="text/javascript" src="javascript.js"></script>
текст-текст-текст
</body>
</html>
---------------------------------------
initialization.php
---------------------------------------
<?
$stroka="ааабббвввгггдддеее"; //строка к-рая реально определяется //динамически и должна выводится с некой модификацией (в данном //случае - выкидывание символов ббб и ддд)через javascript в главном //html
$l1 = explode('ббб',$stroka);
$l2 = explode('ддд',$l1[1]);
echo '<script type="text/javascript">';
echo '$par1 = \'';
echo $l1[0]; // присвоение $par1 значения php переменной $l1[0] //(ааа)
echo '\';';
echo '</script>';
echo '<script type="text/javascript">';
echo '$par2 = \'';
echo $l2[0]; // присвоение $par2 значения php переменной $l2[0] //(вввггг)
echo '\';';
echo '</script>';
echo '<script type="text/javascript">';
echo '$par3 = \'';
echo $l2[1]; // присвоение $par3 значения php переменной $l2[1] //(еее)
echo '\';';
echo '</script>';
?>
---------------------------------------
javascript.js
---------------------------------------
var $par1 = parent.initialization.$par1;
var $par2 = parent.initialization.$par2;
var $par3 = parent.initialization.$par3;
document.write("VOT PAR1:" + $par1);
document.write("VOT PAR2:" + $par2);
document.write("VOT PAR3:" + $par3);
---------------------------------------
Пробовал по разному - если использовать initialization.php в html через php вставку с include - работает идеально, но естественно на html странице виден код, к-рый не надо чтоб там был. Для этого и юзаем iframe.
Если юзать в такой конфигурации как описано сейчас(а это нужная конфигурация) - выдаёт в основном html "VOT PAR1:" + undefined, а иногда (1 к 10) и выдаёт как надо. Т.е. код вообщем-то рабочий, но видимо как-то надо реорганизовать процесс очередности загрузки скриптов.
Пробовал делать по вот этому примеру - http://javascript.ru/forum/dom-windo...frejjmami.html
В ie делает что надо, но т.к. отложенный document.write получается, то он стирает весь документ ессно.
В firefox раз через раз то, делает как в ie, то не выводит результат
javascript.js вообще.
Помогите, кто может, разобраться. Просто устал уже сам биться (javascript толком не знаю, просто понадобилось его использовать).
Тот кто поможет разобраться - может смело рассчитывать на шоколадку/пиво кому как по душе в виде WM.
Спасибо.

vladlen 26.10.2010 13:26

AJAX, оооооочень просто. Если целью не стоит пожарить себе мозг в учебных целях.
Да, и возращаешь себе JSON, проходишся регэкспой и эвалиш. И вуаля

freedon 26.10.2010 15:41

Цитата:

Сообщение от vladlen (Сообщение 75922)
AJAX, оооооочень просто. Если целью не стоит пожарить себе мозг в учебных целях.
Да, и возращаешь себе JSON, проходишся регэкспой и эвалиш. И вуаля

Перевариваю....

freedon 26.10.2010 18:51

Пример в студию плз(если будет такая возможность...)

vladlen 26.10.2010 19:39

Пример чего? Ctrl+C - Ctrl+V от булочек закисли?

freedon 27.10.2010 13:49

Добавление...
 
Кстати, в проекте используется jquery.
И Надо, чтобы хотя бы скрипт, что вызывается в основном html документе был javascript, т.е. исполнялся на стороне клиента.
А пример прошу, потому что не знаком с ajax'ом, а ковырять новый язык ради написания одной функции - не комильфо....:nono:

Shabol 28.10.2010 13:04

Вообще доступ организуется так:
Из основного окна к переменным фрейма:
frames['имя_фрейма'].имя_переменной
Из фрейма к родителю:
parent.имя_переменной или top.имя_переменной (лучше юзать parent)
Вот пример:
main.html
<html>
<head>
</head>
<body>
 <script>var txt='Это текст из JavaScript main';</script>
 <div id='dd'></div>
 <iframe name='myiframe' src='iframe.html' style='position:absolute;top:100px;left:100px;' border="1"></iframe>
 <script>setTimeout("document.getElementById('dd').innerHTML = frames['myiframe'].txt2",1000);</script>
</body>
</html>

iframe.html
<html>
<head>
</head>
<body>
 <script>var txt2='Это текст из JavaScript IFRAME';</script>
 <div id='dd'></div>
 <script>document.getElementById('dd').innerHTML = parent.txt;</script>
</body>
</html>


Один нюанс, стучаться к фрему нужно после его загрузки, я использовал таймаут, но можно просто проверять - загружен ли он и тогда ломиться к переменным фрейма.

Еще момент, работать будет только если основное окно и фрейм на одном домене. Из соображений безопасности кроссдоменный доступ запрещен.

freedon 28.10.2010 14:21

Shabol, спасибо за участие.
Буду сейчас пробовать - отпишусь...

антигерой 05.05.2011 16:29

>>>стучаться к фрему нужно после его загрузки

Но зачастую проще ставить в конце обновляемого фрейма вызов функции в главном документе:

parent.PrintMessage('Hello World');

Я так в чате новые мессаги подгружаю, в невидимый фрейм грузится обновление, вызывается внешняя функция в PARENT и она добавляет с помощью InnerHTML обновление на страницу.

Функция сама шонужно делает. Это не требует очень ненадёжных таймаутов и срабатывает всегда - если содержимое фрейма прогрузилось полностью.


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