|
|
|
|
|
для: coloboc66
(21.08.2007 в 17:58)
| | А в дочернем окне таймер и не нужен вовсе.
Таймер нужен в окне родительском для случая, если окно дочернее ещё не открылось.
А в дочернем - onload, который передаст в родительское сообщение "я готово" (изменит значение флага Flag с false на true).
PS. Я сейчас в посте (где про два варианта) дополнительно написал жирно - где родитель, а где дочка. | |
|
|
|
|
|
|
|
для: CNT
(20.08.2007 в 04:13)
| | Да ставил в дочернем окне вместо таймера window.onload и код переставал работать. Оставил таймер. | |
|
|
|
|
|
|
|
для: coloboc66
(19.08.2007 в 22:43)
| | Не понял - что не получается? | |
|
|
|
|
|
|
|
для: CNT
(19.08.2007 в 17:48)
| | Ну да: не получается с window.onload... | |
|
|
|
|
|
|
|
для: coloboc66
(19.08.2007 в 11:31)
| | Давайте рассмотрим варианты.
Вариант 1. В родительском окне один раз формируется значение некой переменной (например, клиент ввёл что-то в текстовое окно, или же отметил какой-то чекбокс...) и после этого (переменная уже определена) открывается дочернее окно, куда необходимо это значение передать.
В этом варианте я бы решал задачу так.
В родительском окне прописываю:
// РОДИТЕЛЬСКОЕ ОКНО
var AAA = "передаваемое значение";
window.open ('дочерний_файл.htm?' + escape (AAA), '' , параметры дочернего окна);
| А в файле дочернего окна устраиваю разбор query_string
// ДОЧЕРНЕЕ ОКНО
<head><script>
var BBB = unescape (document.location.href.split ('?') [1]);</script>
| Таким образом, ещё до формирования тела документа дочернему окну будет передано значение переменной AAA родительского окна.
ИМХО - самый простой и надежный метод (эскейпирование необходимо при передаче не-ASCII символов, типа кириллицы)
-----
Вариант 2. Значение переменной в родительском окне ещё неизвестно, а окно уже открыто. Значение переменной может быть сформировано в родительском окне несколько раз и эти несколько раз нужно будет это значение пердавать в дочернее.
Тогда в родительском окне прописываю:
// РОДИТЕЛЬСКОЕ ОКНО
var Flag = false; //флаг окончания загрузки тела дочернего окна
var newWin = window.open ('дочерний_файл.htm', '' , параметры дочернего окна);
...
//каждый раз (или даже всего один раз), когда нужно передать
var AAA = "передаваемое значение";
if (!Flag) {включаем таймер и дожидаемся открытия дочернего окна, ибо сигнала из него не получено}
else if (!newWin.closed ()) newWin.CCC (AAA);
else {клиент закрыл дочернее окно, передать ничего нельзя}
|
А в дочернем окне, во-первых, формирую функцию CCC, которая будет запускаться из родительского окна и переданный аргумент присваивать переменной BBB; во-вторых, передаю сигнал в родительское окно об окончании загрузки:
// ДОЧЕРНЕЕ ОКНО
<head>
<script>
var BBB;
function CCC (x) {BBB = x; ну и далее - что нужно с этим BBB делать}
onload = function () {window.opener.Flag = true}
</script>
| Т.е. без таймера, если момент передачи из родительского в дочернее неизвестен, всё равно не обойтись, даже используя onload в дочернем окне. А ежели момент известен, и совпадает с открытием дочернего окна (и однократен), то тогда смотри вариант 1. | |
|
|
|
|
|
|
|
для: Shiva
(19.08.2007 в 11:22)
| | И где его использовать? В дочернем окне? | |
|
|
|
|
|
|
|
для: coloboc66
(19.08.2007 в 09:23)
| | Есть событие window.onload, позволяющее обойтись без таймеров. Здесь вы, по сути, создали прослушивание, дублирующее прослушивание браузера. | |
|
|
|
|
|
|
|
для: Chronus
(18.08.2007 в 19:10)
| | to Cronus: ваш код без алерта не работает, оказывается. В общем, использовал ваш код и добавил в родительском и дочернем окне по таймеру, как советовал CNT, алерт убрал, после этого всё заработало. Спасибо всем. | |
|
|
|
|
|
|
|
для: coloboc66
(18.08.2007 в 18:23)
| | Всё очень даже просто. Прилагаю наваенный мной сейчас пример.
Шаг 1. Создаём файл №1. Главный.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Main Win</title>
<script>
var a="Hello World!";
function init(){
var url='childwin.html', win = window.open(url,'winname','toolbar=no,location=no,width=100,height=100');
window.alert('Click OK and view child win');
win.document.getElementById('fortext').innerHTML=a;
}
</script>
</head>
<body>
<p onclick="init()">CLICK ME!</p>
</body>
</html>
|
Шаг 2. Создаём файл №2. Дочерний (не забыть назвать childwin.html).
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>I'm child Win</title>
</head>
<body>
<p id="fortext"></p>
</body>
</html>
|
Шаг 3. Наслаждаемся результатом.
Примечание.
Если нужно передать много чего, то предлагаю создать объекты - скрытые слои (в дочернем документе конечно, можно сразу создать, а можно и динамически организовать) и в них всё передавать и хранить. | |
|
|
|
|
|
|
|
для: Chronus
(18.08.2007 в 18:05)
| | Пробовал пошагово: дохожу до того. что переменная
а получает нужное мне значение и является глобальной, осталось её только передать в дочернее окно, тут всё и стопорится... Короче вопрос такой: имеем в родительском окне
<script>
var a ="Hello";
</script>
|
Как её передать в выпадающее? | |
|
|
|
|