Передача параметров 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. Спасибо. |
AJAX, оооооочень просто. Если целью не стоит пожарить себе мозг в учебных целях.
Да, и возращаешь себе JSON, проходишся регэкспой и эвалиш. И вуаля |
Цитата:
|
Пример в студию плз(если будет такая возможность...)
|
Пример чего? Ctrl+C - Ctrl+V от булочек закисли?
|
Добавление...
Кстати, в проекте используется jquery.
И Надо, чтобы хотя бы скрипт, что вызывается в основном html документе был javascript, т.е. исполнялся на стороне клиента. А пример прошу, потому что не знаком с ajax'ом, а ковырять новый язык ради написания одной функции - не комильфо....:nono: |
Вообще доступ организуется так:
Из основного окна к переменным фрейма: 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> Один нюанс, стучаться к фрему нужно после его загрузки, я использовал таймаут, но можно просто проверять - загружен ли он и тогда ломиться к переменным фрейма. Еще момент, работать будет только если основное окно и фрейм на одном домене. Из соображений безопасности кроссдоменный доступ запрещен. |
Shabol, спасибо за участие.
Буду сейчас пробовать - отпишусь... |
>>>стучаться к фрему нужно после его загрузки
Но зачастую проще ставить в конце обновляемого фрейма вызов функции в главном документе: parent.PrintMessage('Hello World'); Я так в чате новые мессаги подгружаю, в невидимый фрейм грузится обновление, вызывается внешняя функция в PARENT и она добавляет с помощью InnerHTML обновление на страницу. Функция сама шонужно делает. Это не требует очень ненадёжных таймаутов и срабатывает всегда - если содержимое фрейма прогрузилось полностью. |
Часовой пояс GMT +3, время: 11:20. |