Вопрос по яву скрипту - плагинчик

sanitarn
На сайте с 20.08.2007
Offline
199
672

[JS]var urls = window._content.document.getElementsByTagName('a');

var ii = 1;

for(var i=0; i<urls.length; i++) {

if (urls.parentNode.tagName == 'P'){
if (urls.parentNode.parentNode.tagName == 'DIV'){
if(urls.parentNode.parentNode.parentNode.tagName == 'TD'){
window._content.setTimeout(function(){

urls.parentNode.innerHTML = urls.parentNode.innerHTML+'<div id="fp_link_info_'+i+'">Загрузка ссылок с Yahoo</div>';
get_url('http://siteexplorer.search.yahoo.com/search?p='+urls.href, function(data) {
var pattern_inlinks = /Inlinks\s\((.*?)\)/i;
var p_result = pattern_inlinks.exec(data);
window._content.document.getElementById('fp_link_info_'+i).innerHTML = '<b>Ссылок: '+p_result[1]+'</b>';
});
alert('done');

}, (1000 * ii ));
ii++;
}
}
}
}[/JS]


Вообщем после 1-го вызова функции в setTimeout она не продолжает работу.... alert('done') выводит, а дальше ничего не происходит по циклу дальше ничего не делает... если убрать соотвественно setTimeout, то все работает норма... мне просто нужно интервал задавать между вызовом функции... что-то типа sleep'а)) есть у кого какие предположения?
p.s. window._content = аналогично window....... просто плагин для файрфокса делаю)

финансовый ответ (https://finansanswer.ru) Займ для безработных (https://finansanswer.ru/mikrozajmy/bezrabotnym/)
T.R.O.N
На сайте с 18.05.2004
Offline
314
#1
sanitarn:
ii++;

поставьте после ii++;

alert('123');

Если в таком варианте заработает, тогда более подробно объясню что нужно делать.

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
[Удален]
#2

Во первых вы пишете уже существующий плагин - SeoQuake умеет показывать кол-во беков с яху для всех ссылок на странице.

Во вторых вам должно быть известно что у setTimeout первый параметр не Callback функция а строка(фактически она evalом вызывается). Т.е. например бесполезно писать setTimeout(myFunc,100), надо писать setTimeout("myFunc()", 100), таким образом функция должна быть объявлена на верхнем уровне и никаких замыканий тут сделать не получится, придется ей параметры передавать.

Точнее говоря, конечно последние стандарты js допускают передачу первым параметром функцию (и скорее всего файрфокс это поддерживает), но замыкание все равно не сработает, нужно передавать параметры, они передаются после таймаута

setTimeout(function(){...},100,arg1,arg2,arg3...);

T.R.O.N
На сайте с 18.05.2004
Offline
314
#3
neolord:
Точнее говоря, конечно последние стандарты js допускают передачу первым параметром функцию (и скорее всего файрфокс это поддерживает), но замыкание все равно не сработает, нужно передавать параметры, они передаются после таймаута
setTimeout(function(){...},100,arg1,arg2,arg3...);

Замыкание реализуется следующим образом

setTimeout(function(i){return function(){....=i}}(x),1000);

Хотя сам мелкософт не очень рекомендует это использовать и, кажется, сделал даже заплатку от утекания памяти при таком вызове.

Но здесь ведь рассматривается иной случай. Здесь используются только глобальные параметры

[Удален]
#4
T.R.O.N:
Замыкание реализуется следующим образом
setTimeout(function(i){return function(){....=i}}(x),1000);

Но здесь ведь рассматривается иной случай. Здесь используются только глобальные параметры

Данный кусок кода не дает понять (лично мне) где объявлен например var Urls. Либо это глобальный уровень, либо локальный по отношению к какой то функции которую этот плагин втыкает в код страницы. Так что пес его знает. Я бы в любом случае от этого отказался.

neolord добавил 20.03.2009 в 17:39

T.R.O.N:

Хотя сам мелкософт не очень рекомендует это использовать и, кажется, сделал даже заплатку от утекания памяти при таком вызове.

Да, было такое.

JTRTA
На сайте с 06.07.2008
Offline
25
#5

А нет возможности в действии скрипт посмотреть? чтоб дебагером прогнать все проще ошибки находить

Дизайн /ru/forum/493415 (/ru/forum/493415) Верстка от 15$ /ru/forum/509339 (/ru/forum/509339) Сайты под ключ aiogino.studio@gmail.com icq: 460146806

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий