shadowhunter: Wert in einer Variable von index an Frameset-Seite übergeben

Hallo!
Ich habe ein kleines Problem & könnt ihr mir bitte dabei helfen!

Ich möchte der Wert von einer Variable von der index-Frameset-Seite an eine Frameset-seite übergeben.
In der index Seite wird der Variable den Wert zugewiesen & dieser möchte ich dann auf einer belibigen Seite im Frameset anzeigen lassen.

Ich habe nur folgendes gefunden:
http://aktuell.de.selfhtml.org/artikel/javascript/wertuebergabe/index.htm
Bei dieser Sache kann ich (weiss nicht wie ändern) nur von einer Unterseite des Frameset zum Frameset etwas übergeben.

Es sollte etwa so aussehen:

index.htm:

<script type="text/javascript">
function uebergabe () {
  var übergabe = '<b>Hallo</b>';
  return false;
}
</script>
</head>
<body>
<frameset rows="20%,80%">
  <frame name="frame1" src="frame_inhaltsverzeichnis.htm">
  <frame name="frame2" src="frame_empfänger.htm" onload="uebergabe">
</frameset>

frame_empfänger.htm:

<body>
<script type="text/javascript">
  [variable einlesen von index.htm und ausgeben. Wie???????????]
  document.write(uebergabe);
</script>
</body>

Vielen Dank im Voraus!
Gruss

  1. Hallo,

    Ich möchte der Wert von einer Variable von der index-Frameset-Seite an eine Frameset-seite übergeben.

    lies dir bitte mal den Artikel durch, den du schon gefunden hast. Dort wird das beschrieben, was du suchst: Im Frameset-Dokument wird etwas gespeichert, das dann aus einem Frame-Dokument ausgelesen wird. Der Zugriff vom Frame aufs Frameset erfolgt immer über parent.

    Das Eigentümliche im Artikel ist lediglich, dass sowohl Speicherung als auch Abrufen aus einem Frame heraus erfolgt. Wenn du dir Speichern und Abrufen ansiehst, ist das Schema aber dasselbe und die Variable kann auch genauso gut direkt im Frameset definiert werden, wie du es vorhast.

    <script type="text/javascript">
      [variable einlesen von index.htm und ausgeben. Wie???????????]
      document.write(uebergabe);
    </script>

    parent.übergabe
    Siehe »Beispiel – empfangendes Dokument«.

    Mathias

    1. Danke für die Hilfe!
      Was ich aber noch vergessen sagen habe (vorhin nicht in den Sinn gekommen), dass ich ein Frame in einem Frame drinnen habe. Dummerweise muss ich vom Frame1 (der der zuerst aufgeruft wird) in den Frame2 in einer Seite diese Variable übergeben.
      Zudem muss die Definition der Variable in einer anderen Funktion drinnen sein, welche etwas anderes ausführt.
      Geht dies alles zum Machen?

      Ist dies so?
      index.htm:
      <script type="text/javascript">
       function abcdef() {
         var uebergabe = '<b>Hallo</b>';
         [blalba...................]
       }
      </script>

      empfangen.htm:
      <script type="text/javascript">
        document.write(parent.uebergabe);
      </script>

      Gruss

      1. Hallo,

        Danke für die Hilfe!
        Was ich aber noch vergessen sagen habe (vorhin nicht in den Sinn gekommen), dass ich ein Frame in einem Frame drinnen habe. Dummerweise muss ich vom Frame1 (der der zuerst aufgeruft wird) in den Frame2 in einer Seite diese Variable übergeben.

        Du meinst, es gibt noch ein iframe?

        Von einem Dokument, das in einem iframe dargestellt wird, kommst du ebenfalls über parent zum Dokument, das den iframe enthält.

        Willst du von dem Dokument zum darüberliegenden Frameset, nutzt du wie gesagt ebenso parent.

        Ergibt zweimal parent: Über parent.parent.variableImFrameset sprichst du aus einem Dokument im iframe das Frameset an, das zwei Ebenen darüber liegt.

        Das alles ist im Artikel Zugriff auf verschachtelte Fensterobjekte erklärt.

        Zudem muss die Definition der Variable in einer anderen Funktion drinnen sein, welche etwas anderes ausführt.

        Kein Problem, es muss dann nur eine globale Variable sein.

        Ist dies so?
        index.htm:
        <script type="text/javascript">
        function abcdef() {
           var uebergabe = '<b>Hallo</b>';
           [blalba...................]
        }
        </script>

        empfangen.htm:
        <script type="text/javascript">
          document.write(parent.uebergabe);
        </script>

        Wenn empfangen.htm direkt im Frameset index.htm liegt, stimmt das so.

        Mathias

        1. Danke für die prompte anworten.

          Ich habe 2 Frameset verschachtelt ineinander (kein iFrame, spielt ja aber keine Rolle).
          Jedenfalls habe ich es geschafft, dass etwas ins Dokument geschrieben wird.
          Aber es kommt nur "undefined" in der unterseite des 2. Frames.
          Habe es so gemacht wie du gesagt hast.
          Woran liegt der Fehler, dass die Variable nicht ausgelesen werden kann?

          Gruss

          1. Hallo,

            Ich habe 2 Frameset verschachtelt ineinander (kein iFrame, spielt ja aber keine Rolle).

            parent.parent.variable oder einfach top.variable müsste dich auch in dem Fall vom Frame-Dokument zum äußersten Frameset bringen.

            Woran liegt der Fehler, dass die Variable nicht ausgelesen werden kann?

            Das kann man nur mutmaßen, ohne den Code zu sehen...

            Mathias

            1. Also:

              Frame1 - index.htm:

              <script type="text/javascript">
              <!--
               function checkFramecall() {
                var Adressanhang=location.search;
                if(Adressanhang) {
                 var uebergabe = 'asdf';
               frames.mainFrame.location.href=Adressanhang.substring(1,Adressanhang.length);
                }
               }
              //-->
              </script>
              </head>
              <frameset rows="*" cols="252,*" frameborder="NO" border="0" framespacing="0" onLoad="checkFramecall()">
              ................

              Frame 2 (verschachtelt in Frame 1) - Unterseite rechts - empfangen.htm:
              <script type="text/javascript">
              <!--
                document.write(top.uebergabe);
              //-->
              </script>

              Siehst du noch irgendwo einen Fehler?
              Ansonst kannst mal diese URL starten: www.fotogalerie.scluzern.com
              Dann siehst du kurz auf der ersten Seite rechts oben "undefined" (oberhalb des grossen Bildes)...
              Danke!
              Gruss

              1. Hallo,
                Ist alles gut. Habe eine ersatzlösung gefunden:

                <script type="text/javascript">
                <!--
                  var data = top.uebergabe
                  if (data != "") {
                    document.write('Hallo');
                  }
                  top.uebergabe = '';
                //-->
                </script>

                Mit dieser kann ich leben.
                100000x Danke für deine Hilfe!!
                Gruss

              2. Hallo,

                function checkFramecall() {
                  var Adressanhang=location.search;
                  if(Adressanhang) {
                   var uebergabe = 'asdf';

                Mit var definierte Variablen sind lokal, nicht global, und können von außerhalb der Funktion nicht gelesen werden. Sie verfallen nach Ausführen der Funktion Also müsstest du das »var« weglassen.

                Mathias

                1. Danke!
                  Aber es geht leider trotzdem ohne var nicht.

                  1. Hallo,

                    Aber es geht leider trotzdem ohne var nicht.

                    Also ich sehe beim Aufruf von www.fotogalerie.scluzern.com die gewünschte Ausgabe »Bitte kurz warten! Du wirst in Kürze weitergeleitet«, also funktioniert die Abfrage doch anscheinend.

                    Mathias

                    1. Habe es mit dieser Ersatzlösung gemacht (bereits gepostet):
                      http://forum.de.selfhtml.org/?t=164725&m=1073926
                      aber als übergabewert wird immer noch "undefined" übertragen.
                      Aber wie gesagt, ich kann so damit leben.
                      Danke für deine Hilfe.
                      Gruss

                      1. Upsss diese Ersatzlösung geht nicht immer.
                        Somit kann ich sie nicht gebrauchen.
                        Zurück zu meinem Problem.
                        Was kann ich noch verändern, dass es so funktioniert wie es sollte (ohne undefined?
                        Danke Gruss

                        1. Hallo,

                          Was kann ich noch verändern, dass es so funktioniert wie es sollte (ohne undefined?

                          Du führst die Abfrage checkFramecall() erst dann aus, wenn ALLE Seiten des Framesets fertig geladen sind (onload).

                          Das heißt auch, die Abfrage und somit die Zuweisung uebergabe = "1" wird ausgeführt, NACHDEM du in hauptseite1.htm abgefragt hast, ob top.uebergabe einen anderen Wert als "" hat.

                          top.uebergabe wird aber erst ein checkFramecall() gesetzt, vorher ist es leer.

                          Klar, dass es nicht gefüllt ist, bevor es gefüllt wird. ;)

                          Also rufe checkFramecall einfach sofort nach dessen Definition auf und schmeiß onLoad="checkFramecall()" heraus. Du musst nicht warten, bis alle Dokumente des Framesets geladen sind. Die Abfrage, ob etwas in location.search steht und die Zuweisung an das Mainframe funktionieren auch ohne, dass alle Dokumente geladen sein müssen.

                          Mathias

                          1. Kleine Ergänzung:

                            Warum zum Henker machst du dir es derart kompliziert? - Mehrere verschachtelte Framesets, Verlinkungs-Schwierigkeiten, Frame-Nachlade-Funktionen... Solche Probleme kommen nicht von ungefähr. Wegen solchen Umständlichkeiten steigen viele auf framelose Seiten um. Das solltest du auf Dauer auch überdenken. Deine Seite scheint mir trotz hochkomplexer Framesets nicht unbedingt übersichtlicher und navigierbarer.

                            Mathias

                            1. Ja das ist mir schon klar & wollte ich schon immer einmal.
                              Nur der Wechsel es für mich komliziert, da ich keine geeignete Variante kennte. Zudem braucht dies viel Zeit, welche ich momentan habe.
                              Das 2. Frame wird nur am Anfang der Seite gebraucht. Sonst nachher meistens nicht mehr.
                              Gruss

                              1. Hi,

                                Ja das ist mir schon klar & wollte ich schon immer einmal.
                                Nur der Wechsel es für mich komliziert, da ich keine geeignete Variante kennte. Zudem braucht dies viel Zeit, welche ich momentan

                                "... lieber auf aufwendige Javascript-Workarounds verwende, die ohne Frame-Gewurschtel gar nicht erst notwendig geworden waeren"?

                                MfG ChrisB

                                1. Hallo!
                                  Ist ja nur eine Übergangslösung. Es funktioniert jetzt mit Java so wie ich wollte.
                                  Wie könnte mir den Wechsel einfach machen?
                                  Was wäre die beste Alternative zu den Frames? php? wie müsste ich dann dies umprogrammieren? Oder andere Lösungen?
                                  Gruss

                          2. Das wäre ja eigentlich logisch ;)!
                            Aber wenn ich den onLoad="checkFramecall()" rausschmeisse, dann wird aber die Variable richtig übergeben, aber wird die Seite nicht mer weitergeleitet resp. die Seite "frames.mainFrame.location.href=Adressanhang.substring(1,Adressanhang.length);" wird nicht "aufgeruft".

                            Wie kann ich den Befehl "checkFramecall()" direkt am Anfang ausführen, sodass die Seite sofort geladen wird.

                            Dies funktioniert so nicht (oben beschrieben):
                            <script type="text/javascript">
                            <!--
                             top.uebergabe = "";
                             checkFramecall();
                             function checkFramecall() {
                              var Adressanhang=location.search;
                              if(Adressanhang) {
                               top.uebergabe = "yes";
                               frames.mainFrame.location.href=Adressanhang.substring(1,Adressanhang.length);
                              }
                             }
                            //-->
                            </script>

                            Danke dir!

                            1. Hallo,

                              Aber wenn ich den onLoad="checkFramecall()" rausschmeisse, dann wird aber die Variable richtig übergeben, aber wird die Seite nicht mer weitergeleitet resp. die Seite "frames.mainFrame.location.href=Adressanhang.substring(1,Adressanhang.length);" wird nicht "aufgeruft".

                              Oh, stimmt. Das hatte ich nicht bedacht. Wie das Frameset aufgebaut ist, ist dem Script natürlich erst bekannt, nachdem die frameset-Elemente geparst wurden...

                              Du kannst das Script mal nach dem <frameset ...>...</frameset> notieren. Das ist zwar nicht wirklich standardkonform, könnte aber funktionieren.

                              Mathias

                              1. Hallo,

                                Du kannst das Script mal nach dem <frameset ...>...</frameset> notieren. Das ist zwar nicht wirklich standardkonform, könnte aber funktionieren.

                                Vergiss das. Das ist nicht nur nicht standardkonform, sondern wird von den Browsern auch ignoriert. Also machen wir das so:

                                <script type="text/javascript">  
                                [code lang=javascript]var Adressanhang = location.search;  
                                if (Adressanhang) {  
                                 uebergabe = "1";  
                                 window.onload = function () {  
                                  frames.mainFrame.location.href = Adressanhang.substring(1, Adressanhang.length);  
                                 };  
                                }
                                

                                </script>[/code]

                                Das kann dann wie üblich in den <head>...</head>.

                                Wir setzen die Variable auf jeden Fall sofort, die Umleitung wird aber erst aktiv, wenn das Frameset geladen ist.

                                Schwere Geburt...

                                Mathias

                                1. Guten Abend!
                                  Ich danke dir vielmals für deine Hilfe!!
                                  Es funktioniert super! Merci.
                                  Grüsse