Hallo,
Ich möchte auf einer Seite mit Anmeldeformular mit Hilfe von Greasemonkey ein automatisches Login durchführen (Benutzer und Passwort automatisch eintragen).
Dann fülle Benutzer- und Passwort-Feld aus und rufe submit() des Formulars auf.
Das Formular wird aber erst über einen Login-Button geladen, den man (manuell) betätigen muss, dann erst werden die Formularfelder sichtbar.
Die Sichtbarkeit von Elementen kannst du mit CSS beeinflussen.
Oder wird auch das HTML per XMLHttpRequest nachgeladen? Untersuche das mit Firebug.
Ich will daher, sobald die Seite mit dem Login-Button geladen ist, diesen betätigen. Sein onclick() Event auslösen.
Wahrscheinlich denkst du um drei Ecken und es geht einfacher, wenn du das Formular selbst einblendest, als wenn du irgendwelche synthetischen Events erzeugst.
Alternativ könntest du das Event-Handling der Seite analysieren. Irgendwie muss ja der Event-Handler registriert werden. Wenn onclick des Buttons nicht existiert, weil addEventListener genutzt wurde, müsste es jedoch klappen Script, einen synthetischen Klick-Event zu erzeugen. Aber auch das ist um drei Ecken gedacht. Du kannst genauso schauen, welche Funktion beim Klick auf den besagten Button aufgerufen wird. Das wäre dann um zwei Ecken gedacht. Schließlich kannst du, siehe oben, direkt das Element einblenden, sofern wirklich nur das beim Klick auf den Button getan wird.
Ich kann das Event nur mit Greasemonkey auslösen, wenn ich vorher einen EventHandler registriert habe. Sonst kriege ich einen Firefox-Fehler.
Häh? Das verstehe ich nicht. Du musst keinen weiteren Event-Handler registrieren, um einen bestehenden auszulösen. Wie kommst du darauf?
Du kannst die Eigenschaft onclick als Funktion natürlich erst aufrufen, nachdem sie vom Script der fremden Site gesetzt wurde (oder steht onclick direkt im HTML-Code?). Das passiert üblicherweise onload, also ggf. nachdem dein Greasemonkey-Script aktiv wird.
Und das will mir nicht gelingen, weil ich das ganze in einer setTimeout-Funktion drin habe, die EventHandler-Funktion kann ich also nicht vorher deklarieren, bzw. sie ist in der setTimeout-Funktion dann nicht bekannt.
Verstehe ich nicht.
setTimeout( function(){if-Abfragen, ob das Element schon geladen ist } )
und da mit rein müsste meine EventHandler-Registrierung und aber auch gleich der Event-Aufruf.
Du zäumst das Pferd offenbar von hinten aus. Du solltest dir erst einmal ganz andere Fragen stellen: Wie und wann registriert die fremde Seite den Event-Handler, was tut die Handlerfunktion und was davon willst du imitieren? Ob das Element schon per DOM zur Verfügung steht, hat mit dem Event-Handling direkt nichts zu tun.
Wenn ich übrigens den Quelltext der Initialseite aufrufe finde ich nur jede Menge Javascript vor, aber kein html.
Dann musst du das analysieren! Firebug hilft dir dabei. Damit kannst du dir den DOM-Baum ansehen, Element-Eigenschaften und Haltepunkte im JavaScript setzen, sodass du genau die Ausführung des Scriptes beim Klick auf den Button verfolgen kannst.
Mathias