Fehler in Script - und ich find ihn nicht! :-/
Sven
- javascript
0 Sönke Tesch0 Ronny0 Uwe0 Jürgen Berkemeier0 Sven
0 Sven0 Sven Rautenberg0 Sven
Hallo allerseits!
Könntet Ihr mal über das folgende Script drüberschauen und mir sagen, wo da Fehler drin sind?
function PopUp(Breit,Hoch,ArrayNr) {
var Picture = "/galerie/" + EventKategorie + "/img/" + EventName + "_bild" + (ArrayNr+1) + ".jpg";
if (ArrayNr == "0") var ArrayNrB = Bild.length-1;
else var ArrayNrB = ArrayNr-1;
if (ArrayNr == Bild.length-1) var ArrayNrF = "0";
else var ArrayNrF = ArrayNr+1;
//xsize = Breit+35; // Zusatz für Rand rechts und links
//ysize = Hoch+75; // Zusatz für Rand oben und unten - damit Button angezeit werden kann
ScreenWidth = screen.width;
ScreenHeight = screen.height;
xpos = (ScreenWidth/2)-(Breit/2);
ypos = (ScreenHeight/2)-(Hoch/2);
if (NewWindow != null)
if (!NewWindow.closed)
NewWindow.close();
NewWindow=window.open("","Picture","height="+Hoch+",width="+Breit+",scrollbars=no,resizable=no,top="+ypos+",left="+xpos+"");
NewWindow.document.write ("<html><head><title>hr3 - voll im leben: galerie");
NewWindow.document.write ("</title><LINK REL=STYLESHEET TYPE='text/css' HREF='/format.css'>");
NewWindow.document.write ("<script src='/galerie/" + EventKategorie + "/" + EventName + ".js' type='text/javascript'>");
NewWindow.document.write ("</script>");
NewWindow.document.write ("<script src='/galerie/hr3galerie_temp.js' type='text/javascript'>");
NewWindow.document.write ("</script>");
NewWindow.document.write ("<script type='text/javascript'>");
NewWindow.document.write ("var ArrayNr = '" + ArrayNr + "';");
NewWindow.document.write ("</script>");
NewWindow.document.write ("</head>");
NewWindow.document.write ("<body bgcolor='#f21e0e' onLoad='window.resizeTo(" + Bild[ArrayNr][1] + ")'>");
NewWindow.document.write ("<table align='center'><tr>");
NewWindow.document.write ("<td align='center' valign='top'>");
NewWindow.document.write ("<table border='0' cellpadding='0' cellspacing='1'><tr><td align='center' class='standard'>");
NewWindow.document.write ("<img src='");
NewWindow.document.write (Picture);
NewWindow.document.write ("'>");
NewWindow.document.write ("<script type='text/javascript'>");
NewWindow.document.write ("var ImgHoch = NewWindow.document.images[0].height;");
NewWindow.document.write ("var ImgBreit = NewWindow.document.images[0].width;");
NewWindow.document.write ("window.resizeTo(ImgHoch,ImgBreit);");
NewWindow.document.write ("</script>");
if (Text == 0 || Text == 2) {
if(typeof Bild[ArrayNr][2] != "undefined")
{
NewWindow.document.write ("<br>");
NewWindow.document.write (Bild[ArrayNr][2]);
}
else
{
NewWindow.document.write ("<br>");
NewWindow.document.write (EventTitel);
}
}
NewWindow.document.write ("</tr></table>");
NewWindow.document.write ("</td></tr><tr>");
NewWindow.document.write ("<td align='center' valign='bottom'>");
NewWindow.document.write ("<br><div align='center'><a href='javascript:PopUp(" + Bild[ArrayNrB][1] + "," + ArrayNrB + ")'><img src='/img/galerie_back.gif' width=20 height=30 border=0 alt='Zurück'></a><a href='javascript:self.close()'><img src='/img/galerie_close.gif' width=200 height=30 border=0></a><a href='javascript:PopUp(" + Bild[ArrayNrF][1] + "," + ArrayNrF + ")'><img src='/img/galerie_fw.gif' width=20 height=30 border=0 alt='Vorwärts'></a></div>");
NewWindow.document.write ("</td></tr></table>");
NewWindow.document.write ("</body></html>");
NewWindow.document.close();
NewWindow.focus();
}
Den Bereich mit "var ImgHoch=" und "var ImgBreit=" scheint er aus irgendeinem Grund völlig zu ignorieren (füge ich in den Bereich eine Alert-Funktion ein, wird die gar nicht ausgeführt) und was am schlimmsten ist: Das Script läuft nur mit dem IE5.5, nicht aber mit IE6 (Browser hängt sich auf), Netscape 4.6 (Bilder werden nicht richtig angezeigt und Browser stürzt dann irgendwann ab) oder Mozilla 1.0 (leeres PopUp beim Aufruf).
Das Script wird wie folgt aufgerufen: Es gibt eine .js-Datei, in der neben der hier noch zwei Funktionen drinstehen. Diese Datei wird zusammen mit einer Datei, in der alle wichtigen Variablen und die Arrays für die Bilder und Bildbeschreibungen definiert werden, von einer HTML-Seite aus aufgerufen. Das funktioniert auch alles wunderbar, bis auf diese Funktion hier, die das PopUp aufruft und die Blättern-Funktion zur Verfügung stellen soll. :-/
Wäre Euch sehr dankbar, wenn Ihr mal drüberschauen könntet und vielleicht sogar den / die Fehler finden würdet! :-)
Viele Grüße,
der Sven
Könntet Ihr mal über das folgende Script drüberschauen und mir sagen, wo da Fehler drin sind?
NewWindow=window.open("","Picture","height="+Hoch+",width="+Breit+",scrollbars=no,resizable=no,top="+ypos+",left="+xpos+"");
[..]
NewWindow.document.write ("</script>");
Ohne Anspruch, den eigentlichen Fehler zu beschreiben: [http://www.htmlhelp.com/tools/validator/problems.html#script].
Gruß,
soenk.e
NewWindow.document.write ("</script>");
Danke schonmal! :-) Eine Frage dazu (es geht nämlich noch immer nicht): Bezieht sich diese Backslash-Geschichte nur auf Tags, oder auch bei Pfadangaben? Müßte ich Pfade wie "/galerie/img/sof/" in einem document.write also "/galerie/img/sof/" schreiben??
Sven
Tach,
NewWindow.document.write ("</script>");
Danke schonmal! :-) Eine Frage dazu (es geht nämlich noch immer nicht): Bezieht sich diese Backslash-Geschichte nur auf Tags, oder auch bei Pfadangaben? Müßte ich Pfade wie "/galerie/img/sof/" in einem document.write also "/galerie/img/sof/" schreiben??
</ ist die entscheidende Zeichenfolge, die "unterbrochen" werden muß.
Andreas
Hi Andreas,
ich seh schon, Du bist hier der MaskierExperte.
Ich denke, es wäre einfacher für Dich, mal einen kleinen Artikel zu schreiben und dann immer drauf zu linken.
Grüße,
Ronny
Hi,
maskiere mal ein bißchen. Z.B.:
NewWindow.document.write ("</script>");
solltest Du besser so schreiben:
NewWindow.document.write ("</script>");
geschrieben werden, sonst interpretiert der Browser die Zeile als Ende des Script-Bereiches, was erklären würde, warum nicht mal der alert() ausgeführt wird.
Grüße,
Ronny
Hallo,
probier das Script doch mal im Netscape oder Mozilla mit der Javascript-Konsole aus. Dort gibt es vernünftigen Fehlermeldungen. Vielleicht kommst Du damit weiter.
Ich würde auch vor document.write immer ein document.open und danach document.close setzen. Ohne gibt es häufig Probleme.
Hallo Sven,
NewWindow.document.write ("<body bgcolor='#f21e0e' onLoad='window.resizeTo(" + Bild[ArrayNr][1] + ")'>");
braucht resizeTo nicht zwei Parameter (s.u.)
NewWindow.document.write ("window.resizeTo(ImgHoch,ImgBreit);");
warum hier noch ein resizeTo ? "onLoad" wird ganz zum Schluss aufgerufen und macht dann ein "resizeTo".
Gruß, Jürgen
NewWindow.document.write ("<body bgcolor='#f21e0e' onLoad='window.resizeTo(" + Bild[ArrayNr][1] + ")'>");
braucht resizeTo nicht zwei Parameter (s.u.)
Braucht es, aber in dem Array liegen zwei durch Komma getrennte Werte, die da einfach eingefügt werden. Das geht! :-)
NewWindow.document.write ("window.resizeTo(ImgHoch,ImgBreit);");
warum hier noch ein resizeTo ? "onLoad" wird ganz zum Schluss aufgerufen und macht dann ein "resizeTo".
Dieser Teil soll den obigen mal ersetzen.
Gruß,
Sven
NewWindow.document.write ("<script type='text/javascript'>");
NewWindow.document.write ("var ImgHoch = NewWindow.document.images[0].height;");
NewWindow.document.write ("var ImgBreit = NewWindow.document.images[0].width;");
NewWindow.document.write ("window.resizeTo(ImgHoch,ImgBreit);");
NewWindow.document.write ("</script>");
Der Fehler scheint übrigens bei der Größenermittlung zu liegen. Setze ich einen Alert hinter die Zeilen mit "var", dann wird dieser Alert nie ausgeführt. Setze ich ihn davor, wird er angezeigt. Irgendwie scheint das Script da einfach abzubrechen.
Außerdem: Ändere ich "NewWindows.document.images[0]" in "document.images[0]" um, wird immerhin eine "0" zurückgegeben, mehr aber nicht. Wenn ich dem Bild mit "name" einen Namen verpasse, kommt ebenfalls nur eine "0" zurück, aber keine Größenangabe.
Das bringt mich der Lösung des Problems allerdings auch nicht wirklich näher...
Könnt Ihr was damit anfangen?
Gruß,
Sven
Aloha!
Außerdem: Ändere ich "NewWindows.document.images[0]" in "document.images[0]" um, wird immerhin eine "0" zurückgegeben, mehr aber nicht. Wenn ich dem Bild mit "name" einen Namen verpasse, kommt ebenfalls nur eine "0" zurück, aber keine Größenangabe.
Logisch!
Dein Skript selbst öffnet ein Fenster namens NewWindows (so heißt die Fenstervariable), um in dieses Fenster etwas Code hineinzuschreiben.
Das Fenster selbst kennt aber keine Variable NewWindows, sondern kennt nur sich selbst (self oder window) und seine Mama (opener).
Wenn du also im selben Fenster auf dort enthaltene Bilder zugreifen willst, ist self.document.images... oder window.document.images... oder (window darf weggelassen werden) document.images... korrekt.
Warum das Skript allerdings keine Alerts bringt, kann man nur dadurch herausfinden, dass hinter jeden Programmschritt alert() gesetzt werden - so sieht man, was falsch läuft, bzw. wann abgebrochen wird.
Außerdem (wurde schon erwähnt, ist aber wirklich wichtig: Netscape oder Mozilla anwerfen und die Javascript-Konsole benutzen (Aufruf: In der URL-Zeile "javascript:" eingeben und Return drücken) - dort stehen ausführlichere Fehlermeldungen drin.
Das bringt mich der Lösung des Problems allerdings auch nicht wirklich näher...
Ich hab den Überblick verloren, was du schon alles geändert hast. Kannst du das derzeit aktuelle Skript online stellen?
- Sven Rautenberg
Warum das Skript allerdings keine Alerts bringt, kann man nur dadurch herausfinden, dass hinter jeden Programmschritt alert() gesetzt werden - so sieht man, was falsch läuft, bzw. wann abgebrochen wird.
Ja, und irgendwie hab ich den Fehler nicht gefunden. Nachdem ich dann in SelfHTML gelesen habe, daß das mit dem Navi6.1 eh nicht funktionieren würde, da es im IMG-Tag keine Höhen- oder Breitenangabe gibt und es schade wäre, diese User auszuschließen, hab ich von der automatischen Größenanpassung schweren Herzens Abschied genommen. :-/
Außerdem (wurde schon erwähnt, ist aber wirklich wichtig: Netscape oder Mozilla anwerfen und die Javascript-Konsole benutzen (Aufruf: In der URL-Zeile "javascript:" eingeben und Return drücken) - dort stehen ausführlichere Fehlermeldungen drin.
Hab hier im Büro leider keinen Navi oder Mozilla. Werde ich zuhause nochmal drangehen müssen.
Ich hab den Überblick verloren, was du schon alles geändert hast. Kannst du das derzeit aktuelle Skript online stellen?
Gerne! :-) Aber: Trotz der Änderungen läuft es auf dem Navi4.6 nicht, bzw. bringt ihn zum abstürzen (hab ich mir mailen lassen). Hat jemand eine Ahnung, woran es liegen könnte?
function PopUp(Breit,Hoch,ArrayNr) {
var Picture = "/hf/hr3/galerie/" + EventKategorie + "/img/" + EventName + "_bild" + (ArrayNr+1) + ".jpg";
if (ArrayNr == "0") var ArrayNrB = Bild.length-1;
else var ArrayNrB = ArrayNr-1;
if (ArrayNr == Bild.length-1) var ArrayNrF = "0";
else var ArrayNrF = ArrayNr+1;
//xsize = Breit+35; // Zusatz für Rand rechts und links
//ysize = Hoch+75; // Zusatz für Rand oben und unten - damit Button angezeit werden kann
ScreenWidth = screen.width;
ScreenHeight = screen.height;
xpos = (ScreenWidth/2)-(Breit/2);
ypos = (ScreenHeight/2)-(Hoch/2);
if (NewWindow != null)
if (!NewWindow.closed)
NewWindow.close();
NewWindow=window.open("","Picture","height="+Hoch+",width="+Breit+",scrollbars=no,resizable=no,top="+ypos+",left="+xpos+"");
NewWindow.document.open();
NewWindow.document.write ("<html><head><title>hr3 - voll im leben: galerie");
NewWindow.document.write ("</title><LINK REL=STYLESHEET TYPE='text/css' HREF='/hf/hr3/format.css'>");
NewWindow.document.write ("<script src='/hf/hr3/galerie/" + EventKategorie + "/" + EventName + ".js' type='text/javascript'>");
NewWindow.document.write ("</script>");
NewWindow.document.write ("<script src='/hf/hr3/galerie/hr3galerie_temp.js' type='text/javascript'>");
NewWindow.document.write ("</script>");
NewWindow.document.write ("<script type='text/javascript'>");
NewWindow.document.write ("var ArrayNr = '" + ArrayNr + "';");
NewWindow.document.write ("</script>");
NewWindow.document.write ("</head>");
NewWindow.document.write ("<body bgcolor='#f21e0e' onLoad='window.resizeTo(" + Bild[ArrayNr][1] + ")'>");
NewWindow.document.write ("<table align='center'><tr>");
NewWindow.document.write ("<td align='center' valign='top'>");
NewWindow.document.write ("<table border='0' cellpadding='0' cellspacing='1'><tr><td align='center' class='standard'>");
NewWindow.document.write ("<img src='");
NewWindow.document.write (Picture);
NewWindow.document.write ("'>");
if (Text == 0 || Text == 2) {
if(typeof Bild[ArrayNr][2] != "undefined")
{
NewWindow.document.write ("<br>");
NewWindow.document.write (Bild[ArrayNr][2]);
}
else
{
NewWindow.document.write ("<br>");
NewWindow.document.write (EventTitel);
}
}
NewWindow.document.write ("</tr></table>");
NewWindow.document.write ("</td></tr><tr>");
NewWindow.document.write ("<td align='center' valign='bottom'>");
NewWindow.document.write ("<br><div align='center'><a href='javascript:PopUp(" + Bild[ArrayNrB][1] + "," + ArrayNrB + ")'><img src='/hf/hr3/img/galerie_back.gif' width=20 height=30 border=0 alt='Zurück'></a><a href='javascript:self.close()'><img src='/hf/hr3/img/galerie_close.gif' width=200 height=30 border=0></a><a href='javascript:PopUp(" + Bild[ArrayNrF][1] + "," + ArrayNrF + ")'><img src='/hf/hr3/img/galerie_fw.gif' width=20 height=30 border=0 alt='Vorwärts'></a></div>");
NewWindow.document.write ("</td></tr></table>");
NewWindow.document.write ("</body></html>");
NewWindow.document.close();
NewWindow.focus();
}
Viele Grüße,
Sven