Beat: WTF src für img Element

Folgendes

  
...  
_gal.big = document.createElement("img");  
_gal.big.src = _gal.img[0][0];  
_gal.big.alt = _gal.img[0][1];  
alert(_gal.img[0][0]); // prints fine  
alert(_gal.big.src);  // empty !!!!  
alert(_gal.big.alt); // prints Fine  

Ich kann dem object _gal.big Attribute einfach zuweisen und die Tauchen dann auch im Quellcode auf.
Nur die Zuweisung des src Attributes klappt nicht (FF3).

WTF is going on.

mfg Beat

--
><o(((°>           ><o(((°>
   <°)))o><                     ><o(((°>o
Der Valigator leibt diese Fische
  1. @@Beat:

    nuqneH

    ...

    Hab ich mir erlaubt zu ersetzen durch

    var _gal = {};  
    _gal.img = [];  
    _gal.img[0] = ["foo", "bar"];
    

    _gal.big = document.createElement("img");
    _gal.big.src = _gal.img[0][0];
    _gal.big.alt = _gal.img[0][1];
    alert(_gal.img[0][0]); // prints fine
    alert(_gal.big.src);  // empty !!!!
    alert(_gal.big.alt); // prints Fine

    Nur die Zuweisung des src Attributes klappt nicht (FF3).
    WTF is going on.

    Keine Ahnung. Ich bekomme nacheinander "foo", "foo", "bar" ausgegeben. (3.5.6)

    Vielleicht steckt das Problem in deinen '...'.

    Qapla'

    --
    Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
    1. @@Gunnar Bittersmann:

      nuqneH

      _gal.img[0] = ["foo", "bar"];
      Ich bekomme nacheinander "foo", "foo", "bar" ausgegeben. (3.5.6)

      Na, nicht ganz. In der Tat hatte ich statt "foo" einen vollständigen URI wie "http://example.net/foo" zu stehen, der anstandslos zweimal ausgegeben wird.

      Steht dagegen in _gal.img[0][0] ein relativer URI "foo", kommt für _gal.big.src "file:///[Pfad]/foo" raus.

      Stimmt vielleicht was mit deinem URI in _gal.img[0][0] nicht?

      Qapla'

      --
      Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
      1. Stimmt vielleicht was mit deinem URI in _gal.img[0][0] nicht?

        Ich habe die <noscript> Version im anderen Codebeispiel. Dort werden die URLs korrekt aufgelöst.
        Das JS läuft im gleichen Kontext.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
    2. Vielleicht steckt das Problem in deinen '...'.

      Hier der Code, der nach des JS Ausführung im Browser steht

        
      <div class="plugin gallery">  
      <noscript>  
      <ol>  
        <li><img src="userdata/img/humor1.png" alt="MISSING"></li>  
        <li><a href="__?plugin_gallery=1"><img class="preview" src="userdata/img/humor2.png" alt="MISSING"></a></li>  
      </ol>  
      </noscript>  
      <div id="plugin_gallery">  
      <div><span>1</span><span>2</span><span>3</span><span>4</span><span>5</span></div>  
      <img style="margin: 0pt auto; display: block;" alt="MISSINGuserdata/img/humor5.png"></div>  
        
      <!-- HIER ^^ sieht man dass src nicht eingetragen ist -->  
        
      <script type="text/javascript">  
      var _gal = new Object;  
      _gal.img = new Array;  
      _gal.img[0] = ["userdata/img/humor1.png","MISSINGuserdata/img/humor1.png",];  
      _gal.img[1] = ["userdata/img/humor2.png","MISSINGuserdata/img/humor2.png",];  
      _gal.img[2] = ["userdata/img/humor3.png","MISSINGuserdata/img/humor3.png",];  
      _gal.img[3] = ["userdata/img/humor4.png","MISSINGuserdata/img/humor4.png",];  
      _gal.img[4] = ["userdata/img/humor5.png","MISSINGuserdata/img/humor5.png",];  
        
      _gal.prev = document.createElement("div");  
      _gal.show = document.createElement("img");  
      _gal.show.src = _gal.img[0][0];  
      _gal.show.alt = _gal.img[0][1];  
      alert(_gal.img[0][0]); // prints fine <-----------  
      alert(_gal.show.src);  // empty <--------------  
      alert(_gal.show.alt); // prints Fine <-----------  
      //_gal.show.alt = "DEFAULT";  
      _gal.show.style.display="block";  
      _gal.show.style.margin="0 auto";  
      for( var i=0; i < _gal.img.length; i++ ){	  
      	var e = document.createElement("span");  
      	e.innerHTML = (i+1);  
      	e.onclick = function(){  
      		alert(this.firstChild.data);  
      		var c = this.firstChild.data - 1 ;  
      		_gal.show.src = _gal.img[c][0];  
      		_gal.show.alt = _gal.img[c][1];  
      	};  
      	_gal.prev.appendChild(e);  
      }  
      _gal.cont = document.getElementById("plugin_gallery");  
      _gal.cont.appendChild(_gal.prev);  
      _gal.cont.appendChild(_gal.show);  
      </script>  
      </div>  
      
      

      mfg Beat

      --
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische
      1. Hallo Beat,

        var _gal = new Object;
        _gal.img = new Array;

        fehlen hier nicht die "()"?

        Gruß, Jürgen

        1. var _gal = new Object;
          _gal.img = new Array;

          fehlen hier nicht die "()"?

          Bitte nicht raten...

          Es hat wirklich mit der Zuweisung zu
            ob.src = "http://example.org/"
          zu tun. Jedes andere Attribut kann ich zuweisen.
          Aber aus irgend einem Grund dieses nicht.
          Egal ob ich eine Variable zuweise oder ein Literal.
          Egal ob Absoluter Link oder relativer. Das object bleibt leer.

          Ich habe auch schon AdBlock+ und anders ausgeschaltet, für den Fall.
          Aber da ist nichts zu finden.

          mfg Beat

          --
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
          1. Hallo Beat,

            var _gal = new Object;
            _gal.img = new Array;

            fehlen hier nicht die "()"?

            Bitte nicht raten...

            ich rate nicht: http://de.selfhtml.org/javascript/objekte/array.htm. Oder darf man hier die Klammern weglassen?

            Gruß, Jürgen

        2. var _gal = new Object;
          _gal.img = new Array;

          fehlen hier nicht die "()"?

          Wenn die Parameterliste bei new Konstruktorfunktion() leer ist, ist das Weglassen von () möglich.
          http://bclary.com/log/2004/11/07/#a-11.2.2

          1. Hallo new-Operator,

            var _gal = new Object;
            _gal.img = new Array;

            fehlen hier nicht die "()"?

            Wenn die Parameterliste bei new Konstruktorfunktion() leer ist, ist das Weglassen von () möglich.
            http://bclary.com/log/2004/11/07/#a-11.2.2

            danke für die Info. Ich habe new Array/Object bisher immer nur mit (leeren) Klammern benutzt und dachte, das da der Fehler steckt. Aber ich habe meinen Browser ja auch noch nicht so verstellt wie Beat.

            Gruß, Jürgen

      2. var _gal = new Object;
        _gal.img = new Array;

        Du kennst die literale Schreibweise? Ja soltest du sie ist ähnlich wie in Perl und du benutzt sie sogar selber, aber dann falsch.

        _gal.img[0] = ["userdata/img/humor1.png","MISSINGuserdata/img/humor1.png",];

        _gal.img[0] ist ein Array (übrigens führt das Kommma hinten im IE zu einer Fehlermeldung -> Ein Bug).

        _gal.show.src = _gal.img[0][0];

        du könntest hier auch den Status abfragen:

        _gal.show.onload = function() { alert('this + ' is ok.' );};  
        _gal.show.onerror = function() { alert('this + ' is NOT ok.' );};  
        _gal.show.src = _gal.img[0][0];  
        
        

        Struppi.

        1. Du kennst die literale Schreibweise? Ja soltest du sie ist ähnlich wie in Perl und du benutzt sie sogar selber, aber dann falsch.

          Die letzte Bemerkung ist falsch!

          Struppi.

        2. var _gal = new Object;
          _gal.img = new Array;

          Du kennst die literale Schreibweise? Ja soltest du sie ist ähnlich wie in Perl und du benutzt sie sogar selber, aber dann falsch.

          Das werde ich mir wohl abgewöhnen müssen
          also
          var x = new Object();

          _gal.img[0] = ["userdata/img/humor1.png","MISSINGuserdata/img/humor1.png",];

          _gal.img[0] ist ein Array (übrigens führt das Kommma hinten im IE zu einer Fehlermeldung -> Ein Bug).

          Bereinigt.

          Der Fehler wer durch einen Eintrag in about:config verursacht.
          Wohl noch aus FF 2 Zeiten.

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
          1. Das werde ich mir wohl abgewöhnen müssen
            also
            var x = new Object();

            nein, die lieterale schreibweise wäre:
            var x = {};

            Der Fehler wer durch einen Eintrag in about:config verursacht.
            Wohl noch aus FF 2 Zeiten.

            Seltsam.

            Struppi.

    3. @@Gunnar Bittersmann:

      nuqneH

      Hab ich mir erlaubt zu ersetzen durch

      var _gal = {};

      _gal.img = [];
      _gal.img[0] = ["foo", "bar"];

        
      Wobei ich mir dann die Frage stellte, warum ich nicht einfach  
        
      ~~~javascript
      var _gal = {};  
      _gal.img = [["foo", "bar"]];
      

      geschrieben hatte. Oder gleich für das Ganze

      var _gal = {img: [["foo", "bar"]]};

      Scharf. Inder Kürze liegt die Würze.

      Qapla'

      --
      Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
  2. Zur Info: FF3 sperrt die Zuweisung
    MSIE 8 macht's fein.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Zur Info: FF3 sperrt die Zuweisung
      MSIE 8 macht's fein.

      Den hab ich nicht, aber alle anderen IE sollten eigentlich eine Fehlermeldung werfen.

      Struppi.

  3. Lösung gefunden

    In FF about config war gesetzt:
    dom.disable_image_src_set;true
    umstellen auf false macht es wirksam.

    Wer weiss, vielleicht dürften auch jetzt diverse Greyboxen wieder funktionieren.
    Ich kann mich blass erinnern, dass diese Variable mal wegen einem Sicherheitsadvisory gesetzt wurde.

    Sorry...

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Hallo Beat.

      Um nicht in einem Browser testen zu müssen, der für das tägliche Surfen konfiguriert ist, habe ich mir im Firefox ein Profil "Development" angelegt.
      In diesem sind dann auch die typischen Entwicklererweiterungen wie Firebug und die Webdeveloper-Toolbar installiert.

      Damit vermeide ich, meinen Browser für zwei sehr unterschiedliche Zwecke benutzen zu müssen.

      Servus,
      Flo