moejoe: location.href unter opera 7.1

grüsse.

ich versuche in einer javascript-funktion einem <iframe> eine neue source zuzuweisen.

ich hab das so versucht:

inlay1.location.href='inlays/inlay_home.htm';

// inlay1 ist der name des <iframes>

tjo, ie und mozilla nehmen das so an, opera nur, wenn ich nach dieser zeilen ein alert(); aufrufe. scheinbar aktualisiert der browser den <iframe> nicht.

hoffe es kann mir da jemand den trick verraten.

grüsse
moejoe

  1. Hallo moejoe,

    inlay1.location.href='inlays/inlay_home.htm';

    tjo, ie und mozilla nehmen das so an, opera nur, wenn ich nach dieser zeilen ein alert(); aufrufe. scheinbar aktualisiert der browser den <iframe> nicht.

    Kannst du bitte ein reduziertes Beispiel posten oder besser noch eines online stellen, welches das beschriebene Problem veranschaulicht? Denn eigentlich sollte Opera 7 keine Probleme damit haben, in meinen Tests funktioniert alles wie erwartet. In welchem Kontext und unter welchen Umständen wird der Befehl ausgeführt, wie sieht der betreffende relevante Code aus (mit Betonung auf relevant)?

    Grüße,
    Mathias

  2. ok, habs mal online gestellt.

    gibt zwar n fehler in opera, dass manche bilder nicht richtig angezeigt werden, aber das ist ja erstmal nebensache.

    http://holodecs.de/hid

    problem ist, dass die beiden grauen (inlay_home)gekennzeichneten iframes nach drücken der power-taste(unten rechts) nicht aktualisiert werden, wie sies sollten. am besten mal im IE betrachten, dann sieht man, wies eigentlich aussehen sollte.

    gruss
    moe

    1. Hallo,

      http://holodecs.de/hid/

      (Argh, div-Suppe, Inline-Styles (wozu, du hast doch IDs vergeben), obligates JavaScript, HTML-Formatierungen, die Schriftgrößeneinheit »pt«, keine generisch Schriftfamilie angegeben...)

      Schreibe hinter den Aufruf der Funktion einmal »return false«, also in etwa <a href="#" onclick="swapa(); return false">, dann sollten die iframe-Adressen über die location.href-Zuweisungen geändert werden. Das target-Attribut dürfte überflüssig sein, wie es aussieht.

      Du solltest vielleicht auch beim Vorladen der Bilder volle URLs angeben, inklusive »http://« und das Attribut type="text/javascript" für das script-Element vergeben.

      Mathias

      1. wow, alle achtung, du hasts geknackt !
        vielen dank dafür.

        btw. was genau macht das return false ?

        gruss
        moe

        1. Hallo moe,

          btw. was genau macht das return false ?

          Bei einem Klick auf den Link wird normalerweise das Linkziel im href-Attribut angesprungen (soweit ist es klar, das ist die normale Funktion eines Links). Das Linkziel ist in diesem Fall leer beziehungsweise »#«, was ungefähr »springe zu einem nicht existierenden Anker« bedeutet und einige Browser wie »springe ganz nach oben« interpretieren (Opera übrigens nicht).
          Wenn href-Attribut *und* onclick-Attribut bzw. onclick-Event-Handler für den Link angegeben sind, wird beides mehr oder weniger gleichzeitig ausgeführt: Das href-Linkziel wird annavigiert und der JavaScript-Code, hier im onclick-Attribut, wird ausgeführt. Wenn nun im JavaScript ebenfalls eine Navigationsänderung stattfindet, kommt Opera anscheinend durch das gleichzeitige Laden durcheinander. Das sieht man daran, dass die Fortschrittsleiste beim Klick auf den Link angezeigt wird, dann wieder für einige Millisekunden verschwindet und wieder angezeigt wird. Das href="#" unterbricht also anscheinend das Laden in den Frames (das Ausführen der Funktion wird ja nicht unterbrochen, schließlich wird der andere Befehl danach noch ausgeführt und auch wenn dort noch andere zeitintensive Befehle stehen).
          return false verhindert ganz einfach, dass das Standardereignis beim Klick auf einen Link zusätzlich ausgeführt wird, nämlich das Anspringen des Linkziels. Das href-Attribut und damit die urspüngliche Funktion des Links wird also komplett übergangen.

          Mathias

          1. ok, gut zu wissen.

            dank dir für die ausfühliche erläuterung!

            gruss
            moe