Bommel: OnTheFly

Hallo,
ich habe keine Idee für folgendes Problem (nur IE5+):

Ich erzeuge per javascript 3 Fenster: name= F1,F2 bzw. F3.

F1 hat onthefly ein frameset aus 2 Frames (name=A bzw B) erhalten.

F2 und F3 haben Inhalte onthefly erhalten.

F2 und F3 wurden vor F1 erzeugt.
Soweit klappt es.

Wie komme ich den Inhalt von F2 in Frame A bzw. F3 in Frame B? Wie muss ich im Frameset von F1 bei scr="" die Quellen F2 und F3 angeben?

Wie gesagt: die Inhalte von F2 und F3 stammen nicht aus Dateien sondern wurden onthefly geschrieben (ansonsten wäre es kein Problem).

Gruss
Bommel

  1. hi,

    Wie komme ich den Inhalt von F2 in Frame A bzw. F3 in Frame B?

    pack sie in Variablen

    Wie muss ich im Frameset von F1 bei scr="" die Quellen F2 und F3 angeben?

    du gibst den Variablennamen an

    Grüße

    Christoph S.

    1. @ Christoph,

      schon richig. Aber bei scr="" kann man keine Variable angeben.

      ich habe es im Prinzip jetzt so gemacht.
      var y ="&quot";
      var x ="<BODY  bgcolor="+y+"#FAEBD7"+y+">Text</body>";
      parent.a.location.href= "javascript: document.writeln(x)";

      Der Inhalt von x wird in frame A geschrieben.

      Trotzdem danke euch beiden.

      Gruss

      Bommel (der Wahre)

      1. hi,

        schon richig. Aber bei scr="" kann man keine Variable angeben.

        bei scr="?" wirklich nicht, aber bei src="?" kann man durchaus

        ich habe es im Prinzip jetzt so gemacht.
        var y ="&quot";
        var x ="<BODY  bgcolor="+y+"#FAEBD7"+y+">Text</body>";
        parent.a.location.href= "javascript: document.writeln(x)";

        korrekt, nur: was ist denn "x" anderes als eine Variable?

        Grüße

        Christoph S.

        1. Hallo Christoph,

          "scr" war bei mir ein Tippfehler. Ich meinte schon source. Nach der Dok sind nur URI erlaubt, also keine Variablen.

          Die obige Technik funktioniert nur, wenn sie in einer Datei steht, die vorher im Frameset geladen war. Bei einen Fenster (hier F2 und F3),dass onthefly erzeugt und gefüllt wurde, funktioniert es nicht.

          Wie soll ich den Frame ansprechen? In F2 habe ich für Testzwecke einen einfachen Link
          <a href="#" onClick="javascript:var x ='Test'; F1.a.location.replace(x)">Testlink</a>
          eingebaut
          Ich habe schon alle möglichen Kombinationen zur Adressierung von Frame A versucht, ohne Erfolg.

          Wo ist mein Denkfehler?

          Wozu ich das brauche? In einem bestimmten Forum sind HMTL-Tags erlaubt. Ich will jetzt durch das Forum hindurch eine eigene Seite erzeugen, die Frames enthält. Das klappt auch. Nur bekomme ich keine Inhalt in die Frames, die keine Dateien sind. Inhalte onthefly auf einfache Seiten zu bekommen, ist kein Problem.

          Gruss
          Bommel

          1. Hallo Bommel,

            Wozu ich das brauche? In einem bestimmten Forum sind HMTL-Tags erlaubt. Ich will jetzt durch das Forum hindurch eine eigene Seite erzeugen, die Frames enthält. Das klappt auch. Nur bekomme ich keine Inhalt in die Frames, die keine Dateien sind. Inhalte onthefly auf einfache Seiten zu bekommen, ist kein Problem.

            Beim Erzeugen des Framesets im Fenster F1 gibst du einfach eine leere Source an: <frame name="a" src="">.

            Und den Inhalt schreibst du dann mit:

            with(F1.a.document)
            {
             open();
             write("<html><body>content Frame a</body></html>");
             close();
            }

            Grüße, Stefan

            1. Hallo Stefan,

              ich bekomme das nicht hin, mit der frame-Adressierung.
              So weit war ich:
              <form name="Fo">
              <button name="K"  onClick="var neu=window.open('','F1', 'height=400,width=600,toolbar=yes,menubar=yes');var a='&quot';var s='ertgzhu';var c= neu.document;c.write('<html><head><title>Bommels</title>');c.write('</head><frameset rows='+a+'65,*'+a+'  name='+a+'haupt'+a+' border=0 frameborder=0 framespacing=0 noresize><frame src='+a+a+' target='+a+'self'+a+' name='+a+'a'+a+' marginheigth=0  border=0 frameborder=0 framespacing=0 noresize ><frame name='+a+'B'+a+' src='+a+'t1.htm'+a+' target='+a+'_self'+a+' scrolling='+a+'auto'+a+' noresize></html>');var n1=window.open('','F2', 'height=100,width=600'); var nd=n1.document; nd.write('<hmtl><b>Ich komme aus Fenster 2');nd.writeln('<SCRIPT  LANGUAGE= '+a+'JavaScript'+a+'>');nd.writeln('<!--');nd.writeln('');nd.writeln('//--> ');nd.writeln('</SCRIPT>');nd.writeln('<a href= '+a+'#'+a+' onClick='+a+'javascript:var gx= 'Text';alert(gx);F1.a.document.open();alert(gx); F1.a.document.write(gx);F1.a.document.close();alert(gx); '+a+'>rrr</a>');nd.writeln('</hmtl>');">Test</form>

              (Sind ein haufen zeilen scheinar sinnlos drin. Sind nur Überbleibsel vom Testen. Zeilenumbrüche dürfen nicht eingefügt werden, sonst läuft es nicht)
              In Fenster 2 wird das Script nur bis zur ersten Alert-Box ausgeführt. Dann nicht mehr. Alles ohne Fehlermeldung.

              Gruss
              Bommel

              1. Hallo Bommel,

                was mir an deinem Code aufgefallen ist:

                • var neu=window.open('','F1'); Ein so geöffnetes Fenster läßt sich nur mit "neu" ansprechen und nicht mit "F1".

                • Statt var a='&quot'; (Semikolon fehlt!) ist es eigentlich üblich, "maskierte" Anführungszeichen zu nehmen: ' und "

                • Die Slashes in den End-Tags sollten auch maskiert werden, also z.B. "</script>" (häufige Fehlerquelle).

                • Beim dynamischen Schreiben von Scripts machen die Kommentare <!-- und //--> natürlich keinen Sinn :-)

                Was das mit deinem Fenster2 soll, hab' ich allerdings nicht verstanden. Wenn dessen Inhalt in einen Frame von Fenster1 geschrieben werden soll, könntest du diesen Inhalt doch gleich in den Frame schreiben. Ich gehe mal davon aus, dass du nur ein Fenster mit zwei Frames möchtest.

                Folgendes öffnet ein Fenster mit Frameset, vielleicht kannst du das ja anpassen:

                <button onclick="F1=open('about:blank','','height=400,width=600,toolbar,menubar');with(F1.document){open();write('<html><frameset rows='65,*'><frame name=a><frame name=b></frameset></html>');close();}with(F1.a.document){open();write('<html><body>Inhalt Frame a</body></html>');close();}with(F1.b.document){open();write('<html><body>Inhalt Frame b</body></html>');close();}">Frameset schreiben</button>

                Grüße, Stefan

                1. Hallo Stefan,

                  dein Script ist DIE Lösung. Der Fensterhandle ist also in der Variabeln ablegt und nicht im Namen (bei open()). Du hattest auch gleich bemerkt, dass die Sache mit dem 2 Fenster nur eine Hilfskonstruktion sein sollte und (eigentlich) keine Sinn macht, wenn man vom Ziel ausgeht.
                  Danke.

                  Hallo Christoph,
                  schau die mal Stefans Script an. Mit F1 und F2 bei open() als Name (und nicht als Variable) kann es nicht funktionieren, wie ich gerade gelernt habe.
                  Trotzdem auch Danke für den Versuch.

                  Gruss
                  Bommel

              2. hi Bommel,

                (Sind ein haufen zeilen scheinar sinnlos drin. Sind nur Überbleibsel vom Testen. Zeilenumbrüche dürfen nicht eingefügt werden, sonst läuft es nicht)

                doch, man kann (und sollte) das etwas anders schreiben

                In Fenster 2 wird das Script nur bis zur ersten Alert-Box ausgeführt. Dann nicht mehr. Alles ohne Fehlermeldung.

                du hättest dir das mal in Netscape/mozilla anschauen sollen, der zeigt dir, wo dein Code die entsprechenden Fehler hat.

                Ich habs dir mal neu geschrieben, funktioniert so in IE und Netscape/mozilla:

                <html><head>
                <script type="text/javascript">
                function fenster (){
                var neu = window.open('','F1', 'height=400,width=600,toolbar=yes,menubar=yes');
                var a = '&quot';
                var s = 'ertgzhu';
                var c = neu.document;

                c.write('<html><head><title>Bommels</title>');
                c.write('</head><frameset rows='+a+'65,*'+a+'  name='+a+'haupt'+a+' border=0 frameborder=0 framespacing=0 noresize>');
                c.write('<frame src='+a+a+' target='+a+'self'+a+' name='+a+'a'+a+' marginheigth=0  border=0 frameborder=0 framespacing=0 noresize >');
                c.write('<frame name='+a+'B'+a+' src='+a+'t1.htm'+a+' target='+a+'_self'+a+' scrolling='+a+'auto'+a+' noresize>');
                c.write('</frameset></html>');

                var n1 = window.open('','F2', 'height=100,width=600');
                var nd = n1.document;

                nd.write('<b>Ich komme woandersher</b>');
                nd.writeln('<a href= '+a+'#'+a+' onClick = '+a+'javascript:');
                var gx = Text;
                alert(gx);
                F1.a.document.open();
                alert(gx);
                F1.a.document.write(gx);
                F1.a.document.close();alert(gx);
                nd.writeln(''+a+'>rrr</a>');
                }
                </script>
                </head>
                <body>
                <form name="Fo">
                <button name="K" onClick="javascript:fenster();">Test</form>
                </body>
                </html>

                Christoph S.

  2. Hallo Bommel
    vielleicht hilft dir dazu ja auch das:
    http://selfhtml.teamone.de/javascript/objekte/frames.htm#scripts

    cu.Lukas