Проблема с ожиданием загрузки станицы у консольного скрипта.
В 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) { ... } } Также без особого успеха: функция не вызывается ни разу. Буду благодарен за совет. |
Цитата:
<!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: |
Timon,
засуньте код в функцию и в конце допишите document.onload = имя_функции; без скобок |
Цитата:
|
Цитата:
|
Цитата:
Цитата:
document.location.replace('http://website.com') function main(){ alert ('here') switch (phase) { ... } } window.onload = main; Увы, тоже самое. Страница загружается, а функция не вызывается ни разу. Возможно, при загрузке новой страницы консольный скрипт также прерывается? |
Timon,
Выложите полный скрипт - ведь возможна ошибка в промежуточных действиях - из за которых просто скрипт не работает или разбейте тегами <script type="text/javascript"> Код </script> На минимально рабочие куски и выложите нерабочую часть |
Даже вот такой скрипт
alert ('start') document.location.replace('http://google.com') function main(){ alert ('here') } window.onload = main; запускаемый через консоль firefox или firebug не приводит к запуску функции main. Что интересно, при этом firebug закрывается при загрузке гугла, если не выбрана опция "включить на всех страницах". Самое обидное, что за исключением перехода на новую страницу (казалось бы, такая ерунда), всё остальное мой скрипт выполняет. |
<!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,
Эт я проверял в FF - все одно не пашет - хотя я думаю эффект связан опять тут с тестовым фреймом - пошел тестить на сайте |
Цитата:
или вкладывать document.location.replace('http://google.com') в функцию main(), либо я не понимаю чего Вы хотите |
Пишет Exception: missing = in XML attribute
Цитата:
|
Цитата:
Вариант такой - Периодически запоминать состояние скрипта по-таймеру и/или по-важным событиям, либо в куки либо в какое нидь storage - при загрузке страницы считывать запомненное состояние и продолжать деятельность |
Ага... Но как, собственно, продолжать/возобновлять работу скрипта по загрузке страницы (если не считать вручную)...
Получается, javascript не очень и годится для такой цели. Стоило, наверное, писать на старых добрых сях... |
Timon,
По таймеру и.иди событиям запоминаете флаги и данные в соответсвие этим данным, при загрузки страницы - лезете в сохраненное - если сохранено перезагружаете флаги и данные стартуете с нужного флага, (флаг и данные к флагу фактически состояние скрипта на момент запоминания, в качестве флага можно выбрать массив с наращиванием индекса по окончании очередной скрипто операции - считаем только законченные операции, полуфабрикаты пересчитываем заново) Естественно ява скрипт не лучший Вариант консоли |
Фуф - спасибо за советы, но последний вопрос был немного в другом. При запуске через консоль скрипт начинает исполняться, но при загрузке новой страницы (напр. после document.location.replace()), исполнение прерывается. Я интересуюсь тем, как автоматически возобновлять исполнение скрипта при каждой загрузке (исключая ручное вбивание в консоль по новой).
|
Timon, userJs вам подойдёт больше, чем консоль, думается мне.
|
Часовой пояс GMT +3, время: 15:58. |