Markus Dippold: Nach Redirect bestimmtes Dok. im Frame des Top-Fensters anzeigen

Hi,

folgendes möchte ich machen:
ich bin auf der Seite a.html (diese ist beliebig), die eigentlich ein Dokument eines Frames ist.
Nun macht a.html einen Redirect auf die index.html, die Frames hat.
Weiter möchte ich die Datei a.html in einem Frame der index.html anzeigen lassen.

Problem:
Es funktioniert nur, wenn ich zwischen dem Redirect und dem Aufruf eine Kunstpause einlege.

Die Funktion habe ich in dem File, in dem alle Javascripte enthalten sind.
function xyz(Ziel)
{
top.location.href = '../index.html'; //erstmal für lokalen Test
alert(top.location.href);
top.frames[2].location.href = 'startrek/' + Ziel;
}

Der Alert gibt aber in diesem Fall noch "a.html" (plus Pfad) aus und ich vermute, daß das ganze ohne den Alert so schnell abgearbeitet wird, daß die Frames noch nicht bekannt sind. Bis ich den Alert aber weggeklickt habe, ist die index.html geladen und es wird dann in dem richtigen Frame die Datei a.html angezeigt.

Ein Alert ist aber dumm. Mit window.setTimeout() geht es nicht. Ich habe schon probiert, den href auf den Frame in einer neuen Funktion aufzurufen. Ich vermute mal, daß die Timeout-Funktion mit Verlassen von a.html verworfen wird.
While und sowas geht auch nicht, da steht der Browser mehr oder weniger und lädt nichtmal die index.html, bis die Abbruchbedingung erreicht ist.

Wie bekomme ich jetzt eine Kunstpause da rein, daß es doch geht?
Oder ist eine andere Lösung sinnvoll?
Ich habe schon überlegt, der index.html beim Redirect einen Parameter mitzugeben (index.html?sub=a.html), und das dann in der im onLoad aufgerufenen Funktion auswerte. Aber ich finde einfach nichts, wie das genau funktioniert (die Paramterübergabe und das Auslesen). Wie kann ich da dann die Argumente auslesen?

Ich hoffe, daß mir irgendjemand hier einen Tip geben kann.

mfG,
Markus

  1. Hallo Markus,

    onLoad() wird erst ausgelöst, wenn die seite geladen ist.

    freundl. Grüße aus Berlin, Raik

    1. Hallo Markus,

      onLoad() wird erst ausgelöst, wenn die seite geladen ist.

      Hallo Raik,

      das weiß ich. Die Frage ist, wie sage ich der Seite, welche Unterseite sie dann im Frame aufrufen soll.
      Die Parameterübergabe erfolgt wohl mit xyz.htm?Wert=irgendwas.html beim Redirect.
      Aber wie werte ich nun das "Wert=irgendwas.html" in der Datei xyz.html aus?
      Daß die Funktion, die dann das "Wert=irgendwas.html" bekommt, erst dann ausgeführt wird, wenn die Seite xyz.html komplett geladen ist, ist mir ja nur recht.

      Gruß,
      Markus

      1. Hallo Markus,

        was du suchst ist die "search"-Eigenschaft des "location"-Objektes:
        http://selfhtml.teamone.de/javascript/objekte/location.htm#search

        Aus deinem ersten Eintrag:

        function xyz(Ziel)
        {
        top.location.href = '../index.html'; //erstmal für lokalen Test

        wenn das ausgeführt ist, gibts dein Fenster mit der Funktion drin nicht mehr, dann gibts die Funktion also auch nicht mehr und der Rest kann nicht mehr ausgeführt werden.
        (so denk ich das jedenfalls und kann dir auch nicht erklären, warums mit dem alert geht.)

        alert(top.location.href);
        top.frames[2].location.href = 'startrek/' + Ziel;
        }

        Mein Ansatz:

        Frameset aufrufen mit:
        top.location.href = '../index.html?dawillichhin';

        Im Frameset dann in den Frame, der die variale Datei enthalten soll, eine feste Datei reinlegen, ich nenn sie mal "wosollichhin.html"

        In dieser Datei dann folgende Funktion, die mit onload aufgerufen wird:

        function dahin()
        {
        if(top.location.href.indexOf('?')!=-1)
        {
        var uebergabe=window.location.search;//(uebergabe enthält:'?dawillichhin')
        var dateiname=uebergabe.substring(1);//(Teilstring vom 2. Zeichen bis zum Ende, jetzt ist das "?" weg)
        self.location.href='startrek/'+dateiname+'.html';
        }
        else
        {
        self.location.href='direkt.html';//(ruft alternativ eine voreingestellte Datei auf, falls das frameset direkt ohne Übergabewert geladen wurde)
        }
        }

        Achtung, bei mir funktionierte das mit dem "search" nicht, wenn die ganze Sache lokal bei mir aufm Rechner war, mußte es zum Ausprobieren hochladen, dann gings.

        gruß
        ptr

        1. function dahin()
          {
          if(top.location.href.indexOf('?')!=-1)
          {
          var uebergabe=window.location.search;//(uebergabe enthält:'?dawillichhin')

          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
          Muß hier natürlich auch "top.location" und nicht "window.location" heißen:
          var uebergabe=top.location.search;
          !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

          var dateiname=uebergabe.substring(1);//(Teilstring vom 2. Zeichen bis zum Ende, jetzt ist das "?" weg)
          self.location.href='startrek/'+dateiname+'.html';
          }
          else
          {
          self.location.href='direkt.html';//(ruft alternativ eine voreingestellte Datei auf, falls das frameset direkt ohne Übergabewert geladen wurde)
          }
          }

          1. Muß hier natürlich auch "top.location" und nicht "window.location" heißen:
            var uebergabe=top.location.search;

            Notiert.

            Gruß,
            Markus

          2. Hi,

            funktioniert bestens.
            Das Ergebnis kannst Du beim angegebenen Link einsehen.

            Gruß,
            Markus

        2. Hallo Markus,

          was du suchst ist die "search"-Eigenschaft des "location"-Objektes:
          ...

          Das sieht gut aus. Ich habe zwar auch bei location gesucht, aber das muß mir durch die Lappen gegangen sein.
          Na, da weiß ich jetzt, was ich am Wochenende mache.
          Und ob lokal oder nicht, ist mir relativ egal, DSL sei Dank.

          Herzlichen Dank und vorweihnachtliche Grüße,
          Markus