Циклический вызов с задержкой.
Скрипт для Grease Monkey.
var url_cur = location.href ; var name_pos = 0; var cur_name = ''; var list_name = [ "test1" , "test2" ]; for(var j=0;j<list_name.length;j++){ alert('!'); temp(j); } function temp(j){ var timeout_id = setTimeout(function(){ alert(j); cur_name = list_name[j]; alert(cur_name); if(check()){ send_do(cur_name); } else{ enter(); send_do(cur_name); }; },10000); } Цель: Проход по всему массиву с некоторой задеркой. Однако, зацикливается на нулевом элементе и дальше никак не работает. Порыл в инете, перепробовал несколько вариантов. Ничего не получается. |
<script> var url_cur = location.href ; var name_pos = 0; var cur_name = ''; var list_name = [ "test1" , "test2" ]; for(var j=0;j<list_name.length;j++){ alert('j(цикла)='+j); temp(j); } function temp(j){ var timeout_id = setTimeout(function(){ cur_name = list_name[j]; alert('j(с задержкой)='+j+'; cur_name='+cur_name); if(check()){ send_do(cur_name); } else{ enter(); send_do(cur_name); }; },1000); } </script> Цитата:
|
Эти функции к ошибке не имеют отношение. Т.к.
1. При их изъятии также происходит зацикливание на 0-ом элементе. 2. Они стабильно работают уже более года. 3. Также нет задержки между сообщениями. Все выводятся сразу. |
alert(list_name.length); if (name_pos < list_name.length) { alert(name_pos); temp(name_pos); name_pos++; } function temp(name_pos){ var timer = setTimeout(function(){ alert(name_pos); cur_name = list_name[name_pos]; alert(cur_name); },10000); } Так тоже зависает на нулевом. Возможно не учел какие-то особенности GreaseMonkey ? |
А почему между ними должна возникнуть задержка?
Вы в цикле запускаете несколько таймеров. Через 10 секунд все таймеры истекают и выполняются все заданные функции, практически одновременно. Либо увеличивайте каждый раз время таймаута (что не есть гуд), либо запускайте таймеры по цепочке. Тоесть каждый раз выполняется функция, отрабатывает и запускает следующий таймер. Хз че вы получить хотите, еслиб подробней объяснили - было бы проще. |
Грубо говоря мне нужно отправить 10 сообщений. Отправил первое. Задержка 10 сек, отправил второе. Задержка 10 секунж. Отправил третие.
Примерно так: var name_pos = 0; if (name_pos < 100) { alert(name_pos); var timer = setTimeout(function(){ alert(name_pos); name_pos++; },10000); } Т.е. по идее он должен выводить 1,2,3,4.. с задержкой в 10 секундн. Он он выводит только 0 и каждую секунду. Цитата:
|
<script> var messages = ['Доброе утро', 'Добрый день', 'Добрый вечер']; function queueMessages ( messages ) { var index = 0; function queueMessage () { setTimeout(function () { sendMessage( messages[ index ++ ] ); if ( messages[ index ] !== undefined ) { queueMessage(); } }, 3000); } queueMessage(); } function sendMessage ( message ) { document.body.appendChild( document.createTextNode( message + '! ' ) ); } queueMessages( messages ); </script> |
Ошибка оказалась связана с работой самого плагина. Точнее не полнного понимания принципа его работы. При обновлении страницы, которое у меня происходит, он запускается понову. т.о. и происходит зацикливание на 0-ом элементе. Как от подобного можно избавиться?
В итоге получилось что мои предыдущ. варианты все-таки оказались правильными. Так же как и правильными все функции, однако из-за особенности работы плагина все работает не так как нужно. |
А если флаги в куки пихнуть?
Так же возможно стоит поставить какое-то ограничение на выполняемость, т.е. уйти от срабатывания на скрипты, выполняемые в фоновом режиме // @include *site.ru/forest_php.php* В моём случае ГМ реагирует только на выполнение forest_php.php, который запускается в фоне. |
Часовой пояс GMT +3, время: 06:23. |