Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему не работает такая конструкция (https://javascript.ru/forum/misc/24892-pochemu-ne-rabotaet-takaya-konstrukciya.html)

tavrik83 18.01.2012 01:20

Почему не работает такая конструкция
 
<script type='text/javascript'>
different=1;base=1;function redirect(){window.location="http://localhost/test/index2.php"}function gothere(arg){var different=arg;if(different>base){base=different;redirect()}setTimeout(function(){gothere(history.length)},30000)};
</script>

Заметил, что редирект происходит когда страница еще не загрузилась, т.е. при параметре от 1000 до 10000, а при 30000 (как в примере) страница успевает загружаться и редиректа нет. Почему? И как можно исправить?
<?php 
session_start(); 
$_SESSION['hash'] = md5(time());
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Пример</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
html,body{height:100%;padding:0;margin:0}
.header{height:100px;}
</style>
<script type='text/javascript'>
function getClientHeight(){return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight}
var setIframe = function() {
    var ifr = document.getElementById('ifr');
    ifr.style.height = getClientHeight()+'px';
}
</script>
<script type='text/javascript'>
different=1;base=1;function redirect(){window.location="http://localhost/test/index2.php"}function gothere(arg){var different=arg;if(different>base){base=different;redirect()}setTimeout(function(){gothere(history.length)},30000)};
</script>
</head>
<body>
<iframe id="ifr" onload="base=history.length;gothere(history.length);" src="http://www.yahoo.com/" width="100%" height="100%" align="left" frameborder="0"></iframe>
<script type='text/javascript'>
var ex = new setIframe();
</script>
</body>
</html>

tavrik83 18.01.2012 21:53

Потому что...

Kolyaj 18.01.2012 23:08

А вы специально код в одну строчку вытянули, чтобы мы тут помучились?

popov654 21.01.2012 00:54

Это же очевидно. У Вас значения равны, а в условии строгое неравенство стоит.

tavrik83 21.01.2012 16:14

Цитата:

Сообщение от popov654 (Сообщение 151753)
Это же очевидно. У Вас значения равны, а в условии строгое неравенство стоит.

А можно ткнуть носом?

popov654 21.01.2012 16:34

base=history.length;gothere(history.length);

Ну как бы вот. И это не единственное место, где неверно. Но чтобы подсказать Вам со вторым, мне нужно узнать логику Вашего скрипта. Иными словами, что Вы хотите сделать? При каких условиях должен происходить редирект, а при каких - нет?

tavrik83 21.01.2012 17:04

Цитата:

Сообщение от popov654 (Сообщение 151865)
base=history.length;gothere(history.length);

Ну как бы вот. И это не единственное место, где неверно. Но чтобы подсказать Вам со вторым, мне нужно узнать логику Вашего скрипта. Иными словами, что Вы хотите сделать? При каких условиях должен происходить редирект, а при каких - нет?

Попробую:
Пользователь кликает по любой ссылке во фрейме (в данном случае yahoo.com) и после 30 секунд, несмотря на то, загрузилась ли новая страница в этом фрейме или нет, перенаправляется на другую страницу (в данном случае index2.php)
Как-то так...

popov654 21.01.2012 17:31

Ну тогда в том месте у Вас всё верно. Попробуйте так:
var different, base;

function redirect(){
    window.location="http://localhost/test/index2.php"
}

function gothere(arg){
    if(arg > base){
        base=different;
        redirect()
    }
    setTimeout(function(){gothere(99999)},30000)
}

tavrik83 21.01.2012 17:43

Цитата:

Сообщение от popov654 (Сообщение 151871)
Ну тогда в том месте у Вас всё верно. Попробуйте так:
var different, base;

function redirect(){
    window.location="http://localhost/test/index2.php"
}

function gothere(arg){
    if(arg > base){
        base=different;
        redirect()
    }
    setTimeout(function(){gothere(99999)},30000)
}

В этом случае редирект происходит даже если ничего не делать, а нужно чтобы редиректилось только после клика по любой ссылке


Часовой пояс GMT +3, время: 11:44.