Alexandra: und nochmals Frames... verschachtelte nachladen

Hallo erstmal.

(Vorgeschichte)
Ja ich weiss, bin ein Schwerverbrecher und arbeite noch mit Frames. Ehrlich gesagt währe mir CSS schon lieber, aber nach langen Nächten und Tagen steht die Homepage dann. Nochmals von neuem.. nein Danke, vielleicht später.
(Ende)

Ich steck sogar ganz tief drin und habe ohne an konsequenzen zu denken
ein Frameset mit einem neuem Frameset als Frame..

Gerne würde ich die einzelnen Frames des 2.Framesets nachladen.
Das 2.Frameset ist das Hauptframe des 1.Framesets.

Dann muss ich aber mein 2. Frameset als Seite vom 1.Frameset wie auch als Frameset für die Dateien im 2.Frameset definieren???

Ich weiss nicht einfach, aber interessant allemal...

Ausschnitt Framedefinition im 1.Frameset fürs 2.Frameset:
<frame src="hauptset-1.htm" name="mitte">

Folgenden Code hab ich fürs Hauptset(2.Frameset)im Head:
<SCRIPT language="JavaScript">
<!--
 function checkFramecall() {
  var Adressanhang=location.search;
  if(Adressanhang)
  frames.topFrame.location.href=Adressanhang.substring(1,Adressanhang.length);
 }
//-->
</SCRIPT>

Auf jede Seite kommt:
<SCRIPT language="JavaScript">
<!--
 function checkFrameset() {
  if(!parent.mainFrame2)
   location.href="http://www.xyz.de/Neu/Start/index.htm?" + location.pathname;
 }
//-->
</SCRIPT>
</head>
<body onLoad='checkFrameset()'>

Wie kann ich einem Frameset sagen dass es als Frameset für die untergeordneten Seiten und zugleich
als Seite im 1.Frameset reagieren soll.

Danke für Tat und Rat.
Alexandra G.

  1. Hi Alexandra!

    Wie kann ich einem Frameset sagen dass es als Frameset für die untergeordneten Seiten und zugleich
    als Seite im 1.Frameset reagieren soll.

    Indem du zwei unterschiedliche Dateien nutzt?

    Ich verstehe ehrlich gesagt nicht, worauf du hinauswillst. Ein Link zum besseren Verständnis wäre sicher hilf- und aufschlussreich.

    MfG Hopsel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  2. Hallo,

    ich versteh ehrlich gesagt nicht ganz, was eigentlich Dein Problem ist ???

    Ich weiss nicht einfach, aber interessant allemal...

    wenn ich verstünde um was es ganeu geht schon evtl. ;-)

    Ausschnitt Framedefinition im 1.Frameset fürs 2.Frameset:
    <frame src="hauptset-1.htm" name="mitte">

    ... und im hauptset-1.htm ist nochmal ein frameset, oder?

    Folgenden Code hab ich fürs Hauptset(2.Frameset)im Head:
    <SCRIPT language="JavaScript">
    <!--
    function checkFramecall() {
      var Adressanhang=location.search;
      if(Adressanhang)
      frames.topFrame.location.href=Adressanhang.substring(1,Adressanhang.length);
    }
    //-->
    </SCRIPT>

    Auf jede Seite kommt:
    <SCRIPT language="JavaScript">
    <!--
    function checkFrameset() {
      if(!parent.mainFrame2)
       location.href="http://www.xyz.de/Neu/Start/index.htm?" + location.pathname;
    }
    //-->
    </SCRIPT>
    </head>
    <body onLoad='checkFrameset()'>

    Soweit ich das jetzt sehe, hast Du da ja das Problem, dass Dir nicht die komplette Seite nachgeladen wird, sondern nur das Frameset:"hauptset-1.htm" - ist das worauf Du mit Deiner Frage hinaus willst?

    Probier doch einfach mal folgendes:
    statt if(!parent.mainFrame2)
    prüfst Du auf:
    if(!top.mitte)
    Dann kannst Du in Deine Hauptseite was einbauen, dass er an mainFrame2 den Teilstring mit der Ardesse übergibt. Das Problem könnte dabei aber sein, dass dieses Script in der Hauptseite bereits ausgeführt wird, ehe der Frame geladen ist und dann würde er die Adresse zum nachladen ins Nivana übergeben. Deshalb brauchst Du evtl. eine Intervallschleife die prüft, ob mainFrame2 geladen ist und erst dann die Adresse übergibt.

    Wie kann ich einem Frameset sagen dass es als Frameset für die untergeordneten Seiten und zugleich
    als Seite im 1.Frameset reagieren soll.

    Das brauchst Du doch gar nicht extra sagen, denn wenn Du die übergeordneten Frames lädst, rufen die die untergeordneten ja ohnehin auf.

    viele Grüße

    Michael

    1. Hallo und Danke Michael.

      ich versteh ehrlich gesagt nicht ganz, was eigentlich Dein Problem ist ???

      Ok, mein Fehler, stecke widermal zutief drin.

      Also dass die ganze Seite(mit allen Frames)angezeigt wird
      wenn auch nur eine einzelne Seite durch den Browser aufgerufen wird.
      Das Pikante daran, dass das einbauen der Scriptbefehle kompliziert wird da ich verschachtelte Framesets nutze.

      Ausschnitt Framedefinition im 1.Frameset fürs 2.Frameset:
      <frame src="hauptset-1.htm" name="mitte">

      ... und im hauptset-1.htm ist nochmal ein frameset, oder?

      Das hauptset-1.htm ist ein Frameset, genau, das 2.

      Folgenden Code hab ich fürs Hauptset(2.Frameset)im Head:
      <SCRIPT language="JavaScript">
      <!--
      function checkFramecall() {
        var Adressanhang=location.search;
        if(Adressanhang)
        frames.topFrame.location.href=Adressanhang.substring(1,Adressanhang.length);
      }
      //-->
      </SCRIPT>

      Auf jede Seite kommt:
      <SCRIPT language="JavaScript">
      <!--
      function checkFrameset() {
        if(!parent.mainFrame2)
         location.href="http://www.xyz.de/Neu/Start/index.htm?" + location.pathname;
      }
      //-->
      </SCRIPT>
      </head>
      <body onLoad='checkFrameset()'>

      Soweit ich das jetzt sehe, hast Du da ja das Problem, dass Dir nicht die komplette Seite nachgeladen wird, sondern nur das Frameset:"hauptset-1.htm" - ist das worauf Du mit Deiner Frage hinaus willst?

      Ungefähr, reagiert garnicht im moment..
      aber erlich gesagt glaub ich dass ich den JS Code
      irgendwie falsch einsetzte, wie geht das bei verschachtelten Framesets?

      Probier doch einfach mal folgendes:
      statt if(!parent.mainFrame2)
      prüfst Du auf:
      if(!top.mitte)

      Ok, aber mitte ist doch nur das 2.Frameset im 1.Frameset,
      JS ist nicht mein ding... Probiere es aus, aber wo?
      Kommt dass jetzt bei Index oder hauptset-1 ???
      Wahrscheinlich meinst du im hauptset-1..
      was kommt dann ins index-Frameset?

      Dann kannst Du in Deine Hauptseite was einbauen, dass er an mainFrame2 den Teilstring mit der Ardesse übergibt. Das Problem könnte dabei aber sein, dass dieses Script in der Hauptseite bereits ausgeführt wird, ehe der Frame geladen ist und dann würde er die Adresse zum nachladen ins Nivana übergeben. Deshalb brauchst Du evtl. eine Intervallschleife die prüft, ob mainFrame2 geladen ist und erst dann die Adresse übergibt.

      Ups, bei meine versuchen hatte ich duch mal diesen Nirvaneffekt.
      Aber es kam das 1.Frameset innerhalb des 2.Frameset, also verkehrt.

      Wie kann ich einem Frameset sagen dass es als Frameset für die untergeordneten Seiten und zugleich
      als Seite im 1.Frameset reagieren soll.

      Das brauchst Du doch gar nicht extra sagen, denn wenn Du die übergeordneten Frames lädst, rufen die die untergeordneten ja ohnehin auf.

      Ja schon, brauch denn nur den Jscode fürs frameset ins 1.Frameset (index) und nicht im verschachtelten 2.Framest(hauptset-1)? kommt da der JScode für Seite

      Werde ich CSS schneller lernen als dieses Problem zu lösen :-)

      Nochmals Danke Michael für deine Mühe
      Bis Bald
      Alex

      1. Ich bins, Alex

        Klene Frage; was soll hier genau rein bei topFrame?
        Ein Frame das immer vorhanden ist? z.B. Navigation?

        frames.topFrame.location.href=Adressanhang.substring(1,Adressanhang.length);

        if(!parent.mainFrame2)
        Heisst das: wenn die geöffnete Seite das mainFrame2 ist?

        Kommt bei diesem Jscode jedesmal wasanderes jenachdem auf welcher Seite der code kommt?

        Das Ganze ist mir irgendwie zu verschachtelt, wie soll ich damit umgehen, theoretisch. Welches Frameset zählt? alle? Index?
        Und kommt auf alle seiten der genau selbe JSCode? auch auf den Seiten der verschachtelten frames?

        Tief durchatmen.. und los  :-)

        Tschüss

      2. Hi Alex,

        Werde ich CSS schneller lernen als dieses Problem zu lösen :-)

        ???
        Weis nicht ;-)
        Weis nur, dass man beides nicht mal schnell ebenso nebenbei lernen kann ;-)
        Die ersten 90% lernt man bei beiden ziemlich schnell, nur die anderen 90% dauern dann ;-)

        Aber jetzt mal zu Deinen ernsteren Fragen...
        Ich hab leider ein wenig den durchblick verloren, was wo wie welche Frames sind, deshalb versuch ichs mal lieber ganz allgemein zu erklären.

        Ersteinmal dazu, wie diese JS-Funktionen funktionieren:

        function checkFrameset() {
          if(!parent.mainFrame2)
           location.href="http://www.xyz.de/Neu/Start/index.htm?" + location.pathname;
        }

        Hier wird geprüft, ob es in der Seite die geladen wurde ein bestimmtes Objekt gibt, nämlich "parent.mainFrame2".

        "parent" gibt dabei an, dass dieses Objekt im direkt übergeordneten Element (Frame) zu finden ist. ("top" würde im gegensatz dazu immer das aller oberste Objekt der Hierarchie ansprechen).
        "mainFrame2" ist der Name des Objektes, das es dort geben soll.
        (Aus JS-Sicht ist der Frame "mainFrame2" ein Objekt, das Du über seinen Namen, also eben "mainFrame2" ansprechen kannst.)

        if(!parent.mainFrame2) bedeutet also: "falls es das Objekt mainFrame2 im übergeordneten Objekt (Frame) nicht gibt, dann..."
        (wobei damit gleich zwei Bedingungen geprütf werden:
        1. gibt es überhaupt ein übergeordnetes Objekt
        2. enthält dieses wiederum ein Objekt "mainFrame2")
        ... mach folgendes:

        location.href="http://www.xyz.de/Neu/Start/index.htm?" + location.pathname;

        "ändere die Adresse (URL) in "http://www.xyz.de/Neu/Start/index.htm?" und hänge daran (+) den Pfad der aktuellen Adresse (also den relativen Weg zur aktuellen Seite von der eigentlichen Adresse aus zb www.adresse.de/pfad/weg/einFrame.html --> Adresse = www.adresse.de/ und Pfad = pfad/weg/einFrame.html)")

        Damit wird dann also was neues im Browser geladen, nämlich die angegebene Adresse ("http://www.xyz.de/Neu/Start/index.htm") und daran angehängt steht in der Adresszeile der neu geladenen Seite der Anhang mit "?" und dem "Pfad".

        In dieser Seite die nun geladen wurde steht dann der zweite Teil des Skripts:

        function checkFramecall() {
          var Adressanhang=location.search;
          if(Adressanhang)
          frames.topFrame.location.href=Adressanhang.substring(1,Adressanhang.length);
        }

        Dieser sorgt nun dafür, dass der der Frame, der zuvor (einzeln) geladen war nun als Frame in dem Frameset (an eine bestimmte "Stelle") geladen wird, was so funktioniert:
        In die Variable Adressanhang wird ein String gespeichert, der den Pfad zu dem Frame enthält. Dieser String ergibt sich aus dem, was in der Adresszeile mit "?" angehängt ist (also den relativen Pfad zum Frame).

        if(Adressanhang) prüft lediglich, ob es den Adressanhang überhaupt gibt (da es ja sonst unsinnig wäre, weiterzumachen).

        Nun wird der Adressanhang an den gewünschten Frame (Objekt) übergeben.
        (Jedes (Frame)Objekt hat von Haus aus einige Eigenschaften. Darunter die Eigenschaft "Adresse" (location), die geändert werden kann. (Und eine Eigenschaft Name, mit dem man das Objekt ansprechen kann)).

        "frames.topFrame.location.href" spricht also die Adresseigenschaft des Objektes "topFrame" an.
        Diese wird nun geändert ("=" bzw. neu zugewiesen). Dabei wird der String der String der in der Variablen Adressanhang gespeichert wird zugewiesen.
        Allerdings nicht der ganze, sondern nur ein bestimmter Teil davon (substring). Und zwar der Teil vom zweiten Zeichen ("1") bis zum letzten (Adressanhang.length).
        "1" ist das zweite Zeichen, weil die Zeichen mit 0 beginnend gezählt werden.
        Adressanhang.length ist das letzte Zeichen, weil es als Ergebis die Länge des Strings liefert und damit die Nummer des letzten Zeichens.

        Einfach gesagt wurde also das erste Zeichen des Strings abgeschnitten und dieses erste Zeichen war das "?", das bei var Adressanhang = location.search im String mit abgespeichert wurde.

        Wenn Du das nun verstanden hast, wie es  funktioniert, kannst Du damit beliebige Frames in Deine Hauptseite oder das darunterliegende Haupt-Frameset laden lassen.

        Ob und wie Du das genau machen musst, kann ich Dir pauschal nicht beantworten. Das hängt davon ab, welche Frames wann geladen werden sollen und ob sich abhängig von dem Frame mit dem eigentlichen Content noch andere Frames ändern sollen (zb wenn Content-Frame X geladen ist, dass dann der Navigationsframe Y statt Z geladen werden soll). Wenn das so ist, prüfst Du am besten vom Content-Frame aus, ob es top.einenFrameDerDenContentFrameEnthält gibt und übergibst dann von top aus den Pfad für den Content Frame. Den sprichst Du von dieser "top"-Seite (also der eigentlichen index.html) aus dann der Hierarchie entsprechend mit seinem Namen an.
        Also zb.
        frames.EinUnterFrame.NochEinUnterFrame.DerContentFrame
        (Denn wenn die index.html geladen wurde, wurden mit ihr ja alle SubFrames geladen (nur eben evtl. nicht die richtigen)).
        Sollen sich nun abhängig vom ContentFrame auch andere Frames ändern, gibt es dazu verschiedene Möglichkeiten. Am einfachsten aber Schreibaufwendigsten ist, wenn Du in der index.html mit einer Fallunterscheidung prüfst, ob wenn ContentFrame X geladen ist auch NaviFrame Y geladen ist das sieht dann in JS so aus:
        if ( ! ( (ContentFrame.location.href == "http://www.abc.de/abc/contentX.html") && (NaviFrame.location.href == "http://www.abc.de/xyz/naviY.html")))
        {
        NaviFrame.location.href = http://www.abc.de/xyz/naviY.html;
        }

        Hoffe, das hilft Dir ein bisschen weiter.

        PS: falls Du noch Fragen hast, die darauf hinauslaufen, wie nun welcher hauptframe1, mitte, MainFrame2 usw. sein soll, dann musst Du mir dazu bitte einen Link zu der Seite posten (oder mailen), weil ich da leider den Überblick verloren habe ;-)

        Viel Spaß beim JS lernen und üben und noch ein kleiner Tipp:
        Mit alert(frames.einFrame.location.href) oder ähnlich kannst Du immer schnell und einfach prüfen, was wo wie gerade ist oder sein soll.

        Viele Grüße

        Michael