Philip: Websuche bei Seiten mit Frames

Mein Problem:
Ich habe eine Website mit zwei Frames. Im einen sind die Verweise in den anderen Frame, wo dann Texte sind. Wenn ich nun zum Beispiel mit Google etwas von meiner Seite suche und dann auf den Link klicke, kommt nur der untere Frame mit dem Inhalt. Ist ja irgendwie logisch. Was kann man dagegen unternehmen, ohne die Suche zu beeinträchtigen?

Greets Philip

  1. Hallo Philip,

    Du koenntest im Headbereich jeder Seite
     <script type="text/javascript">
        if(top == self) top.location = '../die_seite_mit_dem_frameset';
      </script>
    einfuegen, das wuerde zumindest die Leute, die Javascript benutzen auf die richtige Seite bringen.

    Dieter

    1. Hi,

      if(top == self) top.location = '../die_seite_mit_dem_frameset';

      einfuegen, das wuerde zumindest die Leute, die Javascript benutzen auf die richtige Seite bringen.

      würde es nicht.
      Die richtige Seite ist i.d.R. die, die über die Suchmaschine gefunden wurde und nicht die Startseiten.
      Wenn schon mit Javascript, dann bitte das Frameset mit der angeforderten Inhaltsseite nachladen.
      Eine andere Möglichkeit wäre ein Link zum Frameset auf jeder Seite; dieser könnte auch mit einem Javascript kombiniert und im noframes-Bereich nur den Besuchern ohne aktiviertes Javascript vorgesetzt werden.
      Die weitaus beste Lösung gerade in diesem Fall mit nur zwei Frames und der simpelsten aller Aufteilungen ist aber der Verzicht auf die Frames.

      freundliche Grüße
      Ingo

      1. Frameset mit der angeforderten Inhaltsseite nachladen:
        Das funktioniert bei mir nicht. Angenommen ich habe nur drei Seiten auf meiner Page: index.html, banner.html, inhalt.html.

        ist es richtig, dass ich bei index.html und banner.html nichts verändern muss? wie sieht der code bei inhalt.html aus? bei mir kommt immer der alert "Sie werden weitergeleitet zu..."

        freundliche grüsse philip

        1. Hi,

          ist es richtig, dass ich bei index.html und banner.html nichts verändern muss?

          Lies Dir doch bitte die Erläuterungen zu den Scripts nochmal genau durch. Wenn index.html Deine Frameset-Datei ist, dann muß hier das zweite Script rein, das den Übergabeparameter auswertet. Wenn banner.html ein immer gleiches Frame ohne eigentlichen Inhalt ist, dann lohnt sich hier kein Nachladescript - und wenn, dann solltest Du einfach auf die Startseite weiterleiten.

          wie sieht der code bei inhalt.html aus? bei mir kommt immer der alert "Sie werden weitergeleitet zu..."

          dies ist das erste Script. Der alert kommt, weil Du einen Fehler gemacht hast oder - und dafür ist er eigentlich gedacht - wenn eine Seite in einem fremden Frameset angezeigt wird.

          freundliche Grüße
          Ingo

          1. Hallo
            ok, funktioniert immer noch nicht. was läuft falsch? danke für die bemühungen! script im index.html:

            <body onload="Frameset(self.location.href)">

            <script type="text/javascript">
            function LadeFrame()
            {
              if(self.location.search.length > 0) self.inhalt.location.replace (self.location.search.substring (1,self.location.search.length));
            }
            </script>
            </body>

            script im inhalt.html:

            <script type="text/javascript">
            onerror = FremdURL;

            function FremdURL()
            {
              alert ("Sie werden weitergeleitet zur Startseite von ...");
              top.location.href = "inhalt.html";
              return true;
            }

            function Frameset(Pfad)
            {
              if (Pfad.indexOf("file://") != 0)
              {
                if (parent.frames.length == 0)
                {
                  var Datei = Pfad.slice(Pfad.lastIndexOf("/") + 1);
                  if (navigator.appName == "Microsoft Internet Explorer")
                    top.location.replace("index.html?" + Datei);
                  else
                  {
                    document.close();
                    with (document)
                    {
                      open();
                      writeln('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">');
                      writeln('<html><head><title>titel<'+'/title><'+'/head>');
                      writeln('<frameset rows="60,*">');
                      writeln('<frame name="inhalt" src="inhalt.html">');
                      writeln('<frame name="inhalt" src="' + Datei + '">');
                      writeln('<'+'/frameset><'+'/frameset><'+'/html>');
                      close();
                    }
                    return false;
                  }
                }
                else if (top.frames[0].name != "banner") FremdURL();
              }
            }
            </script>

            <body onload="Frameset(self.location.href)">

            1. Hi,

              if(self.location.search.length > 0) self.inhalt.location.replace

              Dein Inhaltsframe hat den Framenamen "inhalt"?

              top.location.href = "inhalt.html";

              Und Deine _Frameset_Datei den Dateinamen "inhalt.html"?

              top.location.replace("index.html?" + Datei);

              Oder doch "index.html"?

              writeln('<frame name="inhalt" src="inhalt.html">');

              Dein 1. oberes Frame hat auch den Framenamen "inhalt" und den Dateinamen "inhalt.html"?

              writeln('<frame name="inhalt" src="' + Datei + '">');

              Oder hat doch eher dieses 2. Frame den Framenamen "inhalt"?

              else if (top.frames[0].name != "banner") FremdURL();

              Und das 1. Frame dann diesen Namen "banner"?

              freundliche Grüße
              Ingo

              1. Wenn du wirklich nur diese 3 Seiten hast, ist eine davon dein Frameset und die beiden anderen sind die Startseiten, die in den beiden Frames dargestellt werden. Dann brauchst du das ganze also gar nicht.

              2. der momentane stand:
                bei mozilla, netscape funktioniert das ganze, nicht aber bei internet explorer. im index.html siehts folgendermassen aus:

                <frameset rows="80,*">
                  <frame src="banner.html" name="banner" scrolling="no" frameborder="0">
                  <frame src="inhalt.html" name="inhalt" frameborder="0" onload="LadeFrame()">
                </frameset>

                <body onload="Frameset(self.location.href)">

                <script type="text/javascript">
                function LadeFrame()
                {
                  if(self.location.search.length > 0) self.inhalt.location.replace (self.location.search.substring (1,self.location.search.length));
                }
                </script>
                </body>

                im inhalt.html:

                <script type="text/javascript">
                onerror = FremdURL;

                function FremdURL()
                {
                  alert ("Sie werden weitergeleitet zur Startseite von jedu-zh.ch");
                  top.location.href = "index.html";
                  return true;
                }

                function Frameset(Pfad)
                {
                  if (Pfad.indexOf("file://") != 0)
                  {
                    if (parent.frames.length == 0)
                    {
                      var Datei = Pfad.slice(Pfad.lastIndexOf("/") + 1);
                      if (navigator.appName == "Microsoft Internet Explorer")
                        top.location.replace("index.html?" + Datei);
                      else
                      {
                        document.close();
                        with (document)
                        {
                          open();
                          writeln('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">');
                          writeln('<html><head><title>titel<'+'/title><'+'/head>');
                          writeln('<frameset rows="80,*">');
                          writeln('<frame name="banner" src="banner.html" scrolling="no" frameborder="0">');
                          writeln('<frame name="inhalt" src="' + Datei + '" frameborder="0">');
                          writeln('<'+'/frameset><'+'/frameset><'+'/html>');
                          close();
                        }
                        return false;
                      }
                    }
                    else if (top.frames[0].name != "banner") FremdURL();
                  }
                }
                </script>

                <body onload="Frameset(self.location.href)">

                Die ganze Website besteht natürlich nicht nur aus drei Seiten, ansonsten brauchte ich das Ganze auch nicht.

                Greets Philip

                1. Hi,

                  bei mozilla, netscape funktioniert das ganze, nicht aber bei internet explorer. im index.html siehts folgendermassen aus:

                  dan stimmt lediglich der mittlere Teil nicht, der für diese moderneren Browser das Frameset selbst schreibt und dadurch das kurze Laden der Startseite bis zum Austausch spart. Wenn's Dir zu kompliziert ist, könntest Du diesen Teil inkl. der Abfrage nach dem IE auch löschen.

                  writeln('<'+'/frameset><'+'/frameset><'+'/html>');

                  hier wäre schonmal ein Frameset zuviel geschlossen.

                  freundliche Grüße
                  Ingo

                  1. Entschuldige, ich habe absolut keine Ahnung von javascript.
                    Was muss ich genau löschen?

                    1. Hi,

                      Entschuldige, ich habe absolut keine Ahnung von javascript.

                      von:
                            if (navigator.appName == "Microsoft Internet Explorer")
                              top.location.replace("index.html?" + Datei);
                            else
                            {
                      ...
                              return false;
                            }
                      bleibt nur noch:
                            top.location.replace("index.html?" + Datei);
                      übrig.

                      allerdings brauchst Du auch eigentlich in diesem Fall keine großen Javascript-Kenntnisse, um diesen Teil zu korrigieren. Du mußt nur wissen, daß der Befehl writeln('xyz') die zwischen den Hochkommata stehende Zeichenkette, hier "xyz" in das Dokument schreibt und hiermit exakt Deinen Frameset-Code generieren soll. Wobei mehrere Zeichenketten mittels "+" verknüpft werden können, was z.B. zum Einfügen der Varablen "Datei", die die URL enthält, erforderlich ist. Variablen werden nicht in Hochkommata gesetzt, also ('abc' + Variable + 'def').
                      Wenn Du die ganzen write-Befehle mal weglöscht und für "Datei" die URL der Seite einsetzt, die in das Frameset geladen werden soll, dann sollte exakt der Code des Originalframesets herauskommen, nur mit der angepaßten URL.

                      freundliche Grüße
                      Ingo

                      1. Ok, ich habs geändert. Funktioniert aber immer noch nicht.

                        <script type="text/javascript">
                        onerror = FremdURL;

                        function FremdURL()
                        {
                          alert ("Sie werden weitergeleitet zur Startseite von");
                          top.location.href = "index.html";
                          return true;
                        }

                        function Frameset(Pfad)
                        {
                          if (Pfad.indexOf("file://") != 0)
                          {
                            if (parent.frames.length == 0)
                            {
                              var Datei = Pfad.slice(Pfad.lastIndexOf("/") + 1);
                                top.location.replace("index.html?" + banner.html);
                            }
                            else if (top.frames[0].name != "banner") FremdURL();
                          }
                        }
                        </script>

                        Anstatt "Datei" habe ich banner.html genommen. Einmal auch mit "..."

                        Grüsse Philip

                        1. Hi,

                          Ok, ich habs geändert. Funktioniert aber immer noch nicht.

                          ich hatte mir doch soviel Mühe gegeben, Dir zu erklären, was eine Variable im Unterschied zu Text ist, ganz besonders bezüglich des Hinweises

                          der Varablen "Datei", die die URL enthält

                          und was machst Du?

                          function Frameset(Pfad)

                          in der Variablen "Pfad" steht die komplette URL der auszutauchenden Inhaltsdatei.

                          var Datei = Pfad.slice(Pfad.lastIndexOf("/") + 1);

                          in der Variablen "Datei" steht der aus der URL herausgeschnittene Dateiname ...

                          top.location.replace("index.html?" + banner.html);

                          ... und Du setzt hier eine nicht vorhandene _Variable_ "banner.html" ein?
                          Selbst wenn Du 'banner.html' - also durch Quotes als Text gekennzeichnet - übergeben würdest, wäre dies doch immer noch nicht der auszutauschende Dateiname; oder willst Du den Banner in den Inhaltsbereich laden?

                          Also bitte: setze die extra herausgeschnittene Variable "Datei" ein.

                          freundliche Grüße
                          Ingo

                          1. Tut mir ja schrecklich leid, aber das habe ich auch nur gemacht, weil es auch mit "Datei" nicht funktioniert. Du musst dir vorstellen, dass ich nich nur die drei Seiten index,inhalt und banner habe, dann funktioniert das nämlich. Wenn ich nun aber den Code auf eine andere Inhaltsseite anwende, also zum Beispiel kontakt.html, dann geht er wieder zur Startseite und nicht zu Kontakt, was ja eigentlich mein Ziel ist.

                            Freundliche Grüsse
                            Philip

                            1. Hi,

                              Du musst dir vorstellen, dass ich nich nur die drei Seiten index,inhalt und banner habe

                              schon klar.

                              Wenn ich nun aber den Code auf eine andere Inhaltsseite anwende, also zum Beispiel kontakt.html, dann geht er wieder zur Startseite und nicht zu Kontakt, was ja eigentlich mein Ziel ist.

                              was steht denn dann in der Adreßzeile, wenn Du die Variable "Datei" anhängst? In dieser sollte doch eigentlich der Name "kontakt.html" gespeichert und übergeben worden sein - sofern Du das Script auch in diese Seite integriert hast.

                              freundliche Grüße
                              Ingo

                              1. In der Adressleiste wird .../index.html?kontakt.html angezeigt.
                                Aber ist es nicht ein Problem von meinem index.html, denn hier lautet der Quelltext:

                                <frameset rows="80,*">
                                  <frame src="banner.html" name="banner" scrolling="no" frameborder="0">
                                  <frame src="inhalt.html" name="inhalt" frameborder="0" onload="LadeFrame()">
                                </frameset>

                                <body onload="Frameset(self.location.href)">

                                <script type="text/javascript">
                                function LadeFrame()
                                {
                                  if(self.location.search.length > 0) self.inhalt.location.replace (self.location.search.substring (1,self.location.search.length));
                                }
                                </script>
                                </body>

                                So wie ich das verstehe, wird dann gezwungenermassen immer inhalt.html geladen. Wenn dies richtig ist, wie kann ich das umgehen?

                                Grüsse Philip

                                1. Hi,

                                  In der Adressleiste wird .../index.html?kontakt.html angezeigt.

                                  schön.

                                  <frameset rows="80,*">

                                  hier sollte natürlich onload rein. Warum schreibe ich in meiner Erklärung überhaupt
                                  "Dieses Script wird in der Frameset-Datei aufgerufen über:
                                  <frameset onload="LadeFrame()" ...>" ? :-(

                                  und nicht hier

                                  <frame src="inhalt.html" name="inhalt" frameborder="0" onload="LadeFrame()">

                                  denn den Parameter hat ja die Frameset-Datei erhalten.

                                  freundliche Grüße
                                  Ingo

                                  1. Ja, wirklich schön. Es funktioniert nämlich immer noch nicht. Ich schlage vor, direkt beide Quelltexte zu korrigieren, sonst geht das noch ewig so weiter. Und das wäre ja sehr nervig, hm? index.html:

                                    <frameset rows="80,*" onload="LadeFrame()">
                                      <frame src="banner.html" name="banner" scrolling="no" frameborder="0">
                                      <frame src="inhalt.html" name="inhalt" frameborder="0">
                                    </frameset>

                                    <body onload="Frameset(self.location.href)">

                                    <script type="text/javascript">
                                    function LadeFrame()
                                    {
                                      if(self.location.search.length > 0) self.inhalt.location.replace (self.location.search.substring (1,self.location.search.length));
                                    }
                                    </script>
                                    </body>

                                    kontakt.html:

                                    <script type="text/javascript">
                                    onerror = FremdURL;

                                    function FremdURL()
                                    {
                                      alert ("blabla");
                                      top.location.href = "index.html";
                                      return true;
                                    }

                                    function Frameset(Pfad)
                                    {
                                      if (Pfad.indexOf("file://") != 0)
                                      {
                                        if (parent.frames.length == 0)
                                        {
                                          var Datei = Pfad.slice(Pfad.lastIndexOf("/") + 1);
                                            top.location.replace("index.html?" + Datei);
                                        }
                                        else if (top.frames[0].name != "banner") FremdURL();
                                      }
                                    }
                                    </script>
                                    </head>
                                    <body onload="Frameset(self.location.href)">

                                    1. Hi,

                                      <body onload="Frameset(self.location.href)">

                                      das hat im Frameset nichts zu suchen ...
                                      Außerdem gehört hier überhaupt kein body-Element hin.

                                      <script type="text/javascript">
                                      function LadeFrame()

                                      und dieses Script sollte besser in den HEAD-Bereich.

                                      freundliche Grüße
                                      Ingo

                                      1. Danke für die Hilfe, es funktioniert nun. ;-)
                                        Grüsse Philip

    2. Hallo Dieter

      Du koenntest im Headbereich jeder Seite
      <script type="text/javascript">
          if(top == self) top.location = '../die_seite_mit_dem_frameset';
        </script>
      einfuegen, das wuerde zumindest die Leute, die Javascript benutzen auf die richtige Seite bringen.

      Zur richtigen Seite?
      Für mich wäre die richtige Seite die mit der gesuchten Information, nicht
      irgendeine Startseite.
      Meinst du, der Besucher, der nach einer Suche auf der Startseite landet,
      probiert alle Links aus, um dort eventuell seinen Suchbegriff zu finden?

      Ich jedenfalls nicht!

      Auf Wiederlesen
      Detlef

      --
      - Wissen ist gut
      - Können ist besser
      - aber das Beste und Interessanteste ist der Weg dahin!