Циклический вызов с задержкой.
Скрипт для 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, время: 02:08. |