Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.10.2010, 18:38
Новичок на форуме
Отправить личное сообщение для freedon Посмотреть профиль Найти все сообщения от freedon
 
Регистрация: 25.10.2010
Сообщений: 5

Передача параметров 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) и выдаёт как надо. Т.е. код вообщем-то рабочий, но видимо как-то надо реорганизовать процесс очередности загрузки скриптов.
Пробовал делать по вот этому примеру - Помогите разобраться с передачей данных между фреймами
В ie делает что надо, но т.к. отложенный document.write получается, то он стирает весь документ ессно.
В firefox раз через раз то, делает как в ie, то не выводит результат
javascript.js вообще.
Помогите, кто может, разобраться. Просто устал уже сам биться (javascript толком не знаю, просто понадобилось его использовать).
Тот кто поможет разобраться - может смело рассчитывать на шоколадку/пиво кому как по душе в виде WM.
Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 26.10.2010, 13:26
Аватар для vladlen
Кандидат Javascript-наук
Отправить личное сообщение для vladlen Посмотреть профиль Найти все сообщения от vladlen
 
Регистрация: 19.10.2010
Сообщений: 143

AJAX, оооооочень просто. Если целью не стоит пожарить себе мозг в учебных целях.
Да, и возращаешь себе JSON, проходишся регэкспой и эвалиш. И вуаля
Ответить с цитированием
  #3 (permalink)  
Старый 26.10.2010, 15:41
Новичок на форуме
Отправить личное сообщение для freedon Посмотреть профиль Найти все сообщения от freedon
 
Регистрация: 25.10.2010
Сообщений: 5

Сообщение от vladlen Посмотреть сообщение
AJAX, оооооочень просто. Если целью не стоит пожарить себе мозг в учебных целях.
Да, и возращаешь себе JSON, проходишся регэкспой и эвалиш. И вуаля
Перевариваю....
Ответить с цитированием
  #4 (permalink)  
Старый 26.10.2010, 18:51
Новичок на форуме
Отправить личное сообщение для freedon Посмотреть профиль Найти все сообщения от freedon
 
Регистрация: 25.10.2010
Сообщений: 5

Пример в студию плз(если будет такая возможность...)
Ответить с цитированием
  #5 (permalink)  
Старый 26.10.2010, 19:39
Аватар для vladlen
Кандидат Javascript-наук
Отправить личное сообщение для vladlen Посмотреть профиль Найти все сообщения от vladlen
 
Регистрация: 19.10.2010
Сообщений: 143

Пример чего? Ctrl+C - Ctrl+V от булочек закисли?
Ответить с цитированием
  #6 (permalink)  
Старый 27.10.2010, 13:49
Новичок на форуме
Отправить личное сообщение для freedon Посмотреть профиль Найти все сообщения от freedon
 
Регистрация: 25.10.2010
Сообщений: 5

Добавление...
Кстати, в проекте используется jquery.
И Надо, чтобы хотя бы скрипт, что вызывается в основном html документе был javascript, т.е. исполнялся на стороне клиента.
А пример прошу, потому что не знаком с ajax'ом, а ковырять новый язык ради написания одной функции - не комильфо....
Ответить с цитированием
  #7 (permalink)  
Старый 28.10.2010, 13:04
Новичок на форуме
Отправить личное сообщение для Shabol Посмотреть профиль Найти все сообщения от Shabol
 
Регистрация: 24.09.2010
Сообщений: 6

Вообще доступ организуется так:
Из основного окна к переменным фрейма:
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>


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

Еще момент, работать будет только если основное окно и фрейм на одном домене. Из соображений безопасности кроссдоменный доступ запрещен.
Ответить с цитированием
  #8 (permalink)  
Старый 28.10.2010, 14:21
Новичок на форуме
Отправить личное сообщение для freedon Посмотреть профиль Найти все сообщения от freedon
 
Регистрация: 25.10.2010
Сообщений: 5

Shabol, спасибо за участие.
Буду сейчас пробовать - отпишусь...
Ответить с цитированием
  #9 (permalink)  
Старый 05.05.2011, 16:29
Аватар для антигерой
Новичок на форуме
Отправить личное сообщение для антигерой Посмотреть профиль Найти все сообщения от антигерой
 
Регистрация: 05.05.2011
Сообщений: 5

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

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

parent.PrintMessage('Hello World');

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
Передача переменной между ifarame-ами DeUre Javascript под браузер 0 10.06.2010 08:29
передача параметров в javascript файл Solon Общие вопросы Javascript 4 15.03.2010 09:27
Javascript запрещающий открывать iframe в новом окне. HELP! Андреи Events/DOM/Window 11 26.09.2009 07:36
bbcode, iframe и javascript Dark[Ol(U23)leneri] Я не знаю javascript 0 10.06.2009 19:52