Chris: Zwei Frames bzg. zwei Links gleichzeitig ändern

Hallo,

ich habe in einem Web für fast alle Verlinkungen das Javascript "Zwei Frames auf einmal ändern" eingesetzt. Nun gibt es aber ein paar Links, bei denen nicht zwei Frames geändert werden sollen, sondern nur ein Frame (nämlich der, in dem geklickt wird - also die Navigation) und statt des zweiten Frame soll nun aber eine neue Seite zu einer ganz anderen Webseite aufgehen.

Wie kann ich das lösen?

Danke vorab & Viele Grüße
Chris

  1. </faq/#Q-32i>

    self.close(); Danke

    1. Hallo,

      </faq/#Q-32i>

      self.close(); Danke

      Hast du das Posting von Chris überhaupt gelesen?

      Er/sie will nicht zwei Frames ändern. Das tut er/sie nämlich schon - mit
      dem 2-Frame-Skript von SelfHTML.
      Er/sie will, daß beim Klick auf einen Link sowohl diese Link aufgerufen,
      als auch ein neues Fenster mit einer anderen Seite geöffnet wird.

      Und weil du dich so gut auskennst und jetzt genau weißt, was gefragt
      ist, darfst du ihm/ihr jetzt auch helfen!

      Gruß
      Slyh

      1. Hi, Slyh

        Hast du das Posting von Chris überhaupt gelesen?

        Teilweise.

        Er/sie will, daß beim Klick auf einen Link

        http://selfhtml.teamone.de/javascript/sprache/eventhandler.htm#onclick

        sowohl diese Link aufgerufen,

        http://selfhtml.teamone.de/javascript/objekte/location.htm#href

        als auch ein neues Fenster mit einer anderen Seite geöffnet wird.

        http://selfhtml.teamone.de/javascript/objekte/window.htm#open

        Und weil du dich so gut auskennst und jetzt genau weißt, was gefragt
        ist, darfst du ihm/ihr jetzt auch helfen!

        Für nachhaltige Hilfe: s. oben
        Für soforthabenwollen: s. unten

        <script type="text/javascript">
        <!--
        function EineinhalbFrames(URI1,URI2) {
          self.location.href = URI1;
          window.open(URI2,"killedbydefault","width=300,height=300,left=100,top=100");
        }
        //-->
        </script>

        ...

        <a href="content.html" onclick="EineinhalbFrames('clicki.html','bunti.html');return false;">yippie</a>

        Wird auf Wunsch dokumentiert und mit einer Zierzeile versehen per Mail verschickt.

        LG Orlando

        1. Hallo Orlando,

          Hast du das Posting von Chris überhaupt gelesen?

          Teilweise.

          Das Gefühl hatte ich auch. *g*

          <script type="text/javascript">
          <!--
          function EineinhalbFrames(URI1,URI2) {
            self.location.href = URI1;
            window.open(URI2,"killedbydefault","width=300,height=300,left=100,top=100");
          }
          //-->
          </script>

          ...

          <a href="content.html" onclick="EineinhalbFrames('clicki.html','bunti.html');return false;">yippie</a>

          Wieso gibt's da jetzt ein href obwohl die location doch in der
          EineinhalbFrames-Funktion gesetzt wird? Kannst du dich nicht
          entscheiden? *g*
          Und dann gefällt mir außerdem noch nicht, daß du explizit Angaben zur
          Fenster-Größe und -Position machst. Das ist doch gar nicht notwendig.
          Ohne diese Angaben wird die vom Benutzer vorgegebene Browser-Größe verwendet.
          Und genau so würde ich das als mündiger Nutzer auch wollen.

          SCNR!

          Gruß
          Slyh

          1. Hi, Slyh

            <script type="text/javascript">
            <!--
            function EineinhalbFrames(URI1,URI2) {
              self.location.href = URI1;
              window.open(URI2,"killedbydefault","width=300,height=300,left=100,top=100");
            }
            //-->
            </script>

            <a href="content.html" onclick="EineinhalbFrames('clicki.html','bunti.html');return false;">yippie</a>

            Wieso gibt's da jetzt ein href obwohl die location doch in der
            EineinhalbFrames-Funktion gesetzt wird? Kannst du dich nicht
            entscheiden? *g*

            Der Verweis ist absichtlich da, weil (nicht nur) bei mir Javascript oft deaktiviert ist und ich wenigstens _irgendeine_ Reaktion auf einen Click haben will. 'href=javascript:' ist IMHO absolut unsauber und unnötig.

            Und dann gefällt mir außerdem noch nicht, daß du explizit Angaben zur
            Fenster-Größe und -Position machst. Das ist doch gar nicht notwendig.
            Ohne diese Angaben wird die vom Benutzer vorgegebene Browser-Größe verwendet.

            Das ist auf meinem System ein Vollbild. Ich bekäme also gar nicht mit, dass sich zusätzlich noch ein Frame-Inhalt geändert hat. Daher die kleine Fenstergröße.

            Und genau so würde ich das als mündiger Nutzer auch wollen.

            Als mündiger Nutzer würge ich PopUps per default ab, daher auch der Fenstername "killedbydefault". Wenn das Layout solche Javascript-Verrenkungen nötig macht, ist bereits bei der Konzeption etwas danebengegangen - Stichwort 'clicki' + 'bunti'. Wie du siehst, steht die meiste Information im Script zwischen den Zeilen.

            Ich gebe allerdings zu, dass du mich beim ungerechtfertigten reflexartigen Setzen eines Links auf die FAQ ertappt hast. Deine Botschaft ist also durchaus angekommen. Was aber viel wichtiger ist ;-) meine auch?

            LG Orlando

        2. Hallo Orlando und Forum,

          wo wir schon mal bei dem Thema sind, dachte ich mir, ich beschäftige mich auch mal damit - kann ja nicht so schwer sein, nicht wahr? Ja, Dunkeltuten! Ich habe insgesamt ca. 5 Stunden an diesem üblen Problem geknuspert und es dann doch erst mit Hilfe deiner Hinweise etwas anders gelöst als du. Und das, obwohl ich mir geschworen hatte, nicht zu "spicken"! Aber von vorn:

          <script type="text/javascript">
          <!--
          function EineinhalbFrames(URI1,URI2) {
            self.location.href = URI1;
            window.open(URI2,"killedbydefault","width=300,height=300,left=100,top=100");
          }
          //-->
          </script>

          Ja, da habe ich jetzt folgendes stehen:

          <script type="text/javascript">
          <!--
          function FrameFenster(URI1,URI2) {

          window.open(URI1)
          parent.unten.location.href = URI2

          }
          //-->
          </script>

          und weiss gottseidank auch, warum: Ich patsche also meine erste URI in ein neues Fenster und die zweite in den Frame des Elternfensters, der "unten" heisst. Hurra!

          Aufgerufen wird das ganze dann so:

          <a href="javascript:FrameFenster('zweiframes_jo.htm','zweiframes_su.htm')">Fersuch</a>

          (ja, ich habe die Zweiframes-Erklärung von Stefan für diesen Versuch benutzt. ;o))

          Um dem geneigten Fachpublikum meine Verzweiflung zu demonstrieren, hier die Überlegungen, die mich ins absolut Leere geführt haben:

          Die Funktion aus http://selfhtml.teamone.de/javascript/beispiele/zweiframes.htm sieht so aus:

          function ZweiFrames(URI1,F1,URI2,F2) {
            Frame1=eval("parent."+F1);
            Frame2=eval("parent."+F2);
            Frame1.location.href = URI1;
            Frame2.location.href = URI2;
          }

          und einer der dazugehörigen Aufrufe so:

          <a href="javascript:ZweiFrames ('zweiframes_so.htm','oben','zweiframes_su.htm','unten')">
          Susan Sarandon
          </a>

          Wobei ich hier hinten und vorne nicht begriffen habe, was Frame1 und Frame2 denn nun sein könnten und wo, zum Geier, diese Funktion die frames herkriegt, in die sie den ganzen Kram laden soll (das weiss ich inzwischen *G*). Aber wozu die "Ecke" da ist, um die mit dem eval "herumgedacht" wird, ist mir beim allerbesten Willen nicht klargeworden - vielleicht ist ja irgendjemand so freundlich und klärt mich diesbezüglich auf. Nachdem ich mir angesehen hatte, was du so schreibst, war mir aufgefallen, dass es auch auf die "Zwei-Frames-gleichzeitig-ändern"-Frage eine wesentlich popligere Antwort gibt:

          <script type="text/javascript">
          <!--
          function ZwoFrames(URI1,URI2) {

          parent.oben.location.href = URI1
          parent.unten.location.href = URI2

          }
          //-->

          Aufruf wie folgt:

          <a href="javascript:ZwoFrames('zweiframes_so.htm','zweiframes_su.htm')">Susan Sarandon</a>

          Aber _das_ aus dem in SELF vorhandenen Beispiel zu schliessen, war mir als ausgesprochener Nicht-Programmierin mit Hang zu einer gewissen Umständlichkeit beim besten Willen nicht möglich. Mit deinem Beispiel war's dann nur noch ein Katzensprung von self zu parent und window.open...

          Dies alles nur als Motivation für diejenigen, die ab und zu meinen, ihre Erklärungen würden ja doch nie verstanden! ;o)

          File Griese,

          Stonie

          1. Hi, Stonie

            Erstmal Gratulation zur qualitativ hochwertigsten Zwei-Frames-Frage des Jahres ;-p

            <script type="text/javascript">
            <!--
            function FrameFenster(URI1,URI2) {
            window.open(URI1)
            parent.unten.location.href = URI2
            }
            //-->
            </script>

            Das Beispiel bedingt, dass der Frame, in dem die Änderung passieren soll "unten" heißt. Du müsstest also bei mehreren Frames für jede Variante eine eigene Funktion schreiben.

            <a href="javascript:FrameFenster('zweiframes_jo.htm','zweiframes_su.htm')">Fersuch</a>

            Dollar Fersuch ;-) Allerdings stehen Besucher mit deaktiviertem Javascript etwas im Regen. Daher empfehle ich einen normalen Verweis, die Funktion sollte dann über den Eventhandler 'onclick' aufgerufen werden.

            <a href="non_js_alternative.htm" onlick="FrameFenster('zweiframes_jo.htm','zweiframes_su.htm');return false;">Fasuch</a>

            Durch 'return false' reagieren auch Browser mit aktivem Javascript korrekt und führen den Verweis auf 'non_js_alternative.htm' nicht aus.

            function ZweiFrames(URI1,F1,URI2,F2) {
              Frame1=eval("parent."+F1);
              Frame2=eval("parent."+F2);
              Frame1.location.href = URI1;
              Frame2.location.href = URI2;
            }

            <a href="javascript:ZweiFrames ('zweiframes_so.htm','oben','zweiframes_su.htm','unten')">
            Susan Sarandon
            </a>

            (...) Aber wozu die "Ecke" da ist, um die mit dem eval "herumgedacht" wird, ist mir beim allerbesten Willen nicht klargeworden - vielleicht ist ja irgendjemand so freundlich und klärt mich diesbezüglich auf.

            Also, ganz ohne Bienchen und Blümchen: Mit eval() http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm#eval werden die Zeichenketten "parent." und der im Verweis als 'F1' angegebene Framename (zB 'oben') zusammengefügt, sodass in der Variable Frame1 schließlich 'parent.oben' steht.

            'Frame1.location.href' ist daher gleich 'parent.oben.location.href'

            That's it ;-) Der Vorteil dabei ist, dass du im Verweis selbst angeben kannst, in welchen Frames die veränderungen stattfinden sollen und nicht, wie oben schon gesagt, für jede Variante eine eigene Funktion nötig ist. Das macht die Arbeit bei vielen Frames bestimmt einfacher.

            Nachdem ich mir angesehen hatte, was du so schreibst, war mir aufgefallen, dass es auch auf die "Zwei-Frames-gleichzeitig-ändern"-Frage eine wesentlich popligere Antwort gibt:

            (ebenso funktionierende Lösung)

            Du kannst beim Javascript-Programmieren natürlich gerne popeln *g*

            Dies alles nur als Motivation für diejenigen, die ab und zu meinen, ihre Erklärungen würden ja doch nie verstanden! ;o)

            Wenn nicht die Fragen manchmal so unverständlich wären ;-)

            LG Orlando

            1. Hi, Orlando!

              Erstmal Gratulation zur qualitativ hochwertigsten Zwei-Frames-Frage des Jahres ;-p

              *hehehe* Jaja, und das, wo ich sowas noch nicht mal brauche, gelle?

              Ist ja so, dass ich nur wissen wollte, ob man das Zwei-Frames-Beispiel aus SELFHTM "einfach so" umdüdeln kann, so dass es eben einen frame tauscht und ein neues Fenster aufmacht - und das, weil ich mich ein bisschen über deine self.close-Antwort geärgert hatte. Kannste mal sehen, wozu du mich kriegst. ;o)

              Das Beispiel bedingt, dass der Frame, in dem die Änderung passieren soll "unten" heißt. Du müsstest also bei mehreren Frames für jede Variante eine eigene Funktion schreiben.

              Ja, das hatte ich nach langem, mühevollen Nachdenken dann auch verstanden.

              <a href="non_js_alternative.htm" onlick="FrameFenster('zweiframes_jo.htm','zweiframes_su.htm');return false;">Fasuch</a>

              Durch 'return false' reagieren auch Browser mit aktivem Javascript korrekt und führen den Verweis auf 'non_js_alternative.htm' nicht aus.

              Hey, chic! Jetzt habe ich dieses auch färstanden - hurra! Danke!

              Also, ganz ohne Bienchen und Blümchen: Mit eval() http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm#eval werden die Zeichenketten "parent." und der im Verweis als 'F1' angegebene Framename (zB 'oben') zusammengefügt, sodass in der Variable Frame1 schließlich 'parent.oben' steht.

              Ja, das hatte ich dann auch kapiert. Nur das "wozu", das erschloss sich mir nicht.

              'Frame1.location.href' ist daher gleich 'parent.oben.location.href'

              That's it ;-) Der Vorteil dabei ist, dass du im Verweis selbst angeben kannst, in welchen Frames die veränderungen stattfinden sollen und nicht, wie oben schon gesagt, für jede Variante eine eigene Funktion nötig ist. Das macht die Arbeit bei vielen Frames bestimmt einfacher.

              Ja, wobei man window und open leider nicht auf dieselbe Art "zusammenschustern" kann - schade, eigentlich, wenn das gegangen wäre, wäre ich schon viel, viel früher fertig gewesen. Aber was tut man nicht alles, um dazuzulernen!

              Du kannst beim Javascript-Programmieren natürlich gerne popeln *g*

              *hehe* Naja, nicht gerade das - aber mehr als "zusammengestöpselt" kommt garantiert nicht 'raus. Ich brauch' das Zeug ja nie!

              Wenn nicht die Fragen manchmal so unverständlich wären ;-)

              Achja - da könnten wir stundenlang drüber reden, nicht? Aber manchmal liegt's ja am Zwei-Frames-Ablehnungsreflex, gelle? ;o)

              Danggeschön und selbstverständlich

              file Griese

              Stonie

  2. Hi,
    was spricht dagegen auch hier "Zwei Frames auf einmal ändern" zu verwenden und einfach das jeweilige target zu aendern?
    Oder verstehe ich die Frage nicht...?
    Cheers, dm.

    Hallo,

    ich habe in einem Web für fast alle Verlinkungen das Javascript "Zwei Frames auf einmal ändern" eingesetzt. Nun gibt es aber ein paar Links, bei denen nicht zwei Frames geändert werden sollen, sondern nur ein Frame (nämlich der, in dem geklickt wird - also die Navigation) und statt des zweiten Frame soll nun aber eine neue Seite zu einer ganz anderen Webseite aufgehen.

    Wie kann ich das lösen?

    Danke vorab & Viele Grüße
    Chris

    1. Hi,

      ich habe versucht, das Target zu ändern, aber genau da bin ich nicht weiter gekommen :-(

      Ich habe auf Basis von selfhtml die Funktion "Zwei Frames auf einmal ändern" eingesetzt. Es werden also durch F1 und F2 usw. die Frames festgelegt, die beim Klicken auf einen Link geändert werden sollen.

      In meinem Fall ist es so, daß das Navigations-Frame beim Klick auf einen der Navigations-Links geändert wird und der Inhalt des Hauptframe.

      Nun habe ich aber innerhalb der Navigation auch Verweise, die nach draußen zu anderen Webseiten gehen. Hier soll dann zum einen wieder der Navigations-Frame geändert werden und zum anderen soll ein neues Fenster mit der entsprechenden Webseite des Drittanbieters aufgehen (der Hauptframe soll sich aber nicht ändern!).

      Ich habe versucht, für F2 einen anderen Target festzulegen - nämlich, daß statt einem veränderten Hauptframe ein neues Fenster geöffnet wird. Das hat aber in allen Varianten, die ich ausprobiert habe, nicht funktioniert.

      Wenn meine Zeile beispielsweise wie folgt lautet:

      <a href="javascript:ZweiFrames('../../../ie/1024x768/navbar/info2.htm',1,'http://www.neuesFenster.de',2)">Link</a>

      Wo muß ich den Target angeben und wie muß der lauten?

      Folgendes Beispiel hat z.B. nicht funktioniert:
      <a href="javascript:ZweiFrames('../../../ie/1024x768/navbar/info2.htm',1,'http://www.neuesFenster.de',2)" target="_blank">Link</a>

      Da gibt's eine Fehlermeldung. Aber auch andere Varianten waren ebenso erfolglos.

      Vielleicht kann mir nochmal jemand weiterhelfen?

      Wäre wirklich dankbar.

      Gruß
      Chris (weiblich ;-))

      Hi,
      was spricht dagegen auch hier "Zwei Frames auf einmal ändern" zu verwenden und einfach das jeweilige target zu aendern?
      Oder verstehe ich die Frage nicht...?
      Cheers, dm.

      1. Hallo,

        meine Idee:
        Erstelle zuerst einen normalen Link, der die externe Seite in einem
        neuen Fenster öffnet (also mit target=_blank oder ähnlichem).
        Füge dann aber noch einen onClick-Eventhandler zum <a>-Tag hinzu. Was
        das ist, kannst du hier nachlesen:
        http://selfhtml.teamone.de/javascript/sprache/eventhandler.htm (allgemein)
        Und hier:
        http://selfhtml.teamone.de/javascript/sprache/eventhandler.htm#onclick (speziell onClick)

        Der onClick-Event soll dann eine Funktion ähnlich der zweiFrames-Funktion
        von SelfHTML aufrufen, jedoch nur ein Frame -- und zwar eben das Navigations-
        Frame -- ändern.
        Ich hoffe du findest raus wie das geht. Wenn nicht -> fragen!

        Eine andere Möglichkeit dein Problem zu lösen, könnte in der Verwendung
        von window.open bestehen. Hierzu könnte man eine der zweiFrames-Funktion
        ähnliche Funktion erstellen, die statt das zweite Frame zu setzen,
        mit window.open ein neues Fenster mit der übergeben URL erzeugt.
        Aber das kannst ja du entscheiden.

        Chris (weiblich ;-))

        Dachte ich mir fast schon :-)

        Gruß
        Slyh

      2. Morgen,
        Versuch mal das hier in info2.htm einzubauen:

        <head>
        <script language="JavaScript">
        function lfn() {
         auf=window.open("http://www.neuesfenster.de",target="_blank");
        }
        </script>
        </head>
        <body onload="auf ()">
        blablbla...
        </body>

        Chris (weiblich ;-))

        Sowas (weiblich ;-)) immer von Anfang an anfuehren... erhoeht normalerweise die Anzahl der bemuehten Antworten erheblich ;-)))
        Cheers, dm.

        1. Auch Moin!

          <head>
          <script language="JavaScript">
          function lfn() {
          auf=window.open("http://www.neuesfenster.de",target="_blank");

          ^^^^^^^
          Was hat das dort zu suchen? Weg damit! Damit definierst du allerhöchstens eine Variable "target", und irgendeinen Fensternamen, der aus der Zuweisung der Variablen resultiert. Dadurch funktioniert's zwar, aber es tut nicht das, was du meinst.

          Nochmal nachlesen bei http://selfhtml.teamone.de/javascript/objekte/window.htm#open

          - Sven Rautenberg