frame fertig geladen->seiteninhalt auslesen
SchwarzerRabe
- javascript
0 wahsaga0 SchwarzerRabe0 Zapp
Da ich mich des öfteren mit anderen Leuten übers Internet über meinen Stand bei ogame(ein Online-Browser-Spiel: http://www.o2game.de) austausche habe ich ein (java-)script geschrieben, dass, sofern im rechten der beiden Frames die Seite geladen ist, wo die Gebäude aufgelistet werden, die Seite ausliest, und eben die gewünschten Informationen herausfiltert.
[Das Script lädt sich übrigens in den linken Frame]
Nun soll das Script aber auf die Bereiche "Forschung" und "Flotte" azsgeweitet werden. Dazu muss die neue Verion meines Scriptes eben die jeweiligen Bereiche in den rechten Frame laden, auslesen und die Informationen wie gehabt filtern. Das Script ist soweit auch fertig, funktioniert aber nicht. Nachdem ich ein Testscript geschrieben hatte, bestätigte sich meine Vermutung: Das Auslesen der Seite darf eben erst dann erfolgen, wenn diese fertig geladen ist. Dazu müsste ich nun in Pseudo-Code folgendes hinkriegen:
WarteBisFrameGeladen();
LiesAus();
Ich bin allerdings auch nach längerer selfhtml-suche nicht auf eine Möglichkeit gestoßen, das zu realisieren. Ich hoffe, ich habe mich verständlich ausgedrückt und jemand von euch kann mir da helfen.
Danke im Voraus,
Raban W.
hi,
Da ich mich des öfteren mit anderen Leuten übers Internet über meinen Stand bei ogame(ein Online-Browser-Spiel: http://www.o2game.de) austausche habe ich ein (java-)script geschrieben, dass, sofern im rechten der beiden Frames die Seite geladen ist, wo die Gebäude aufgelistet werden, die Seite ausliest, und eben die gewünschten Informationen herausfiltert.
und das funktioniert? dann muss das javascript ja wohl auch unterhalb der domain o2game.de liegen, andernfalls würde dir ja die same origin policy einen strich durch die rechnung machen (müssen!).
Das Auslesen der Seite darf eben erst dann erfolgen, wenn diese fertig geladen ist. Dazu müsste ich nun in Pseudo-Code folgendes hinkriegen:
WarteBisFrameGeladen();
LiesAus();
die nachricht, dass der frame "fertig geladen" ist, kann nur aus dem frame selber kommen.
wenn du an den code von dessen dokument nicht rankommst, bleibt dir nur eine "ausreichen lange" wartezeit zu definieren - z.b. über window.setTimeout().
gruß,
wahsaga
und das funktioniert? dann muss das javascript ja wohl auch unterhalb der domain o2game.de liegen, andernfalls würde dir ja die same origin policy einen strich durch die rechnung machen (müssen!).
Nein tut sie nicht. Das script wird ja durch einen Trick geladen:
Man muss dazu javascript:self.frames[0].document.scripts[0].src="http://www.derschwarzerabe.de/ogame/script.js";void(null);
in den Browser ein(funzt warscheinlich nur beim IE)
wenn du an den code von dessen dokument nicht rankommst, bleibt dir nur eine "ausreichen lange" wartezeit zu definieren - z.b. über window.setTimeout().
Das habe ich in meiner Verzweiflung versucht.
Seltsamerweise dachte das Script gar nicht daran, auch nur eine Sekunde zu warten und ignorierte die aufzurufende Funktion einfach.
Ich nehme an, das liegt daran, dass das Script ja in den linken Frame geladen wird. Da setTimeout ja eine Funktion ist, die window zugrhörig ist, funktioniert sie vielleicht nur in einer Seite ohne Frames, oder in der Seite, wo das Frameset definiert wird.
mfg,
Raban W.
Hi,
Das script wird ja durch einen Trick geladen:
Man muss dazu javascript:self.frames[0].document.scripts[0].src="http://www.derschwarzerabe.de/ogame/script.js";void(null);
in den Browser ein(funzt warscheinlich nur beim IE)
ja, document.scripts ist IE-Syntax.
Sollen auch andere das Script benutzen? Sonst wäre es doch viel einfacher, die Datei von der eigenen Platte zu laden.
wenn du an den code von dessen dokument nicht rankommst, bleibt dir nur eine "ausreichen lange" wartezeit zu definieren - z.b. über window.setTimeout().
Das habe ich in meiner Verzweiflung versucht.
Seltsamerweise dachte das Script gar nicht daran, auch nur eine Sekunde zu warten und ignorierte die aufzurufende Funktion einfach.
Dann hast du einen Fehler im Aufruf oder in deiner Funktion.
Um nicht länger als nötig warten zu müssen, könntest du mit try..catch http://de.selfhtml.org/javascript/beispiele/fehlerbehandlung_try_catch.htm versuchen, auf dein Objekt zuzugreifen - das kann viel eher möglich sein als der Frame geladen ist. Wenn es noch nicht klappt, versuchst du es nach einem Timeout nochmal.
Ich nehme an, das liegt daran, dass das Script ja in den linken Frame geladen wird. Da setTimeout ja eine Funktion ist, die window zugrhörig ist, funktioniert sie vielleicht nur in einer Seite ohne Frames, oder in der Seite, wo das Frameset definiert wird.
Nö, jeder Frame und jedes Frameset hat sein eigenes window-Objekt mit allem, was dazugehört.
Grüße, Stefan
Okay, ich weiß jetzt, wo genau mein Problem lag.
setTimeout führt zwar die jeweilige Answeisung nach der entrpechenden Wartezeit aus. Der Ablauf des Restscriptes wird aber nicht unterbrochen.
Und genau da lag mein Fehler. Ich werde wohl eine Art Funktions-Schleife konstruieren müssen. So dass der Code-Ablauf tatsächlich unterbrochen wird.
mfg,
Raban W.