Announcement

Collapse
No announcement yet.

.onload & document.write() funzt in IE8, aber nicht in FF, warum?

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • .onload & document.write() funzt in IE8, aber nicht in FF, warum?

    Hallo zusammen,

    ich habe ein enorm einfaches Script erstellt, welches lediglich prüfen soll, ob eine Bilddatei existiert oder nicht und, dem entsprechend, eine Variable ändert oder eben nicht. Diese Variable wird dann im document.write genutzt um das gefundene oder sonst das Standard-Bild anzuzeigen. Hier habe ich jedoch auf den <img>-Tag verzichtet und lasse anstelle nur die Variable als Text ausgeben.

    Beides funktioniert 1A im IE8, jedoch nicht im FF, da ich jedoch Win2000 nutze kann ich den IE 8 nicht nutzen, daher wäre es mir lieb, das im FF funktionstüchtig zu machen.

    <html>
    <script>
    function imagetest() {
    var MyImage = new Image();
    lights = "Picture not found";
    MyImage.onload = DoesExists;
    MyImage.src = "../test.jpg";

    function DoesExists(){
    lights ="Picture exists";
    alert("Go thru function DoesExists");
    return lights;
    }
    }

    imagetest()
    ampel = lights;

    </script>
    </head>

    <body>
    <script>document.write(ampel);</script>
    </body>
    </html>

    Kann mir bitte jemand helfen und mir sagen, wie ich das für den FF schreiben muss?

  • #2
    http://www.w3.org/TR/html4/struct/objects.html#edef-IMG

    Firefox wird sich wohl daran halten
    Christian

    Comment


    • #3
      Was du da versuchst, kann nicht verlässlich funktionieren. Wenn du erwartest, dass das Setzen der src-Eigenschaft eines Image-Objektes das vollständige Laden des Bildes bewirkt, bevor darauf folgender Scriptcode ausgeführt und darauf folgendes HTML verarbeitet wird, dann hast du Ereignis-basierte Javascript-Programmierung im Browser nicht verstanden. Nach dem Setzen der src-Eigenschaft wird der darauf folgende Code ausgeführt, es wird nicht auf das vollständige Laden des Bildes gewartet. So ist durchaus möglich und sogar wahrscheinlich, dass die Variable ampel auf den Wert von lights gesetzt wird, mit dem du diese Variable initialisiert hast. Der onload-Handler wird einfach später aufgerufen, da ist die Zuweisung längst erfolgt.

      Was du machen kannst, ist folgendes:
      Code:
      <html>
      <body>
      <span id="imgContainer"></span>
      <script type="text/javascript">
      var img1 = 'image1.jpg';
      var img2 = 'image2.jpg';
      
      function addImage(containerId, url) {
        var img = document.createElement('img');
        img.src = url;
        document.getElementById(containerId).appendChild(img);
      }
      
      var img = new Image();
      img.onload = function() {
        addImage('imgContainer', img1);
      };
      img.onerror = function() {
        addImage('imgContainer', img2);
      };
      img.src = img1;
      </script>
      </body>
      </html>

      Comment


      • #4
        Vielen Dank für die Antwort. Jetzt versteh ich zumindest, war das nicht funktiioniert hat. Das Script hier sieht auch enorm interessant aus. Das man das per getElement lösen könnte hab ich gar nicht bedacht. Aber irgendwie funktioniert das auch nicht so wie gewünscht. Die Variable bleibt irgendwie img1.

        Ich habe mittlerweile eine Lösung dafür siehe: http://forum.jswelt.de/javascript/52...tml#post333002.

        Läuft über onerror, aber das hier werde ich trotzdem noch durchtesten, vielleicht wird's damit zumindest kürzer.

        Comment


        • #5
          Gelbe Karte!

          Crossposts werden hier nicht toleriert! => Close!
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment

          Working...
          X