JScript: Pause, bis fertig geladen?

Hallo!

nach zwei Wochen Googeln und ausprobieren bin ich mit meinem Latein am Ende - un dhab nur noch euch als letzte Hoffnung.

Aufgabe: Mit Javascript mehrere HTML-Seiten öffnen und den Inhalt in eine anderen Seite als fortlaufendes Dokument hineinschreiben.

Eigentlich gar kein Problem:

for (var i = 0; i 

Im Prinzip tut's das auch - wenn die Daten lokal vorliegen und der Rechner die Leistungsfähigkeit einer Antiquität hat. Aber je schneller der Rechner ist und/oder je langsamer die Datenanlieferung, desto weniger wird umkopiert - weil JavaScript nicht wartet, bis die Datei komplett geladen wurde, sondern sofort umkopiert, was halt schon da ist und dann weitermacht.

Und da häng ich. Ich brauch im Prinzip eine Funktion, die den Ladezustand überprüft sowie eine Pausenschleife, die darauf wartet, das alles geladen wurde (wobei alles bevorzugt nur den body-Anteil ausmacht - referenzierte Graphiken, Scripte und StyleSheets brauch ich ja erst mal nicht. Aber mittlerweile würd ich mich auch mit wirklich allem abfinden, wenn's nur überhaupt gehen würde . . .)

window.onload tut's nicht. Damit kann man offensichtlich nur das eigene Fenster abfragen, nicht jedoch ein frisch geöffnetes. Egal, was und wie ich damit herumprobiert habe, die Funktion dahinter wurde nie aufgerufen.

c.document.getElementsByTagName('body')[0]. **innerHTML**
liefert wie es sein sollte den Inhalt,
c.document.getElementsByTagName('body')[0]. **complete**
ist jedoch für alle Ewigkeiten "undefined". Opera macht dann weiter wie gehabt, Firefox bricht das Script einfach ab.

Gleiches Ergebnis hab ich beim Versuch, mittels Id auf den letzten Absatz oder Div-Bereich im Text zuzugreifen.

Der Versuch über document.images[i].complete zu gehen war auch eine Bruchlandung. Die Browser melden sogar complete, wenn's das Bild gar nicht gibt (_Anzeigebeispiel: So sieht's aus_ bei http://de.selfhtml.org/javascript/objekte/images.htm#complete)!

Das einzige, was so halbwegs funktioniert hat, war ein wüster Hack, bei dem jede einzelne Seite ein kleines Script { fertig =1 } mittels body onload aufgerufen hat, in dem Zusammen-Setz-Script gabs dann eine Endlos-Schleife 
while ( c.fertig != 1 ) { }
Das hat wenigstens bei Opera funktioniert (Firefox hat auch hier wieder nur "undefined" gemeldet und die Script-Verarbeitung abgebrochen), aber auch hier mit Abzügen in der B-Note für den stylistischen Eindruck und darüber hinaus mit 100% CPU-Last.
Das kann's doch irgendwie nicht sein . . .

Ihr seht: Ich bin schwer Hilfsbedürftig :smiley:

Hat irgendeine 'ne Idee, wie ich den Ladestatus meiner frisch geöffneten Seiten überwachen kann?

Heissen Dank für jeden Tipp!
mabuse

Nächster Versuch . . .
Ich nochmal . . .

Hab heute wieder den ganzen Tag herumprobiert:
Am Ende jeder HTML-datei steht jetzt fertig = 1;, im eigentlichen Script dann:

c = window.open(file);
loaded = 0;
while (loaded != 1) { loaded = loadcomplete() }
. . .

function loadcomplete()
{ if (typeof c.fertig == „undefined“) { return 0; }
else { return c.fertig; }
}

Das sollte doch eigentlich eindeutig sein, oder?
Opera macht genau das, was es soll, nur der Firefox kackt dabei völlig ab. Nach 20 Sekunden überlegen (in denen weder der FF noch seine Fehlerkonsole auf irgendetwas reagiert) kommt eine Meldung [„Ein Skript auf dieser Seite ist eventuell beschäftigt oder es antwortet nicht mehr. Sie können das Skript jetzt stoppen oder fortsetzen, um zu sehen, ob das Skript fertig wird.“]

Dannach arbeitet er die Seite tatsächlich wie gewünscht ab, um dann bei der nächsten Seite das ganze wieder zu machen. Als Stelle, wo das Script hängt, gibt er immer abwechselnd die beiden Zeilen in der Loadcomplete()-Funktion an.

Sieht da irgendjemand einen Fehler?

Der Witz ist, sobald ich irgendeine Alertbox vor das „return 0;“ setze, rennt das Script durch - ich muss halt nur 20 Alertboxen wegklicken . . .

Langsam weiss ich echt nicht mehr weiter . . .
lg, mabuse

Hallo mabuse,

schau dir dazu mal onload an:
http://de.selfhtml.org/javascript/sprache/eventhandl…
http://www.webreference.com/programming/javascript/o…

Dieser Event-Handler wird ausgefuehrt, wenn ein Element (in deinem Fall document oder window) fertig geladen worden ist.
Die meisten Javascript-Frameworks bieten Hilfsfunktionen dafuer schon von Haus aus an.

Gruss
Stefan

Btw.: JScript ist was anderes als JavaScript

Hallo mabuse,

ich hätte auch an „onload“ gedacht, also in Deinem Falle „neuesFenster.onload = function(){ … }“.

Wenn alle Stricke reißen, schau Dir „window.setInterval()“ oder „window.setTimeout()“ an.

Schöne Grüße,

Mohamed.

Hallo!

schau dir dazu mal onload an:
http://de.selfhtml.org/javascript/sprache/eventhandl…
http://www.webreference.com/programming/javascript/o…
Dieser Event-Handler wird ausgefuehrt, wenn ein Element (in deinem Fall document oder window) fertig geladen worden ist. Die meisten Javascript-Frameworks bieten Hilfsfunktionen dafuer schon von Haus aus an.

Da hab ich intensiv mit herumgespielt - funktioniert nicht.

window.onload scheint nur im eigenen Fenster zu gehen,

neuesfenster.window.onload schlägt nie an . . .
neuesfenster.window.onload () schlägt sofort an, egal, ob und wieviel geladen ist

Unabhängig davon würde mir das auch nur eingeschränkt weiterhelfen, weil diese Funktion in einem neuen Thread läuft, das eigentliche Script rennt weiter - ich müsste also eine Warteschleife mit regelmäßiger Abfrage einer Variablen zusammenhacken - was wieder in 100% CPU-Last ausartet.

Btw.: JScript ist was anderes als JavaScript

Ups. Recht hast du.

lg, mabuse

Hallo Mohamed,

ich hätte auch an „onload“ gedacht, also in Deinem Falle „neuesFenster.onload = function(){ … }“.

Wie gesagt, das scheint nur im eigenen Fenster zu gehen.

neuesFenster.onload = function() schlägt immer und sofort an, egal, wieviel geladen ist.
neuesFenster.onload = function - also ohne die Klammern - schlägt niemals an, selbst wenn mich die Seite schon seit einer Viertelstunde vollständig anstarrt . . .

Wenn alle Stricke reißen, schau Dir „window.setInterval()“ oder „window.setTimeout()“ an.

Die beiden Funktionen kann man komplett vergessen. Da wird nämlich nicht gewarted, sondern nur ein neuer Thread gestartet - das eigentliche Script rennt weiter.
Und da es auch keine CPU-Last-freie Pausenfunktion gibt, kann ich eine Abfrage auf irgendwas (das wäre nämlich auch bei setTimout noch die Frage: was soll dann geprüft werden?) auch direkt in eine normale Schleife setzen.

Habbich ja auch - aber der Firefox versteht es einfach nicht (im Unterschied zu IE und Opera - aber die weigern sich dafür, die zusammengesetzte Seite abzuspeichern . . . es muss wirklich schwer sein . . .)

Dennoch meinen Dank!
lg, mabuse

Javascript: Ajax/Get
Hallo mabuse,

ein anderer Ansatz: Ajax benutzen um an die Daten zu kommen.

Beispiel anhand von jQuery:

for (var i = 0; i 
(ungetestet)

Siehe auch http://api.jquery.com/jQuery.get/

Gruss
Stefan

Hallo Stefan,

ein anderer Ansatz: Ajax benutzen um an die Daten zu kommen.

Danke, aber das scheitert an der simplen Tatsache, das es keinen Server gibt. Mein Ansatz ist, das es komplett von Platte bzw. USB-Stick laufen sollte.

lg, mabuse

ein anderer Ansatz: Ajax benutzen um an die Daten zu kommen.

Danke, aber das scheitert an der simplen Tatsache, das es
keinen Server gibt. Mein Ansatz ist, das es komplett von
Platte bzw. USB-Stick laufen sollte.

Da Ajax komplett auf Javascript basiert und keine serverseitige Programmierung zwingend voraussetzt sollte das keine Huerde sein.

Gruss
Stefan

Hallo Stefan!

Da Ajax komplett auf Javascript basiert und keine serverseitige Programmierung zwingend voraussetzt sollte das keine Huerde sein.

erm . . . das leuchtet mir jetzt nicht wirklich ein - wenn Ajax rein auf Javascript läuft und ein Serverdienst nicht unbedingt nötig ist - wofür braucht man dann Ajax? Dann könnte man es doch auch gleich in JavaScript machen.

Wie auch immer - hast du vieleicht einen Link für Ajax-Anfänger? Dann geh ich mal stöbern, ob da vieleicht was machbar ist.

Ich Danke dir!