Lukas Gisin: TimeOut-Warnung bei Popup, doch warum?

Hallo

Um Bilder in einem Popup darzustellen, habe ich eine Funktion (Java Script) geschrieben, die automatisch die Grösse des zu ladenden Bildes erkennt und das Popup dementsprechend anpasst und einen Link zum schliessen des Popups einfügt. Funktioniert eigentlich,aber...
Jeweils beim erstmaligen öffnen eines Bildes bleibt das Script
hängen, bis nach einer Weile die TimeOut Warnung frägt,
ob man das Script weiter ausführen wolle, oder nicht.
Klickt man auf NEIN (Script nicht beenden), erscheint das Popup unverzüglich.

Bis jetzt habe ich das Script schon x-mal auseinandergenommen,
konnte aber keine Ursache für diese Verzögerung finden.

Hier der Quellcode:

var win;
function popup(nm,par)
  {
  var b;var h;
  var flag="no";
  var bild=new Image();
  bild.src="../Daten/"+nm;
  if(win=="[object]"){win.close();}
  if(par==2){var flag="yes";}
  do{b=bild.width;h=bild.height;}
  while(b==0 && h==0)
  b=b+(20*par)+20;h=(h/par)+70;
  win=window.open(bild.src,"Bild","width="+b+",height="+h+",top=20,left=50,scrollbars="+flag+",resizable=yes");
  win.document.write("<html><head><title>Multimediatechnik - Bild popup - (Dateiname = "+nm+" )</title></head><body><link rel='stylesheet' type='text/css' href='../style.css'><center><img src='../Daten/"+nm+"' border=0><p><a href='#schliessen' onClick='window.close();' class='menu2'><tt>Fenster schliessen</tt></a></center></body></html>");
  win.focus();
 }

=> Aufruf durch "<a href="#Bild1" onClick="popup('vkond_1.jpg',1)" class="bild">"
=> Die Variable "par" (Wert: 1 oder 2) gibt lediglich an, ob es ein Hoch- oder Querformatbild ist.

Aktuelles Beispiel unter:
http://home.datacomm.ch/multimediatechnik/Elektrotechnik/v_kond.shtml

Fals mir jemand weiterhelfen könnte wäre ich dankbar!
Besten Dank schon mal.

  1. Hallo,

    Bis jetzt habe ich das Script schon x-mal auseinandergenommen,
    konnte aber keine Ursache für diese Verzögerung finden.

    Hier der Quellcode:

    var win;
    function popup(nm,par)

    ...

    var bild=new Image();
      bild.src="../Daten/"+nm;

    ...

    do{b=bild.width;h=bild.height;}
      while(b==0 && h==0)

    ^Diese Schleife ist wahrscheinlich Ursache für die Warnung des IE.

    Ein besserer Ansatz, als in einer Schleife zu warten, bis bild.width bzw. bild.height einen Wert>0 haben, ist, das Popup-Fenster _mit_ der Bildreferenz zunächst in einer beliebigen Größe zu öffnen und es dann, bei Auftreten des Ereignisses bild.onload entsprechend in der Größe zu verändern.

    So wie hier: http://javascript.jstruebig.de/skripte/7/

    Das stellt einmal sicher, dass das Bild auch wirlich geladen wird (Ich kann mir vorstellen, dass einige Browser das nur wegen einer Wertzuweisung an die src-Eigenschaft eines Image-Objektes nicht tun.) und außerdem ist das onload-Ereignis ein besserer Anzeiger für den Ladezustand des Bildes.

    viele Grüße

    Axel