Lightwindow – Image load failure – FIXED

Nachdem ich feststellen musste, dass mein erster Fix-Versuch nicht ganz den gewünschten Erfolg hat, hab ich mich jetzt nochmal hingesetzt und das Problem scheint gelöst zu sein. Zumindest funktioniert es jetzt mit IE6, IE7, Firefox und Safari 2 (Mac).

Dafür ist Folgendes zu tun:

Der Quellcode der Zeilen 1217-1239:
// We have to do this instead of .onload
this.checkImage[i] = new PeriodicalExecuter(function(i) {
if (!(typeof $('lightwindow_image_'+i).naturalWidth != "undefined" && $('lightwindow_image_'+i).naturalWidth == 0)) {
this.checkImage[i].stop();
var imageHeight = $('lightwindow_image_'+i).getHeight();
if (imageHeight > this.resizeTo.height) {
this.resizeTo.height = imageHeight;
}
this.resizeTo.width += $('lightwindow_image_'+i).getWidth();
this.imageCount--;
$('lightwindow_image_'+i).setStyle({
height: '100%', width: '100%'
});
if (this.imageCount == 0) {
this._processWindow();
}
}
}.bind(this, i), 1);

Ersetzen mit folgendem Script:

// We have to do this instead of .onload
var ie = (document.all)?1:0;
this.checkImage[i] = new PeriodicalExecuter(function(i) {
if(ie){ //THE BROWSER IS IE
if ( $('lightwindow_image_'+i).complete && !(typeof $('lightwindow_image_'+i).naturalWidth != "undefined" && $('lightwindow_image_'+i).naturalWidth == 0)) {
this.checkImage[i].stop();
var imageHeight = $('lightwindow_image_'+i).getHeight();
if (imageHeight > this.resizeTo.height) {
this.resizeTo.height = imageHeight;
}
this.resizeTo.width += $('lightwindow_image_'+i).getWidth();
this.imageCount--;
$('lightwindow_image_'+i).setStyle({
height: '100%', width: '100%'
});
if (this.imageCount == 0) {
this._processWindow();
}
//alert('IE has been detected')
}
}
else
{//NOT IE, PROBABLY FF, OPERA, OTHER
//this line works for all other browsers
if ($('lightwindow_image_'+i).complete && !(typeof $('lightwindow_image_'+i).naturalWidth != "undefined" && $('lightwindow_image_'+i).naturalWidth == 0)) {
this.checkImage[i].stop();
var imageHeight = $('lightwindow_image_'+i).getHeight();
if (imageHeight > this.resizeTo.height) {
this.resizeTo.height = imageHeight;
}
this.resizeTo.width += $('lightwindow_image_'+i).getWidth();
this.imageCount--;
$('lightwindow_image_'+i).setStyle({
height: '100%', width: '100%'
});
if (this.imageCount == 0) {
this._processWindow();
}
}
}
}.bind(this, i), 1);

Vielen Dank an fapri aus dem Forum!

UPDATE: Wordpress hatte einige Sonderzeichen eigenmächtig formatiert, das führte zu Syntax-Fehlern. Diese sind jetzt behoben.

20 Kommentare zu “Lightwindow – Image load failure – FIXED”


  1. 1 viziodiforma

    Danke für dein fix, aber leider geht das, man sieht das Bild mit dem effect nicht lightwindow.

  2. 2 Martin

    Hm… bisher hat es bei mir funktioniert. Bekommst du eine Javascript-Fehlermeldung? Funktioniert es in anderen Browsern? Vielleicht kommen wir dem Problem ja auf die Spur ;)

  3. 3 benii

    Hi,

    also nach dem ersten FIX passiert gar nichts und nach dem zweiten FIX öffnet er die verlinkten Bilder sowohl in Firefox, als auch im IE einfach standardmäßig (_self).

    Javascript kommt da überhaupt nicht mehr zum Einsatz. :/

  4. 4 benii

    Ok, hab noch was herausgefunden.. und zwar lässt sich das Problem beim IE beheben, indem man dem Internet-Explorer als aller erstes den doctype nennt:

    Die Zeile muss logischerweise noch vor

    Dann funktioniert lightwindow auch im IE, allerdings zerschiesst mir die Zeile dann meine tables im body und ich steh immernoch am Anfang! :(

  5. 5 Martin

    Einen Doctype anzugeben ist ja wohl Standard. Wenn deine Tabellen nicht mehr das tun was sie sollen dann ist eventuell das Markup nicht ganz sauber. Aber zum Layouten nutzt du die hoffentlich nich? ;)

  6. 6 Rene

    Also bei mir passiert das gleiche wie bei benii.

    Sobald ich die Zeilen im javascript einfüge funktioniert garnichts mehr.

  7. 7 Martin

    Hast du es mal mit dem Doctype probiert? Bei mir funktioniert(e) das Script. Mittlerweile setze für solche Sachen ein anderesn Framework (MooTools) ein.

  8. 8 Rene

    Wo genau muss denn der Doctype angegeben werden?

    Auf der .html Seite ist er standardmässig drin.

    Wie geht das mit Moo Tools?

    /René

  9. 9 Martin

    Doctype:
    natürlich als erstes im Dokument: < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    MooTools:
    Da gibt es z.B. die Squeezebox (http://digitarald.de/project/squeezebox/)

  10. 10 Rene

    Also wie ich geschrieben habe?

    Als erstes auf der .html Seite ist natürlich der Doctype drin.

    Geht aber trotzdem nicht. Bevor ich die Zeilen einfüge geht es aber.

    Vielleicht liegt die Ursache also ganz woanders?

    /René

  11. 11 Martin

    Welche Fehlermeldung liefert das javascript denn? Oder hast du die Seite irgendwo online?

  12. 12 Rene

    Es kommt gar keine Fehlermeldung. Das Bild öffnet sich einfach normal.

    Ich habe das geänderte Script mal in einer Galerie meiner Seite eingefügt.

    http://www.uw-digi.de/photo/page0/page15/page14/page14.html

    In allen anderen galerien ist das Original lightwindow.js mit dem es funktioniert (ausser IE).

    /René

  13. 13 Martin

    Ah Fehler gefunden. Du hast den Quelltext hier 1:1 kopiert, soweit ganz gut. Wordpress scheint dabei aber die ‘ durch ´ ersetzt zu haben. Fällt dem menschlichen Auge kaum auf, den Interpreter aber stoppt das. Also bitte die Hochkommata durch ‘ ersetzen.

  14. 14 Rene

    Also ich habe die Hochkommas gesetzt aber es muss noch irgendein Fehler drin stecken. Es geht immer noch nicht.

    Und ich befürchte ich finde nicht heraus was es ist.

  15. 15 Martin

    anscheinend gibt es ein Codierungsproblem. Schau dir mal zeile 1221 an: if ( $(‘lightwindow_image_’+i).complete && !(typeof $(‘lightwindow_image_’+i).naturalWidth != “undefined” && $(‘lightwindow_image_’+i).naturalWidth == 0)) {

    die Zeichen vor und nach undefined sollen Anführungszeichen (“) sein. Das bitte noch ersetzen. Solche Fehler finden sich auch ganz leicht wenn man die Add-Ons Web Developer Toolbar oder den Firebug für den Firefox installiert.

  16. 16 Rene

    Ok. Jetzt sehe ich mittels der genialen web Developer Toolbar, dass es ein Problem mit folgender Zeile gibt:

    Fehler: syntax error
    Quelldatei: http://www.uw-digi.de/photo/page0/page15/page14/files/javascript/lightwindow.js
    Zeile: 1229, Spalte: 20
    Quelltext:
    this.imageCount–;

    Aber wie weiss ich jetzt was daran falsch ist bzw. wie es richtig sein muss?

    Danke für Deine Geduld mit mir.

  17. 17 Rene

    Ok. Ich habe alle Fehler herausgefunden und korrigiert.

    Es funktioniert für mich und ich habe mich jetzt mit dem IE ein paar Mal durch die Galerie geklickt und alles läuft prima.

    Vielen Dank für deine Unterstützung und die Lehrstunde in Javascript Debugging.

    /René

  18. 18 Martin

    Super das es funktioniert. Woran hat es noch gelegen? Falls Fehler im Script sind würd ich die gern korrigieren. Danke :)

  19. 19 Rene

    Dein Script hat von Anfang an funktioniert.

    Nur nicht so wie es hier im Blog zu sehen ist.

    Der letzte Fehler war (siehe im Source oben)

    this.imageCount–; muss sein this.imageCount-–;

    Vielleicht solltest du hier lieber ein File linken, wo der .js code drin ist.

    Wäre sonst schade um die gute Arbeit die du geleistet hast.

    Ich freue mich sehr das es so geht. Der andere Weg über die squeezebox wäre für mich wesentlich schwieriger geworden.

    Ich benutze Rapidweaver + Rapidalbum und da ist es nicht so einfach was neues einzubinden.

    Vielen dank nochmals
    René

  20. 20 Martin

    Vielen Dank für die Hinweise und natürlich auch für das Lob. Ich habe jetzt nochmal an Artikel gearbeitet und auch Wordpress stellt es jetzt richtig dar. Das File zu verlinken wäre natürlich auch noch eine gute Idee.

Kommentar schreiben