Страница 1 из 1

Javascript

СообщениеДобавлено: Сб сен 25, 2010 12:09
Padonak
дада снова это сладкое слово друзья!
итак. пишу User Script. поэтому к редактированию сорцов никакого доступа не имееца и происходит манипулирование лишь тем что дает страница. возникла необходимость добавки некоторых действий в существующую уже на странице функцию(и возможно не в одну). там такая фигня - летит флот куда-нибудь и на странице отображается таймер сколько осталось времени ему лететь. таких таймеров может быть много - от 1 до 15 или даже больше. каждый таймер прописан в странице своей собственной отдельной функцией. вот пример такого таймера:
Код: Выделить всё
<tr class="flight">
   <script type="text/javascript">
function tfs1() {
v = new Date();
var bxxfs1 = document.getElementById('bxxfs1');
n = new Date();
ssfs1 = ppfs1;
ssfs1 = ssfs1 - Math.round((n.getTime() - v.getTime()) / 1000.);
mfs1 = 0;
hfs1 = 0;
if (ssfs1 < 0) {
   bxxfs1.innerHTML = "-";
} else {
   if (ssfs1 > 59) {
      mfs1 = Math.floor(ssfs1 / 60);
      ssfs1 = ssfs1 - mfs1 * 60;
   }
   if (mfs1 > 59) {
      hfs1 = Math.floor(mfs1 / 60);
      mfs1 = mfs1 - hfs1 * 60;
   }
   if (ssfs1 < 10) {
      ssfs1 = "0" + ssfs1;
   }
   if (mfs1 < 10) {
      mfs1 = "0" + mfs1;
   }
   bxxfs1.innerHTML = hfs1 + ":" + mfs1 + ":" + ssfs1;
}
ppfs1 = ppfs1 - 1;
window.setTimeout("tfs1();", 999);
}
</script>

   <th>
      <div id="bxxfs1" class="z">-</div>
      <font color="lime">12:59:41</font>
   </th>


другие таймеры если они есть будут выглядеть точно так же с той лишь разницей что имя ф-ции будет отличаться цифрой (tfs2(),tfs3(),tfs4() и т.д.) и так же будут отличаться дивы куда оно пишет время(bxxfs2,bxxfs3,bxxfs4 и т.д.).

у меня есть необходимость совершить вывод определенной инфы в тот момент когда каждый таймер дойдет до нуля и покажет в диве "-".

сам вопрос мой состоит в следующем. существует ли способ обхода циклом всех джаваскрипт-функций в документе (типакаг перебор коллекции document.functions или что-то в таком роде)? я представляю себе это так: цикл обходит все ф-ции и если в имени ф-ции находит определенный сабстринг(в данном случае это будет if(funcname.indexOf('tfs')) != -1) то происходит оверрайт данной ф-ции а если нет то продолжает просто перебор.

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

Re: Javascript

СообщениеДобавлено: Вс сен 26, 2010 11:04
Padonak
уважаемыйе девианты! хватит бухать! тема по-прежнему актуальна -12-

Re: Javascript

СообщениеДобавлено: Пн сен 27, 2010 2:50
Jedi
я хз

Re: Javascript

СообщениеДобавлено: Пн сен 27, 2010 10:04
skreets
я тоже...

Re: Javascript

СообщениеДобавлено: Пн сен 27, 2010 12:31
Muerto
В принципе, я тебе уже отписался в аську. Методом гавнокода можно решить примерно так:
Код: Выделить всё
function message(i)
{
try
  {
  tfs = tfs + i + '(bxxfs'+i + ', 0)';
eval(tfs);
  }
catch(err)
  {
  return false;
  }
finally {
if (err) {return false;} else {message(i+1);}
     }
}

Не ручаюсь, что код работает и работает так как нужно.

Re: Javascript

СообщениеДобавлено: Пн сен 27, 2010 12:58
Muerto
Накрайняк можно разместить все функции в отдельные блоки и обращаться через массив document.getElementsByTagName("script") к ним.

Re: Javascript

СообщениеДобавлено: Пн сен 27, 2010 13:34
Padonak
мне вот что еще не до конца ясно. если я делаю оверрайт функции то она некоторым образом изменяется. но все эти таймеры уже запущены т.е. функции работают к тому моменту когда я начну делать оверрайт т.к. Юзер Скрипт срабатывает после загрузки. то что они запущены не помешает оверрайту?

Re: Javascript

СообщениеДобавлено: Пн сен 27, 2010 15:06
Muerto
Ух, блин... Ну ты, барин, и вопросы задаешь... Пошукай на http://javascript.ru/tutorial/events/timing

Re: Javascript

СообщениеДобавлено: Пн сен 27, 2010 15:57
Padonak
а кто виноват што я в такие дебри ваще забрался? кто мне тут все время подсказывал? из-за кого мне джаваскрипт нравица? а??? Изображение вот теперь и расхлебывай -12-

Re: Javascript

СообщениеДобавлено: Пн окт 25, 2010 21:03
Padonak
вобщем написал-таки я оверрайт с добавкой всякой прикольной фигни с джикваерей. вот функцейа:

Код: Выделить всё
function overviewTimersOverwrite(){
var divs=document.getElementsByTagName('DIV'),timers=[];
for(var i=0;i<divs.length;i++){
if((divs[i].id)&&(divs[i].id.indexOf('bxx')!=-1)){var suffix=divs[i].id.substring(3,divs[i].id.length),temparr=[divs[i].id,suffix];
timers.push(temparr);}
else{continue;}
}
if(timers.length>0){
for(var f=0;f<timers.length;f++){
var nax=eval('t'+timers[f][1]);
// этот eval идет в одну строку я просто для удобства восприятия разбил на строки
eval('t'+timers[f][1]+'=function(){
v=new Date();
var divv=document.getElementById("'+timers[f][0]+'");
n=new Date();
ssfs2=pp'+timers[f][1]+';
ssfs2=ssfs2-Math.round((n.getTime()-v.getTime())/1000.);
mfs2=0;
hfs2=0;
if(ssfs2<0){divv.innerHTML="-";
var $tr=$("#'+timers[f][0]+'").parent().parent();
$tr.children().fadeTo(3500,0.3);
$("#'+timers[f][0]+'").parent().html("<img src=\'http://padonak.lv/_paskuda/ogame/orange_check.png\' alt=\'выполнено\' onmouseover=\'$(this).parent().siblings().fadeTo(500,1);\' onmouseout=\'$(this).parent().siblings().fadeTo(1000,0.3);\' onclick=\'$(this).parent().parent().remove();\' style=\'cursor:pointer\' \/>");
return;
}
else{
if(ssfs2>59){mfs2=Math.floor(ssfs2/60); ssfs2=ssfs2-mfs2*60;if(mfs2>59){hfs2=Math.floor(mfs2/60);mfs2=mfs2-hfs2*60;}if(ssfs2<10){ssfs2="0"+ssfs2;}
if(mfs2<10){mfs2="0"+mfs2;}
divv.innerHTML=hfs2+":"+mfs2+":"+ssfs2;
}
pp'+timers[f][1]+'=pp'+timers[f][1]+'-1;
window.setTimeout("t'+timers[f][1]+'()",999);}');
}
}
else{return;}
}


а вот как оно выглядит в работе:


Re: Javascript

СообщениеДобавлено: Вт окт 26, 2010 8:19
Muerto
ogame?

Re: Javascript

СообщениеДобавлено: Вт окт 26, 2010 22:21
Padonak
Muerto писал(а):ogame?


почти -03- http://xgame.net.ua/uni4/ то же самое что огейм