Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с ожиданием загрузки станицы у консольного скрипта. (https://javascript.ru/forum/misc/29440-problema-s-ozhidaniem-zagruzki-stanicy-u-konsolnogo-skripta.html)

Timon 28.06.2012 01:01

Проблема с ожиданием загрузки станицы у консольного скрипта.
 
В javascript я сущий новичок и столкнулся со следующей проблемой: я запланировал написать консольный скрипт, который автоматизирует мои действия, в процессе чего загружает различные странички. Однако, мне не удаётся заставить его ожидать их загрузки, что, понятно, необходимо. Сначала, я просто воспользовался циклом и пытался так или иначе приостановить работу скрипта после загрузки страниц:

function checkLoad()
{
     if (!window.onLoad)
     return setTimeout(checkLoad(), 1000);
}

do {
 
    document.location.replace('http://website.com');
    checkLoad()
    ...
}
while (arr.length > 0)


Мои попытки вызывали либо переполнение стека (как выше), либо пропуск скриптом загрузки страницы.

А потом я попытался реализовать это через событие OnLoad:

document.location.replace('http://website.com')    

onLoad = function (){
     alert ('here')
    switch (phase) {
...
    }
}


Также без особого успеха: функция не вызывается ни разу. Буду благодарен за совет.

ksa 28.06.2012 08:39

Цитата:

Сообщение от Timon (Сообщение 184711)
А потом я попытался реализовать это через событие OnLoad:

document.location.replace('http://website.com')    

onLoad = function (){
     alert ('here')
    switch (phase) {
...
    }
}


Также без особого успеха: функция не вызывается ни разу.

Бивас, тест!

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
function test() {
	alert('Опа!');
};
</script>
</head>
<body onload='test()'>
</body>
</html>


Таки вызывается! :dance:

Dim@ 28.06.2012 09:11

Timon,
засуньте код в функцию и в конце допишите document.onload = имя_функции;
без скобок

devote 28.06.2012 09:19

Цитата:

Сообщение от Dim@
и в конце допишите document.onload

вообще то window.onload

melky 28.06.2012 12:20

Цитата:

Сообщение от Timon
return setTimeout(checkLoad(), 1000);

и вот здесь скобки выделенные убрать

Timon 28.06.2012 13:09

Цитата:

Сообщение от ksa
Таки вызывается!

Это-то конечно, но мне нужно, чтобы скрипт вызывался из консоли и работал с "внешними" по отношению к нему страницами.

Цитата:

Сообщение от Dim@
засуньте код в функцию и в конце допишите document.onload = имя_функции;
без скобок

В смысле

document.location.replace('http://website.com')    

function main(){
     alert ('here')
    switch (phase) {
...
    }
}

window.onload = main;


Увы, тоже самое. Страница загружается, а функция не вызывается ни разу. Возможно, при загрузке новой страницы консольный скрипт также прерывается?

Deff 28.06.2012 13:14

Timon,
Выложите полный скрипт - ведь возможна ошибка в промежуточных действиях - из за которых просто скрипт не работает или разбейте тегами
<script type="text/javascript">
Код
</script>
На минимально рабочие куски и выложите нерабочую часть

Timon 28.06.2012 18:05

Даже вот такой скрипт

alert ('start')
document.location.replace('http://google.com')

function main(){
     alert ('here')
}

window.onload = main;


запускаемый через консоль firefox или firebug не приводит к запуску функции main. Что интересно, при этом firebug закрывается при загрузке гугла, если не выбрана опция "включить на всех страницах". Самое обидное, что за исключением перехода на новую страницу (казалось бы, такая ерунда), всё остальное мой скрипт выполняет.

Deff 28.06.2012 18:20

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body>

<script type="text/javascript">
alert ('start')
document.location.replace('http://google.com')

function main(){
     alert ('here')
}

window.onload = main;
</script>

</body>
</html>

devote 28.06.2012 18:22

Цитата:

Сообщение от Deff
window.onload = main ();

а смысл в скобках в конце??? ты же ее сразу вызываешь

Deff 28.06.2012 18:26

devote,
Эт я проверял в FF - все одно не пашет - хотя я думаю эффект связан опять тут с тестовым фреймом - пошел тестить на сайте

Deff 28.06.2012 18:33

Цитата:

Сообщение от Timon (Сообщение 185011)
Даже вот такой скрипт

alert ('start')
document.location.replace('http://google.com')

function main(){
     alert ('here')
}

window.onload = main;


запускаемый через консоль firefox или firebug не приводит к запуску функции main. Что интересно, при этом firebug закрывается при загрузке гугла, если не выбрана опция "включить на всех страницах". Самое обидное, что за исключением перехода на новую страницу (казалось бы, такая ерунда), всё остальное мой скрипт выполняет.

document.location.replace выполняется быстрее чем загрузка страницы, посему нун
или вкладывать document.location.replace('http://google.com')
в функцию main(), либо я не понимаю чего Вы хотите

Timon 28.06.2012 19:31

Пишет Exception: missing = in XML attribute

Цитата:

Сообщение от Deff
либо я не понимаю чего Вы хотите

Хочу, чтобы скрипт вызвал переход на нужную страницу, и продолжил действовать на оной, дождавшись загрузки... А потом ещё и ещё то же самое :)

Deff 28.06.2012 19:41

Цитата:

Сообщение от Timon
Хочу, чтобы скрипт вызвал переход на нужную страницу, и продолжил действовать на оной, дождавшись загрузки... А потом ещё и ещё то же самое

Вряд ли...
Вариант такой -

Периодически запоминать состояние скрипта по-таймеру и/или по-важным событиям, либо в куки либо в какое нидь storage - при загрузке страницы считывать запомненное состояние и продолжать деятельность

Timon 28.06.2012 19:53

Ага... Но как, собственно, продолжать/возобновлять работу скрипта по загрузке страницы (если не считать вручную)...

Получается, javascript не очень и годится для такой цели. Стоило, наверное, писать на старых добрых сях...

Deff 28.06.2012 20:13

Timon,
По таймеру и.иди событиям запоминаете флаги и данные в соответсвие этим данным,
при загрузки страницы - лезете в сохраненное - если сохранено перезагружаете флаги и данные стартуете с нужного флага, (флаг и данные к флагу фактически состояние скрипта на момент запоминания, в качестве флага можно выбрать массив с наращиванием индекса по окончании очередной скрипто операции - считаем только законченные операции, полуфабрикаты пересчитываем заново)
Естественно ява скрипт не лучший Вариант консоли

Timon 08.07.2012 03:21

Фуф - спасибо за советы, но последний вопрос был немного в другом. При запуске через консоль скрипт начинает исполняться, но при загрузке новой страницы (напр. после document.location.replace()), исполнение прерывается. Я интересуюсь тем, как автоматически возобновлять исполнение скрипта при каждой загрузке (исключая ручное вбивание в консоль по новой).

GuardCat 13.07.2012 18:33

Timon, userJs вам подойдёт больше, чем консоль, думается мне.


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