Winnie: Title zuweisen (lokal funktioniert's, online nicht!)

Ich habe ich ein Problem mit Javascript, für das ich auch im Archiv keine Lösung gefunden habe:

Über den Aufruf

<a href="javascript:poppic('test.jpg', 'Ein Testbild');"><img src="test_small.jpg"></a>

lade ich ein Bild in einem Popup-Fenster (das bei Klick ins Hauptfenster automatisch wieder geschlossen wird).
Im 2. Argument der Funktion gebe ich dem Bild einen Namen, der dann in der Titleleiste angezeigt werden soll.
Lokal funktioniert's bestens, aber sobald ich die Dateien auf den Webserver hochgeladen habe, gibt die Scriptzeile

pic.document.title = name;

im IE6 einen Fehler. Das Ganze ist mir ein Rätsel, da ja Javascript clientseitig ausgeführt wird und es deshalb nicht auf den Webserver ankommen sollte...

Thanks for any help!
Winnie

Vollständiges Script:

var pic = null;
function poppic(picture, name)
{
pic = window.open(picture, "pic", "width=820,height=620");
pic.focus();
pic.document.title = name;
window.onfocus = function ()
{
  if(!pic) return;
  pic.close();
  pic = null;
  window.onfocus = null;
};
}

  1. Hallo,

    Wie du hier nachlesen kannst: http://selfhtml.teamone.de/javascript/objekte/window.htm#open
    Kannst du dass Fenster auch gleich benennen indem du einfach als Zweites Argument des window.open´s den Namen angibst der bei dir ja "pic" heißt!

    samy,

    1. Kannst du dass Fenster auch gleich benennen indem du einfach als Zweites Argument des window.open´s den Namen angibst der bei dir ja "pic" heißt!

      Wenn du nichts schlaues zu sagen hast, verzichten wir gerne auf deinen Beitrag!
      Sorry, ist aber so...

  2. <a href="javascript:poppic('test.jpg', 'Ein Testbild');"><img src="test_small.jpg"></a>

    Das ist schlecht, funktioniert unnötigerweise nicht mehr ohne JS

    <a href="test.jpg"
    onclick="poppic(this.href, 'Ein Testbild');returnf false;"

    <img src="test_small.jpg"></a>

    Im 2. Argument der Funktion gebe ich dem Bild einen Namen, der dann in der Titleleiste angezeigt werden soll.
    Lokal funktioniert's bestens, aber sobald ich die Dateien auf den Webserver hochgeladen habe, gibt die Scriptzeile

    pic.document.title = name;

    im IE6 einen Fehler. Das Ganze ist mir ein Rätsel, da ja Javascript clientseitig ausgeführt wird und es deshalb nicht auf den Webserver ankommen sollte...

    Wie lautet die Fehlermeldung?

    Struppi.

    1. Das ist schlecht, funktioniert unnötigerweise nicht mehr ohne JS

      <a href="test.jpg"
      onclick="poppic(this.href, 'Ein Testbild');return false;"

      <img src="test_small.jpg"></a>

      Ich weiss, dass man dies machen kann, habe aber darauf verzichtet. Bei der Slideshow unten an der Seite hab ich's hingegen so gemacht. Thanks anyway!

      Wie lautet die Fehlermeldung?

      Die Fehlermeldung, die ich beim Thumbnail-Anklicken erhalte, ist "Fehler auf der Seite" und in den Details "Unbekannter Fehler".

      Auf http://8ung.at/nz-reise/test.html kannst du's ja mal anschauen...

      1. Wie lautet die Fehlermeldung?

        Die Fehlermeldung, die ich beim Thumbnail-Anklicken erhalte, ist "Fehler auf der Seite" und in den Details "Unbekannter Fehler".

        Auf http://8ung.at/nz-reise/test.html kannst du's ja mal anschauen...

        Hmm, wenn du die slideshow meinst http://8ung.at/nz-reise/slides/dunedin&otagopeninsula.html
        da bin ich ganz schnell wieder weg. du lädst hier versteckt alle Bilder auf einmal ohne das irgendwo kundzutun. Daher dauert der Aufbau selbst mit DSL lange und ich bin mal wieder froh, das ich keinen Datenmengen-basierten Account habe. Jeder der diese Seite besucht muss die Bilder laden ob er es will oder nicht. Ich hab keine Ahnung wieviel das ist, aber es scheint viel zu sein. Das ist nicht sonderlich höflich von dir.

        Daneben finde ich die Zeile:
        <div id="SlideContainer" class="container" onclick="VBScript: SwitchSlides()">

        Mit VBScript kenne ich mich nicht aus.

        Struppi.

        1. Hmm, wenn du die slideshow meinst http://8ung.at/nz-reise/slides/dunedin&otagopeninsula.html

          Nein, die meine ich NICHT, aber thanks trotzdem fuer die kritische Analyse.
          Dass es etwas lange dauert bis alle Bilder (15) geladen sind, weiss ich. Dies liegt aber v.a. am langsamen Server. Ich habe die Seite nur da hochgeladen, weil ich meine 'richtige' URL nicht im Forum breitschlagen will, da der Inhalt fuer Freunde und Verwandte bestimmt ist. In einem Mail an dich, das aber in deinem "Spammuelleimer" gelandet ist, habe ich meine 'richtige' URL reingeschrieben.

          Zurueck zu meinem Problem, das auftritt, wenn ich eines der Thumbnails im Text anklicke:
          Im IE6 (sowohl an der Uni als auch auf meinem Laptop, habe hier leider nichts anderes zum Testen) gibt's einen "Fehler auf der Seite" und in den Details steht "Unbekannter Fehler". Im Title wird der Pfad des Bildes nicht durch den in der Variable 'name' gespeicherten String ersetzt und das Popup-Fenster schliesst sich nicht automatisch, wenn ich ins Hauptfenster klicke.
          Wie gesagt funktioniert dies beides, wenn ich die Seite lokal teste...

          Winnie

          1. Zurueck zu meinem Problem, das auftritt, wenn ich eines der Thumbnails im Text anklicke:
            Im IE6 (sowohl an der Uni als auch auf meinem Laptop, habe hier leider nichts anderes zum Testen) gibt's einen "Fehler auf der Seite" und in den Details steht "Unbekannter Fehler". Im Title wird der Pfad des Bildes nicht durch den in der Variable 'name' gespeicherten String ersetzt und das Popup-Fenster schliesst sich nicht automatisch, wenn ich ins Hauptfenster klicke.

            Da ich im IE JS ausgeschaltet habe, was jeder halbwegs sicherheitsbewußte Surfer machen sollte, kann ich das nicht prüfen.

            var pic = null;

            function poppic(picture, name)
            {
            pic = window.open("pics/" + picture, "pic", "width=820,height=620,top=50");
            pic.focus();
            pic.document.title = name;

            du überschreibst hier zwar den Titel, der aber nach dem laden des Bildes wieder von der URL des 'picture' überschrieben werden sollte. Du musst warten bis das Bild fertig ist.

            Besser ist es in das Fenster HTML Code zu schreiben, da äßt sich dann auch simpel der Titel einbauen.

            ...

            window.onfocus = function ()
            {
              if(!pic) return;
              pic.close();
              pic = null;
              window.onfocus = null;
            };

            Hier vielleicht einfacher:

            pic.onblur = function () { this.close();};

            }

            Der Aufruf liesse sich auch besser, d.h. einfacher für dich und benutzbar für Besucher mit abgeschaltetem JS, gestalten:

            <a href="speightsbrewery.jpg"
            target="pic"
            onclick="poppic(this.href, 'Degustation als Abschluss der Brauereibesichtigung');return false;"

            <img src="pics/speightsbrewery_sm.jpg" align="left" hspace=6 vspace=9 border=0></a>

            Ach, grad fällt mir auf, dein Konstrukt ist ja völlig anders, du hast ja hier noch dieses:
            function wwOpen (url, name, attributes) {
            var currentTime = new Date();
            if (name == "_top" || name == "_self" || (currentTime.getTime() - wwLastClick.getTime()) < 3000) {
            if (attributes) {
               return wwRealOpen (url, name, attributes);
            } else if (name) {
               return wwRealOpen (url, name);
            } else {
               return wwRealOpen (url);
            }
            }

            }

            Warum du dass machst ist mir ein Rätsel, aber die funktion window.open weiter oben liefert aufgrund dessen nicht immer einen Wert zurück. Was Mozilla dir auch sagt.

            Ich geb dir mal die Fehlermeldungen und Warnungen aus dem Mozilla:
            Warning: function wwOpen does not always return a value
            Source File: http://8ung.at/nz-reise/poppic.js
            Line: 21
            Source Code:
            }

            Warning: assignment to undeclared variable onError
            Source File: http://8ung.at/nz-reise/poppic.js
            Line: 5

            Warning: assignment to undeclared variable wwRealOpen
            Source File: http://8ung.at/nz-reise/poppic.js
            Line: 23

            und nach einem Klick auf ein Bild:

            Error: pic has no properties
            Source File: http://8ung.at/nz-reise/poppic.js
            Line: 33

            Vielleicht hilft dir das weiter.

            Deinen Dokumenten fehlt übrigens der DOCTYPE und 'pt' solltest du nicht als Maßeinheit für den Monitor einsetzten, da es keine points auf dem Monitor gibt sondern 'px'

            Struppi.

            1. du überschreibst hier zwar den Titel, der aber nach dem laden des Bildes wieder von der URL des 'picture' überschrieben werden sollte. Du musst warten bis das Bild fertig ist.

              Ich glaube, du hast das Ei des Kolumbus gefunden! Darin besteht genau der Unterschied zwischen lokal und online: Lokal gibt's keine Ladeverzögerung und der Title wird nicht wieder überschrieben.
              Somit müsste man wohl eine Funktion schreiben, die
              pic.document.title = name;
              erst ausführt, sobald das Bild geladen ist. Leider sind meine JS-Kenntnisse etwas limitiert. :-(

              Besser ist es in das Fenster HTML Code zu schreiben, da äßt sich dann auch simpel der Titel einbauen.

              Ich hatte eigentlich vor, dies eben gerade nicht machen zu müssen. Da der Reisebericht aus 14 Teile mit je etwa vier Bildern besteht, habe ich eine Variante gewählt, wo ich die Bilder ohne zusätzliches HTML-File in einem neuen Fenster laden kann.

              window.onfocus = function ()
              {
                if(!pic) return;
                pic.close();
                pic = null;
                window.onfocus = null;
              };

              Hier vielleicht einfacher:

              pic.onblur = function () { this.close();};

              Genau so hab ich's vorher gehabt, aber es hat nicht geklappt. Deshalb bin ich auf die längere Variante gekommen.

              <a href="speightsbrewery.jpg"
              target="pic"
              onclick="poppic(this.href, 'Degustation als Abschluss der Brauereibesichtigung');return false;"

              <img src="pics/speightsbrewery_sm.jpg" align="left" hspace=6 vspace=9 border=0></a>

              Werd ich machen, aber zuerst möchte ich das Problem mit Javascript lösen...

              Ach, grad fällt mir auf, dein Konstrukt ist ja völlig anders, du hast ja hier noch dieses:
              function wwOpen (url, name, attributes) {
              var currentTime = new Date();
              if (name == "_top" || name == "_self" || (currentTime.getTime() - wwLastClick.getTime()) < 3000) {
              if (attributes) {
                 return wwRealOpen (url, name, attributes);
              } else if (name) {
                 return wwRealOpen (url, name);
              } else {
                 return wwRealOpen (url);

              Mir ist ein Rätsel, woher du dieses Script genommen hast. Von meiner Seite?? So was habe ich weder geschrieben, noch irgendwo sonst angetroffen... :-)
              Ich habe zur Sicherheit, die Dateien auf dem Server nochmals angeschaut, ob nicht etwa der Provider irgendein Script hinzugefügt hat oder so.
              Ich kann daher auch mit den Mozilla-Fehlermeldungen nicht viel anfangen.

              Deinen Dokumenten fehlt übrigens der DOCTYPE und 'pt' solltest du nicht als Maßeinheit für den Monitor einsetzten, da es keine points auf dem Monitor gibt sondern 'px'

              Danke für die Hinweise! Ich lasse 'pt' am besten gleich weg. Alle Zahlangaben werden ja sowieso in Pixels gerechnet.

              Vielen Dank, dass du dir so viel Zeit nimmst!

              Winnie

              PS. Ich hatte vergessen gehabt bei der Slideshow das VBScript und das Stylesheet hochzuladen (da ja dies nicht mein Problem ist). Wahrscheinlich hat's bei dir deshalb so lange gedauert, bis das erste Bild angezeigt wurde.

              1. du überschreibst hier zwar den Titel, der aber nach dem laden des Bildes wieder von der URL des 'picture' überschrieben werden sollte. Du musst warten bis das Bild fertig ist.

                Ich glaube, du hast das Ei des Kolumbus gefunden! Darin besteht genau der Unterschied zwischen lokal und online: Lokal gibt's keine Ladeverzögerung und der Title wird nicht wieder überschrieben.
                Somit müsste man wohl eine Funktion schreiben, die
                pic.document.title = name;
                erst ausführt, sobald das Bild geladen ist. Leider sind meine JS-Kenntnisse etwas limitiert. :-(

                onload.

                Besser ist es in das Fenster HTML Code zu schreiben, da äßt sich dann auch simpel der Titel einbauen.

                Ich hatte eigentlich vor, dies eben gerade nicht machen zu müssen. Da der Reisebericht aus 14 Teile mit je etwa vier Bildern besteht, habe ich eine Variante gewählt, wo ich die Bilder ohne zusätzliches HTML-File in einem neuen Fenster laden kann.

                brauchst du ja auch nicht, sondern schreib dir eine JS Funktion die den Code erzeugt und in das fenster schreibt.

                window.onfocus = function ()
                {
                  if(!pic) return;
                  pic.close();
                  pic = null;
                  window.onfocus = null;
                };

                Hier vielleicht einfacher:

                pic.onblur = function () { this.close();};

                Genau so hab ich's vorher gehabt, aber es hat nicht geklappt. Deshalb bin ich auf die längere Variante gekommen.

                mit der HTML Variante sollte das auch kein Problem sein.

                function getHMTML(pic_src, titel)
                {
                return 'DOCTYPE .....'

                • '<HTML><HEAD>'
                • '<TITLE>' . titel . '</TITLE>'
                • '</HEAD><BODY onblur="self.close();">'
                • '<IMG SRC="' + pic_src + '">'
                • '</BODY></HTML>'
                  ;
                  }

                Mir ist ein Rätsel, woher du dieses Script genommen hast. Von meiner Seite?? So was habe ich weder geschrieben, noch irgendwo sonst angetroffen... :-)

                hehe, scheint entweder Mozila oder Webwasher einzubauen.

                Struppi.

                1. function getHMTML(pic_src, titel)
                  {
                  return 'DOCTYPE .....'

                  • '<HTML><HEAD>'
                  • '<TITLE>' . titel . '</TITLE>'
                  • '</HEAD><BODY onblur="self.close();">'
                  • '<IMG SRC="' + pic_src + '">'
                  • '</BODY></HTML>'
                    ;
                    }

                  Es funktioniert!! Da du's nicht testen kannst (JS deaktiviert), musst du mir halt glauben... ;-)
                  Vielen Dank für deine Tipps!

                  Ich habe das Script mehr oder weniger gemäss deinem Vorschlag umgeschrieben:

                  function poppic(pic_name, titel)
                  {
                  pic = window.open('', "picture", "width=820,height=620,top=50");
                  pic.document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'

                  • '<HTML><HEAD>'
                  • '<TITLE>' + titel + '</TITLE>'
                  • '</HEAD><BODY>'
                  • '<IMG SRC="pics/' + pic_name + '">'
                  • '</BODY></HTML>');
                    window.onfocus = function ()
                    {
                      if(!pic) return;
                      pic.close();
                      pic = null;
                      window.onfocus = null;
                    };
                    }

                  Nur das mit dem onblur hat nicht funktioniert und so habe ich halt doch meine alte Funktion zum Schliessen des Fensters genommen.

                  MfG
                  Ein glücklicher Winnie

                  1. Es funktioniert!! Da du's nicht testen kannst (JS deaktiviert), musst du mir halt glauben... ;-)

                    nur im IE

                    Vielen Dank für deine Tipps!

                    Ich habe das Script mehr oder weniger gemäss deinem Vorschlag umgeschrieben:

                    function poppic(pic_name, titel)
                    {
                    pic = window.open('', "picture", "width=820,height=620,top=50");
                    pic.document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'

                    • '<HTML><HEAD>'
                    • '<TITLE>' + titel + '</TITLE>'
                    • '</HEAD><BODY>'
                    • '<IMG SRC="pics/' + pic_name + '">'
                    • '</BODY></HTML>');

                    hier solltest du das ganze so schreiben, dann klappt es auch mit allen Browsern:

                    pic.document.open();
                    pic.document.write(.... );
                    pic.document.close();

                    Struppi.

                    1. pic.document.open();
                      pic.document.write(.... );
                      pic.document.close();

                      Hab's gemacht.
                      Leider habe ich's hier in NZ keine anderen Browser als dem IE zum Testen. Hier muss ich dir halt einfach glauben ;-)

                      Danke vielmals für die Lösung meines Problems!

                      MfG
                      Winnie

  3. hi,

    <a href="javascript:poppic('test.jpg', 'Ein Testbild');"><img src="test_small.jpg"></a>

    du öffnest also nur ein bild, und keine html-seite im popup.

    pic.document.title = name;

    ein bild ist kein html-dokument, sollte also m.E. auch gar keinen titel kennen.

    warum der IE dies beim lokalen aufruf anders sieht, ist mir unklar.

    gruss,
    wahsaga