Pattern®
Зарегистрирован: 02.10.2004 Сообщения: 1
|
Добавлено: Сб Окт 02 2004 12:11 Заголовок сообщения: JavaScript+PHP: Автоматическая смена страниц |
|
|
Есть следующая проблема.
Есть фреймовая страница. В ней содержится 2 фрейма. 2-ой (нижний) фрейм является управляющим для 1-ого фрейма. Во втором находится список страниц для отображения, а так же прописан javascript код, который проверяет, загрузилась ли до конца страница, находящаяся в 1-ом фрейме. Если она загрузилась, то 1-ый фрейм загружает следующую страницу списка, а 2-ой фрейм перегружает сам себя. Если страница в 1-ом фрейме не загрузилась до конца, то функция проверки загрузки страницы перегружается и делает проверку снова.
Вроде бы всё понятно и кажется чего тут делать. Однако после загрузки 2-ой страницы, появляется глюк, что страницы зацикливаются...
Прилагаю "сырцы" Кто знает в чём глюк, ткните мне пальцем, уже сутки над этой проблемой колбашусь, никак не могу решить.
Фреймовая главная страница index.php: Код: | <html>
<head>
<title>Title</title>
</head>
<frameset rows="*,30" framespacing=0 border=0 frameborder=0>
<frame name='fr_up' src='http://www.anysite.com/1.php' marginwidth=0 marginheight=0 scrolling=auto frameborder=0 noresize>
<frame name='fr_down' src='http://www.anysite.com/down.php' marginwidth=0 marginheight=0 scrolling=no frameborder=0 noresize>
</frameset>
<body>
</body>
</html> | 2-ая (нижняя) страница down.php: Код: | <?php
$list_pages[]="'http://www.anysite.com/1.php'";
$list_pages[]="'http://www.anysite.com/2.php'";
$list_pages[]="'http://www.anysite.com/3.php'";
$list_pages[]="'http://www.anysite.com/4.php'";
$list_pages[]="'http://www.anysite.com/5.php'";
$list_pages[]="'http://www.anysite.com/6.php'";
$all++;
if ($all>5) { $all=0; }
$url=$list_pages[$all];
?>
<html>
<head>
<title>Down</title>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
<script language="javascript">
var start;
var end;
var cd_;
var any_url_;
function CountDown(any_url_) {
start=-1;
end=30;
UpRepeat(any_url_);
}
function UpRepeat(any_url_){
start++;
if(start>end){
start=-1;
}
if (top.frames['fr_up'].document.readyState=="complete"){
window.parent.frames['fr_up'].document.location.href=any_url_;
document.location.reload();
} else {
cd_=setTimeout("UpRepeat(any_url_)",1000);
}
}
</script>
</head>
<body onLoad=UpRepeat(<?=$url?>)>
<table width='100%' height=30 border=0 cellpadding=0 cellspacing=0>
<form name=form method=post action='down.php'>
<tr>
<td><input type=submit name=submit value='Следующая'></td>
<td>Показано страниц <input type=text name=all value=<?=$all?> class=read_text readonly></td>
</tr>
</form>
</table>
</body>
</html> |
[..:ДОБАВЛЕНО:..]
Я разобрался в чём дело. Нужно слегка модифицировать функции в странице down.php: Код: | <?php
...
$a_++;
$all_++;
if ($a_>14) { $a_=0; }
$url=$list_pages[$a_].",".$a_.",".$all_;
?>
...
var page_num_;
var page_all_;
var url_next_; //Вместо any_url
function CountDown(url_next_,page_num_,page_all_) {
start=-1;
end=30;
if(UpRepeat()){
window.parent.frames['fr_up'].document.location.href=url_next_;
document.location.href='http://www.anysite.com/fr_down.php?a_='+page_num_+'&all_='+page_all_;
}
} | И в функции UpRepeat() Код: | ...
if(start>end){
return false;
}
if (top.frames['fr_up'].document.readyState=="complete"){
return true;
} else {
ur_=setTimeout("UpRepeat()",1000);
}
... | Теперь получается, что если нажать на кнопку в down.php, следующая страница загрузится в 1-ом фрейме как полагается, если ещё не загрузилась текущая. CountDown вызывает UpRepeat(), которая будет выполняться, пока либо не загрузится страница, либо пока не превысится время выполнения, т.е. end=30 (секунд). Правда по окончании времени больше ничего не будет происходить, но это уже совсем другой вопрос. |
|