Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > reload frame onUnload pop-up


Автор: Bolt 24.11.2005, 20:06
Доброго времени суток!
подскажите как бы мне и «рыбку съесть и ... косточкой не подавиться»
имеем два фрейма 0 - query, 1 - response
хочется обновить левый фрэйм, после закрытия всплывающего окна, вызванного из правого фрэйма:
заполняем некую форму во фрейме 1.
по сабмиту этой формы js открывает поп-ап в которое perl-скрипт печатает:
Код

<BODY onLoad="cll($t);" onUnload="window.frames.query.document.location.replace("left.cgi");">
<script type="text/javascript">function cll(){ self.setTimeout("self.close()",1000*$t); }</script>
<table width="100%" height="100%" align="center">
<tr align=center><td> <img src="$html->{'suc_img'}" hspace="4" /> </td><td width="100%"><b>DATA $word</b></td></tr>
</table>

при закрытии окна никак я не могу заставить обновиться левый (0-query/left.cgi) фрэйм.
история "потуг" такова:
вместо:
Код
onUnload="window.frames.query.document.location.replace("left.cgi");"

варианты:
Код
window.frames["query"].document.location = "left.cgi";

Код
window.frames["query"].document.location.href = "left.cgi";


увы. окно закрывается и левый фрэйм остается прежним
мой js далёк от совершенства. )

Автор: Ciber SLasH 25.11.2005, 21:29
Откуда взял событие UnLoadOff ? случайно не из страницы, которую обработал Proxomitron ?
Вообще есть событие onUnload, которое по умолчание выключается Proxomitron'ом. Он просто переписывает это событие на несуществующее и поэтому оно не выполняется.

Так, что прежде, чем смотреть код чужой страницы — отключи Прокс. smile

Автор: Bolt 26.11.2005, 14:37
какой-то бред сумасшедшей фантазии... ммм-да.
Цитата(Ciber @ 25.11.2005, 21:29)
Откуда взял событие UnLoadOff ?

и действительно.... откуда? Ciber SLasH, откуда это?
прежде чем писать ахинею - посмотри вопрос.

по делу никто ничего не напишет?



Автор: Ciber SLasH 26.11.2005, 15:01
Цитата(Bolt)
прежде чем писать ахинею - посмотри вопрос.

Во-первых я посмотрел вопрос.
Во-вторых — дал на него ответ: вместо твоего UnLoadOff напиши onUnload.
В-третьих — это тебе нужно внимательнее читать ответ, который даётся.
В-четвёртых — если не веришь, то я тебе могу показать фильтр Proxomitron'а, который переписывает событие onUnload на UnLoadOff. Что в итоге даёт неработоспособное событие, как у тебя.

Автор: Bolt 26.11.2005, 15:23
гм...
Цитата(Ciber @ 26.11.2005, 15:01)
вместо твоего UnLoadOff

покажи. ГДЕ ТЫ ЕГО УВИДЕЛ???
название темы, созданного мной:
reload frame onUnload pop-up
цитировать весь вопрос или ты все же его просто перечитаешь?
скажу тебе по секрету: впервые услышал о существовании некоего UnLoadOff.
где ты там его увидел, свой UnLoadOff в моем посте - загадка.
Цитата(Ciber @ 26.11.2005, 15:01)
это тебе нужно внимательнее читать ответ, который даётся.

это вот этот?
Цитата(Ciber @ 25.11.2005, 21:29)
Так, что прежде, чем смотреть код чужой страницы — отключи Прокс

это скорее тянет на критерий самооценки но никоим образом не можно рассматривать в качестве ответа на вопрос:
Цитата(Bolt @ 24.11.2005, 20:06)
как обновить левый фрэйм, после закрытия всплывающего окна, вызванного из правого фрэйма

и, раз уж мы пошли путем раскрытия тайн, несколько строчек тривиального кода (цитирую на всякий случай из своего первого поста) я написал сам:
Код
<BODY onLoad="cll($t);" onUnload="window.frames.query.document.location.replace("left.cgi");">
<script type="text/javascript">function cll(){ self.setTimeout("self.close()",1000*$t); }</script>
<table width="100%" height="100%" align="center">
<tr align=center><td> <img src="$html->{'suc_img'}" hspace="4" /> </td><td width="100%"><b>DATA $word</b></td></tr>
</table>


Автор: Ciber SLasH 26.11.2005, 21:20
2Bolt:
Цитата
покажи. ГДЕ ТЫ ЕГО УВИДЕЛ???

В твоём первом посту в первой строке в тэге BODY после собятия onLoad у тебя идёт несуществующее событие, о котором я тебе пытаюсь сказать, — UnLoadOff.
Цитата
reload frame onUnload pop-up
цитировать весь вопрос или ты все же его просто перечитаешь?

Я прекрасно понял вопрос — как я понял ты хочешь перезагрузить левый фрейм после закрытия всплывающего окна, которое открывает правый фрейм. Для этого ты вписываешь в тэг BODY следующую конструкцию:
Цитата
<BODY onLoad="cll($t);" UnLoadOff="window.frames.query.document.location.replace("left.cgi");">

т.е. по твоему по событию UnLoadOff должно происходить "window.frames.query.document.location.replace("left.cgi");" ?
Так ты считаешь ? Так вот: или я слепой или... но события UnLoadOff — не существует, его просто нет ни в одной спецификации, следовательно оно никогда не выполнится !!
Цитата
это вот этот?
Цитата(Ciber)

Так, что прежде, чем смотреть код чужой страницы — отключи Прокс


это скорее тянет на критерий самооценки но никоим образом не можно рассматривать в качестве ответа на вопрос:

Нет, я тебе дал ответ:
Цитата
Вообще есть событие onUnload, которое по умолчание выключается Proxomitron'ом.

Где ключевым словом было onUnload — вот по этому событию и происходят действия после закрытия страницы.


А теперь по делу:
По идеи событие onUnload должно происходить после закрытия страницы, но почему-то оно не хочет срабатывать во всплывающем окне.
Поэкспериментировав, я пришёл к выводу, что лучше в твоём случае просто перед закрытием окна методом self.close() выполнять необходимые тебе действия.
Кстати событие onLoad тоже не срабатывает, если во всплывающее окно записывать контент методом document.write(). Как я понимаю оно не срабатывает, потому что окно уже открыто и только после открытия в него записывается контент — поэтому в твоем случае действия по onLoad лучше перенести в тэг SCRIPT после тэга BODY.

Вот что у меня получилось:
main.htm
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content='text/html; charset=windows-1251'>
<meta name="Generator" content='EditPlus 2.20.211'>
<meta name="Author" content='Ciber SLasH'>
<title>JavaScript :: Работа с фреймами</title>
</head>

<frameset cols="250,*">
    <frame name="query" src='1.htm'>
    <frame name="response" src='2.htm'>
</frameset>
</html>

1.htm
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content='text/html; charset=windows-1251'>
<meta name="Generator" content='EditPlus 2.20.211'>
<meta name="Author" content='Ciber SLasH'>
<title>Frame["query"]</title>
</head>

<body>
1.htm
</body>
</html>

2.htm
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content='text/html; charset=windows-1251'>
<meta name="Generator" content='EditPlus 2.20.211'>
<meta name="Author" content='Ciber SLasH'>
<title>Frame["query"]</title>
<script type='text/javascript'>
function doSubmit() {
var wnd = window.open('', '', 'resizable');
wnd.document.write(
    '<script type="text/javascript">'+
    'function doUnLoad() {'+
    '    opener.window.top.frames.query.location.replace("3.htm");'+
    '    self.close();'+
    '}'+
    'function cll(t) {'+
    '    self.setTimeout(doUnLoad, 1000*t);'+
    '}'+
    '<\/script>'+
    '<BODY>'+
    '<script type="text/javascript">cll(2)<\/script>'+
    '<table width="100%" height="100%" align="center">'+
    '<tr align=center><td><img src="ButtonActive.png" hspace="4" /></td><td width="100%"><b>DATA $word</b></td></tr>'+
    '</table>'
);
}
</script>
</head>

<body>
<form onSubmit='doSubmit()'>
<input type="submit" value="submit">
</form>
</body>
</html>

3.htm
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content='text/html; charset=windows-1251'>
<meta name="Generator" content='EditPlus 2.20.211'>
<meta name="Author" content='Ciber SLasH'>
<title>Frame["query"].replace()</title>
</head>

<body>
<span style='color: red'>3.htm</span>
</body>
</html>

Такой эффект тебе нужен был?

Автор: Bolt 28.11.2005, 12:29
smile
хитрО
спасибо
к сож.
"У Вас недостаточно постов, чтобы изменять репутацию пользователей. Необходимо 100 постов."

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)