Der Haken bei der Sache ist, daß es sich um eine fremde Seite handelt, auf deren Funktionalität ich keinen Einfluß habe.
und auch keine Zugriffsmöglichkeit mit JS.
Das ist falsch. Mit einem Bookmarklet kann man eigenen JS-Code in eine fremde Seite einschleusen und ausführen.
Das ist mir neu, kann das jemand bestätigen?
(ist aber nicht völlig undenkbar)
Dabei ist schon eine kleine Klippe zu umschiffen: Die Seite, in die ich mich hineingemogelt habe, wird durch window.open deaktiviert. Meine Funktion läuft daher zustandsgesteuert als Timeoutfunktion.
Du redest seltsam fremd. Mit "wird durch window.open deaktiviert" kann ich nichts anfangen, window.open() öffnet u.U. ein neues Browserfenster. Ich bin mir sicher das du weißt was du tust, nur deine Beschreibungen helfen Aussenstehenden nicht das zu verstehen.
Das verstehe ich nicht. Was bedeutet hingemogelt? Was wird deaktiviert? Was für eine Funktion?
Hineingemogelt per Bookmarlet - s.o.
dito, deine Erläuterung was hingemogelt und deaktiviert heißt, läßt sich nicht nachvollziehen,
Meine Funktion prüft per AutoIT3::WinExists (als ActiveX geladen), wann das Popup vollständig da ist. Auch das klappt und ich habe bisher AutoIT benutzt, um per simuliertem Mausklick das Form abzuschicken - abenteuerlich, aber auch das funktioniert.
Ab hier reden wir wohl von etwas völlig anderem, ich kann mir nicht vorstellen wie eine JS Anwendung per "AutoIT3::WinExists" ein popup prüft. Ich weiß nur soviel "AutoIT3 automatisiert alles", aber wie weit sich das mit JS verbinden läßt ist mir unbekannt.
Wir reden also nicht von JS sondern vorn ActiveX?
Das ist eine komplett andere Sache, dazu wären ein paar hinweise was das ActiveX macht sinnvoll oder ist das so bekannt und nur mir bisher entgangen?Nein, wir reden von JS, das zu gewissen Zwecken auf ActiveX-Objekte zugreift - das ist nichts weltbewegendes. Ich benutze hier AutoIt3, um z.B. einen Button aus JScript heraus zu klicken.
OK, wir reden von etwas anderem, von JScript hab ich keine Ahnung.
Nun wirds allerdings haarig: Wenn die Timeout-Funktion auf das document des Popup zum falschen Moment zugreift, stürzt sie ab und die Automatisierung scheitert kläglich.
Ja, wenn man in JS auf Objekte zugreift die nicht existieren passieren manchmal seltsame Dinge, stimmt.
Welche Timeout Funktion? Was macht die konkret?
Na ganz einfach: Meine Routine, die per Bookmarklet implantiert wurde, implementiert einen Automaten, der abhängig von der Zustandsvariablen in einem switch ein Stück Code abarbeitet (und dabei ggf. die Zustandsvariable ändert) und terminiert. Vor dem Return meldet sie sich selbst erneut als Timeout an.
du beschreibst einen normalen Programmablauf sehr schön. Nur sehe ich nicht, wo dein Beispielcode auf das oben erwähnte document zugreift?
Der Effekt ist, daß mein Code asynchron zu den Abläufen in dem document läuft, in das er eingepflanzt wurde.
???
Der Effekt ist, daß DownloadRobot auch dann gerufen wird, wenn gerade per window.open ein anderes Fenster aktiviert wurde. Die Kehrseite ist allerdings, daß man aus DownloadRobot heraus auch in eine Baustelle greifen und sich dort die Finger verbrennen kann - genau das ist das Problem, das ich einigermaßen sauber umschiffen will.
Das stimmt.
Daß das mit onload nicht zu machen ist, liegt auf der Hand, wenn man auf den Server keinen Einfluß hat. Mir ist mittlerweile eine (unschöne) Lösung eingefallen: try/catch zum auffangen der Abstürze.
Was ist passiert, als du es mit einer Überprüfung ala typeof window.document probiert hast?
Kann man eigentlich mit den bei Ajax benutzten Funktionen synchron ein Form.submit nachbauen und so eine Rückmeldung bekommen, wann das Resultat vorliegt?
Entweder verstehe ich auch diese Frage nicht, oder du sprichst von dem was AJAX eigentlich macht. Du bekommst eine Rückmeldung, wenn das Resultat vom Server vorliegt.
Struppi.
Javascript ist toll (Perl auch!)