Script bleibt nur im IE hängen
Peter P.
- javascript
Hallo,
ich habe für meine Seite http://kemmer.priv.at/ ein Script
http://home.arcor.de/kemmer/galerie.js
für die Galerie geschrieben, das mit dem Firefox und Opera perfekt funktioniert.
Auch mit dem MS IE gehts offline bei mir wunderbar, nur beim online-Zugriff bleibt das Script irgendwie stecken, der IE hängt und die Systemauslastung ist 100%.
Habe nun herausgefunden, das ein Unterbrechung vor der letzen Zeile des Scripts (document.close) etwa durch ein alert das Problem behebt. Offenbar stört IE, dass das Bild noch nicht komplett geladen wurde bevor sich das zum Popup gehörige Dokument wieder schließt.
eine while Warteschleife bringt nichts, da auch diese den IE schießt und zu 100% Auslastung führt.
Wer hätte einen Tipp für mich?
Hi there.
Da ich viel (fast hauptsächlich) mit IE und JS arbeite, versuch ich mal, zu erklären, was passiert.
var Bild = [[,,],
[640,480,"Reiki Behandlung"],
[360,480,"Reiki Behandlung"],
[640,480,"Reiki Behandlung"],
[640,480,"Klangschalen Behandlung"],
[640,480,"Klangschalen Behandlung"],
[640,480,"Klangschalen Behandlung"],
[640,480,"Körperkerzen Behandlung"],
[640,480,"Körperkerzen Behandlung"],
[640,480,"Körperkerzen Behandlung"],
[640,480,"Brigitte mit Klangschalen"],
[640,480,"Brigitte mit Klangschalen"],
[640,480,"Behandlungszimmer"],
[640,480,"Behandlungszimmer"],
[640,480,"Behandlungszimmer"],
[640,480,"Klangschalen und IL-DO Körperkerzen"],
[360,480,"Urkunde Reiki 1"],
[360,480,"Urkunde Reiki 2"],
[360,480,"Urkunde Reiki Meister"],
[360,480,"Urkunde Klangschalen"],
[360,480,"Urkunde IL-DO Körperkerze"],
[640,480,"Urkunde Pranic Healing"]];
function VorigeNr(i) {
if (i==1) {
i=Bild.length
}
return i-1;
}
function NaechsteNr(i) {
if (i==Bild.length-1) {
i=0
}
return i+1;
}
function Popup(Nr) {
var Speicherort = "bilder/bild" + Nr + ".jpg";
var Text = Bild[Nr][2];
BildBreite = Bild[Nr][0];
BildHoehe = Bild[Nr][1];
xsize = BildBreite+6;
ysize = BildHoehe+128;
var Anzahl = Bild.length-1
var VNr = VorigeNr(Nr);
var NNr = NaechsteNr(Nr);
var PopupWindow=window.open("","Fenster","width="+xsize+",height="+ysize+",top=10,left=10,status=no");
PopupWindow.focus();
PopupWindow.resizeTo(xsize,ysize);
PopupWindow.document.writeln ("<script src='galerie.js' type='text/javascript'>");
PopupWindow.document.writeln ("<\/script>");
PopupWindow.document.writeln ("<body bgcolor='#E1FFE1' style='margin:0px; font-family: Garamond; font-size: 12pt; color: #0066FF;'>");
PopupWindow.document.writeln ("<img src=" + Speicherort + ">");
PopupWindow.document.writeln ("<table width='100%'><tr><td align='left' style='padding-left:20px;'>" + Text + "</td><td align='right' style='padding-right:20px;'>" + Nr + "/"+ Anzahl + "</td></tr></table>");
PopupWindow.document.writeln ("<center><input type='button' value='voriges' onClick='Popup(" + VNr + ")'> ");
PopupWindow.document.writeln ("<input type='button' value='schließen' onClick='self.close()'> ");
PopupWindow.document.writeln ("<input type='button' value='nächstes' onClick='Popup(" + NNr + ")'>");
// Hier bleibts stehen ... Das ist, weil IE diese Funktion auf ein
// Dokument leider nicht ganz so unterstützt, wie du es hier
// möchtest. Der IE baut die Seite direkt nach dem Schließen wieder
// auf. Mach mal ne Abfrage, welche diese Funktion blockiert, wen
//der IE genutzt wird. Vielleicht gehts dann.
PopupWindow.document.close();
}
// Hier bleibts stehen ... Das ist, weil IE diese Funktion auf ein
// Dokument leider nicht ganz so unterstützt, wie du es hier
// möchtest. Der IE baut die Seite direkt nach dem Schließen wieder
// auf. Mach mal ne Abfrage, welche diese Funktion blockiert, wen
//der IE genutzt wird. Vielleicht gehts dann.
PopupWindow.document.close();
...komisch, warum wird diese Methode aber OFFline bei mir mit IE6,IE7 problemlos unterstützt?
Hallo Peter P.,
Ich wusste gar nicht, das man so ein Array anlegen kann. Kann man das (irgendwo) nachlesen?
Auch mit dem MS IE gehts offline bei mir wunderbar, nur beim online-Zugriff bleibt das Script irgendwie stecken, der IE hängt und die Systemauslastung ist 100%.
Ich habe keine Probleme mit Deinem Script im IE.
Mit freundlichem Gruß
Micha
Hi there.
Ich habe keine Probleme mit Deinem Script im IE.
Welche IE-Version hast du? Bei mir ist es 6.0.2800
Also bei mir ist es so dass das Script stehen bleibt und sogar noch den Taskmanager blockiert (konnte ihn nicht schließen, wie ich es wollte. Kann aber auch ein Bug von Win sein ...)
MFG
Griever
Hallo Griever,
Welche IE-Version hast du? Bei mir ist es 6.0.2800
Ich denke eine (die?) aktuelle Version 6.0.2900.
Mit freundlichem Gruß
Micha
Hi there.
Hallo Griever,
Welche IE-Version hast du? Bei mir ist es 6.0.2800
Ich denke eine (die?) aktuelle Version 6.0.2900.
6.0.2800 und 6.0.2900?
Hm. Haben die bei deiner etwa schon ein neues Workaround gegen selbstschließung und Overflow gemacht?
Hab außerdem schon rausgefunden, woran es direkt liegt.
Nachdem im Dokument was geschrieben wurde, verweigert der IE das direkte Schließen des Dokuments (window.document.close()), nicht aber des Fensters (window.close() ...)
Anscheinend wurde das bei der 2900er-Version überarbeitet.
MFG
Griever
Welche IE-Version hast du? Bei mir ist es 6.0.2800
Ich denke eine (die?) aktuelle Version 6.0.2900.
Hi, hat nix mit einer IE-Version zu tun, denn:
offline: funktionierts sowohl mit IE6 und IE7
online: mit beiden funktioniert nicht (IE bleibt hängen, bzw. es scheint als wolle sich noch ein 2.Popup aufmachen).
Hallo Peter P.,
Welche IE-Version hast du? Bei mir ist es 6.0.2800
Ich denke eine (die?) aktuelle Version 6.0.2900.Hi, hat nix mit einer IE-Version zu tun, denn:
ich habe es nur online getestet!
Mit freundlichem Gruß
Micha
Ich habe keine Probleme mit Deinem Script im IE.
Dann hast du Glück bzw. wahrscheinlich ein sehr schnelles Internet. Bei mir funktionierts online sowohl mit IE6 und IE7 nicht.
Ich wusste gar nicht, das man so ein Array anlegen kann. Kann man das (irgendwo) nachlesen?
;-) hab ich hier im tollen Forum gefunden (mehrdimensionale Arrays). Für längere Arrays echt hilfreich!
Hallo Peter P.,
Ich wusste gar nicht, das man so ein Array anlegen kann. Kann man das (irgendwo) nachlesen?
;-) hab ich hier im tollen Forum gefunden (mehrdimensionale Arrays). Für längere Arrays echt hilfreich!
Aha, ich habe es immer nach diesem Schema gemacht:
var A = new Array(4);
A[0] = new Array(1, 3);
A[1] = new Array(5, 2);
A[2] = new Array(1, 9);
A[3] = new Array(5, 6);
Naja, muss ich mir mal merken.
Mit freundlichem Gruß
Micha
Hell-O!
Auch mit dem MS IE gehts offline bei mir wunderbar, nur beim online-Zugriff bleibt das Script irgendwie stecken, der IE hängt und die Systemauslastung ist 100%.
Hm, seltsam. Du könntest die Bilder mit Hilfe des Image-Objektes definieren. Ansonsten versuche mal, das Popup mit PopupWindow.document.open();
zum Schreiben zu öffnen.
Siechfred
Ansonsten versuche mal, das Popup mit [code >>lang=Javascript]PopupWindow.document.open();[/code] zum Schreiben zu >>öffnen.
gute Idee, hatte damit aber leider auch keinen Erfolg.
Ich habe jetzt jene JS-Zeile herausgefunden, die dem IE in Zusammenhang mit der Bildladegeschwindigkeit zum Aufhängen bringt (nach dem Löschen funktioniert Laden&Anzeige eines Bildes):
PopupWindow.document.writeln ("<script src='galerie.js' type='text/javascript'></script></head>");
Diese Zeile wird aber benötigt, da die Funktion "Popup" ja im Dokument für die voriges/nächstes Buttons bekannt sein muss.
Hell-O!
Ich habe jetzt jene JS-Zeile herausgefunden, die dem IE in Zusammenhang mit der Bildladegeschwindigkeit zum Aufhängen bringt [...]
Versuche mal, deinen HTML-Code für das Popup in eine eigene Seite ("popup.html" o.ä.) auszulagern, die du window.open als 1. Parameter übergibst.
Siechfred
Versuche mal, deinen HTML-Code für das Popup in eine eigene Seite ("popup.html" o.ä.) auszulagern, die du window.open als 1. Parameter übergibst.
Geht leider nicht, da im HTML-Code ja von JS dynamisch erzeugte Werte vorkommen. Und wenn ich nur den 1. (statischen) Teil in eine HTML-Datei auslagere und übergebe, und den folgenden dynamischen Code per JS ins Dokument schreibe: Dann wird der 2.Teil nicht an den 1. angehängt, sondern er überschreibt den 1.TEil
Hell-O!
Geht leider nicht, da im HTML-Code ja von JS dynamisch erzeugte Werte vorkommen.
... die dem öffnenden Dokument bekannt sind und auf die du aus dem Popup heraus via window.opener zugreifen kannst.
Und wenn ich nur den 1. (statischen) Teil in eine HTML-Datei auslagere und übergebe, und den folgenden dynamischen Code per JS ins Dokument schreibe: Dann wird der 2.Teil nicht an den 1. angehängt, sondern er überschreibt den 1.TEil
Dann platziere die document.write-Anweisungen innerhalb des Body oder bediene dich der gängigen DOM-Methoden.
Siechfred
Nach langem Herumtifftlen und Einlesens in Javascript habe ich das Problem mit dem IE gelöst.
Er konnte in das neue Popupfenster nicht die galerie.js per PopupFenster.document.write ("<script src=galerie.js... hineinschreiben-da blieb er hängen.
Nun habe ichs ganz einfach dadurch gelöst, das ich vom Popupfenster aus per opener.popup auf diese Funktion des Mutterfensters zugreife, also nicht mehr auf das Einbinden der galerie.js angewiesen bin.