zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden Greasemonkey: bleibt manchmal bei setTimeout stecken

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 11.05.2012, 22:07
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 11.05.2012
Beiträge: 3
casi befindet sich auf einem aufstrebenden Ast
Frage Greasemonkey: bleibt manchmal bei setTimeout stecken

Hallo allerseits,

bei meinem Greasemonkey-Script bleibt die Abarbeitung manchmal bei einem setTimeout-Aufruf stecken - manchmal auch nicht. Je länger die Wartezeit ist, desto eher scheint es nicht weiter zu gehen. Folgende Funktion demonstriert das bei mir:

Code:
function cw_TimeoutSec(func, sec){
        GM_log("cw_TimeoutSec: " + sec + " Sekunden");
        if (sec <= 0) {
            setTimeout(func, 100);
        } else {
            setTimeout(function(){cw_TimeoutSec(func, sec-1)}, 1000);
        }
}
In der Fehlerkonsole kann man sehen, dass beim Aufruf von z.B. cw_TimeoutSec(irgendwas, 20) manchmal komplett heruntergezählt und die Ausführung mit irgendwas fortgesetzt wird, manchmal stockt die Ausführung aber vorher - bei unterschiedlicher Tiefe der Rekursion.

Hat jemand eine Idee, was da passiert?
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 14.05.2012, 12:16
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.918
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Das ist keine Rekursion. Ein Timeout ist ein völlig neuer Start der Funktion. eine Rekursion, ist es nur dann wenn die Funktion im gleichen Kontext sich selber aufruft.

Ansonsten kann ich aber erstmal keinen Fehler entdecken. Die Funktion wird nachdem sie einmal aufgerufen wurde, nach einer Sekunde neu aufgerufen, solange bis der Wert für den Timeout unter Null ist. Dann wird nach 100 Millisekunden die Funktion ein letztes Mal aufgerufen.

Das sollte so funktionieren. Eine Fehlermeldung in der Konsole gibt es nicht?
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 14.05.2012, 20:44
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 11.05.2012
Beiträge: 3
casi befindet sich auf einem aufstrebenden Ast
Standard

Danke für die Antwort. Ist schon klar, dass es keine echte Rekursion ist - aber immerhin so etwas ähnliches, weil sich die Funktion selbst aufruft...

Ich bin drauf gekommen, weil ein bis dato funktionierendes Skript plötzlich nicht mehr ging. Dort sind eine Menge setTimeout-Aufrufe drin, z.T. auch mehrere Sekunden bis Minuten. Bei diesen Aufrufen bleibt das Skript regelmäßig hängen - je kürzer der Timeout, desto höher ist die Wahrscheinlichkeit, dass er korrekt abgearbeitet wird. Ich habe die Funktion geschrieben, um sicherzustellen, dass sie grundsätzlich funktioniert (und in dem vergeblichen Versuch, einzelne lange Aufrufe durch viele kurze zu ersetzen ).

Es gibt keine Fehlermeldung in der Konsole - das Skript ist einfach tot und wird auch nach mehreren Minuten Wartezeit nicht weiter ausgeführt.

Naja, und ich weiß nicht, was sich an meinem Rechner in dem Moment verändert hat - abgesehen von der betreffenden Webseite. Nur leider bleibt das Skript bei allen getesteten Seiten hängen, auch einer lokalen Seite, die keinen Schnickschnack eingebaut hat. Und vielleicht hat sich auch irgendwas upgedatet - aber das weiß ich nicht so genau.
Mit Zitat antworten
  #4 (permalink)  
Alt 14.05.2012, 23:03
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.918
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Das läßt sich so nicht nachvollziehen, ein Timeout bleibt nicht "hängen". Der wird immer aufgerufen. Ich vermute eher ein Problem bei der Logik. Du stopst ja die Timeout Aufrufe in deinem obigen Beispiel. Vielleicht wird der Timeout irgendwann einfach nicht mehr gestartet?
Mit Zitat antworten
  #5 (permalink)  
Alt 15.05.2012, 21:21
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 11.05.2012
Beiträge: 3
casi befindet sich auf einem aufstrebenden Ast
Standard

Das ist ja genau mein Problem, dass sich das nicht nachvollziehen und nichtmal ordentlich reproduzieren lässt. Der Code zählt auf der selben Seite unterschiedlich weit. Wenn ich direkt vor dem setTimeout-Aufruf einen GM_log einsetze, wird der als letztes in der Konsole angezeigt.

Hm, ich habe bereits alle Addons und Plugins deaktiviert, ohne Erfolg. Als nächstes werde ich wohl Firefox komplett de- und neuinstallieren. Außerdem werde ich das Skript auf einem anderen Rechner ausprobieren. Dort wird es aber wohl gehen... Und natürlich könnte sich auch irgend ein Schädling eingenistet haben...

Echt blöd, ich werde wohl am Donnerstag ein wenig Zeit investieren müssen. Hab erstmal vielen Dank für die Unterstützung - ich melde mich, ob meine Maßnahmen Erfolg haben.
Mit Zitat antworten
Antwort

Stichwörter
firefox, greasemonkey, settimeout

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
setTimeout David Javascript & Ajax 4 19.07.2010 15:36
Frage zu setTimeout gustavmega Javascript & Ajax 0 23.11.2009 22:37
[Fehler] setTimeout innerhalb einer Klasse Lord-Sfx Javascript & Ajax 2 08.04.2009 00:37
Mit greasemonkey css erstellen ZeroX^ CSS 0 01.10.2008 22:53
Mit setTimeout funktion im eigenen Objekt aufrufen PoWl Javascript & Ajax 5 11.05.2008 10:35


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:43 Uhr.