Axel: Ärger mit Frames

Hallo,

folgende Datei macht Ärger für Frames macht Ärger:

<html>
<head>
<title>Text des universellen Titels</title>
</head>
<frameset cols="250,*">
  <frame src="Test.html" name="Navigation">
  <frame src="cgi-bin/tiptest.pl" name="Daten">
  <noframes>
    Ihr Browser kann diese Seite leider nicht anzeigen!
  </noframes>
</frameset>
</html>

Die Datei Test sieht so aus:
<html>
<head>
<title></title>

<a href="http:\127.0.0.1\cgi-bin\tiptest.pl?Gruppe=A" target="Daten">Gruppe A</a>

</body>
</html>

Der Aufruf klappt noch tadellos. Der Bildschirm ist zwei Spalten unterteilt. Wenn ich aber in der linken Spalte (Datei Test) den Link anklicke, wird immer ein neues Fenster geöffnet. Warum?

Axel

  1. Hallo,

    <frame src="Test.html" name="Navigation">
      <frame src="cgi-bin/tiptest.pl" name="Daten">

    <a href="http:\127.0.0.1\cgi-bin\tiptest.pl?Gruppe=A" target="Daten">Gruppe A</a>

    Der Aufruf klappt noch tadellos. Der Bildschirm ist zwei Spalten unterteilt. Wenn ich aber in der linken Spalte (Datei Test) den Link anklicke, wird immer ein neues Fenster geöffnet. Warum?

    Hast du das Daten im name Attribut des Frames und im target Attribut des Links wirklich genau gleich geschrieben? Und wieso verwendest du in deinem href Attribut Backslashs? So etwas gibt es im Internet nicht. Eigentlich sollte dein Link gar nicht funktionieren. Im IE wird er wahrscheinlich trotzdem gehen, aber wenn du so falschen Code verwendest, dann brauchst du dich auch nicht wundern, wenn er nicht richtig funktioniert.

    Viele Grüße,

    Stefan

    --
    Lass dir das Tanzen NICHT verbieten
    http://tanzverbot.de
    1. Hallo,

      <frame src="Test.html" name="Navigation">
        <frame src="cgi-bin/tiptest.pl" name="Daten">

      <a href="http:\127.0.0.1\cgi-bin\tiptest.pl?Gruppe=A" target="Daten">Gruppe A</a>

      Der Aufruf klappt noch tadellos. Der Bildschirm ist zwei Spalten unterteilt. Wenn ich aber in der linken Spalte (Datei Test) den Link anklicke, wird immer ein neues Fenster geöffnet. Warum?

      Hast du das Daten im name Attribut des Frames und im target Attribut des Links wirklich genau gleich geschrieben? Und wieso verwendest du in deinem href Attribut Backslashs? So etwas gibt es im Internet nicht. Eigentlich sollte dein Link gar nicht funktionieren. Im IE wird er wahrscheinlich trotzdem gehen, aber wenn du so falschen Code verwendest, dann brauchst du dich auch nicht wundern, wenn er nicht richtig funktioniert.

      Viele Grüße,

      Stefan

      Attribute sind absolut gleich. Auch nach Änderung der backslash keine Verbesserung. Es scheint mir irgendwie, als würde der Explorer die Frames nicht akzeptieren. Andererseits baut er ja das Eröffnungsbild mühelos auf. Was ist da bloß los?

  2. Hallo,

    folgende Datei macht Ärger für Frames macht Ärger:

    Bitte einen Dokumenttyp für Frameset einfügen.
    http://selfhtml.teamone.de/html/allgemein/grundgeruest.htm#dokumenttyp

    <html>
    <head>
    <title>Text des universellen Titels</title>
    </head>
    <frameset cols="250,*">
      <frame src="Test.html" name="Navigation">
      <frame src="cgi-bin/tiptest.pl" name="Daten">
      <noframes>
        Ihr Browser kann diese Seite leider nicht anzeigen!
      </noframes>
    </frameset>
    </html>

    Die Datei Test sieht so aus:

    Bitte einen Dokumenttyp für Transitional oder Strict einfügen.
    http://selfhtml.teamone.de/html/allgemein/grundgeruest.htm#dokumenttyp

    <html>
    <head>
    <title></title>

    </head>
    <body>

    <a href="http:\127.0.0.1\cgi-bin\tiptest.pl?Gruppe=A" target="Daten">Gruppe A</a>

    </body>
    </html>

    War der HEAD wirklich nicht geschlossen und der BODY wirklich nicht geöffnet?

    viele Grüße

    Axel

    1. Hi,

      Die Datei Test sieht so aus:
      Bitte einen Dokumenttyp für Transitional oder Strict einfügen.

      da das target-Attribut verwendet werden soll, kommt nur transitional in Frage.

      War der HEAD wirklich nicht geschlossen und der BODY wirklich nicht geöffnet?

      Doch, war er. Implizit.
      Sowohl das schließende head-tag als auch das öffnende body-tag sind optional,
      d.h. mit dem ersten Element, das nur im body vorkommen darf, wird implizit das head-Element geschlossen und das body-Element geschlossen.

      cu,
      Andreas

      --
      Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
      http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
      1. Hallo,

        Die Datei Test sieht so aus:
        Bitte einen Dokumenttyp für Transitional oder Strict einfügen.

        da das target-Attribut verwendet werden soll, kommt nur transitional in Frage.

        Ja, da hast Du Recht.

        War der HEAD wirklich nicht geschlossen und der BODY wirklich nicht geöffnet?

        Doch, war er. Implizit.
        Sowohl das schließende head-tag als auch das öffnende body-tag sind optional,

        Das öffnende head-tag und das schießende body-tag auch.

        d.h. mit dem ersten Element, das nur im body vorkommen darf, wird implizit das head-Element geschlossen und das body-Element geschlossen.

        Du meinst: ...und das body-Element geöffnet. ;-))
        Laut DTD ist das wohl so. Bist Du Dir aber sicher, dass das alle Browser auch so sehen?

        viele Grüße

        Axel

        1. Hi,

          Doch, war er. Implizit.
          Sowohl das schließende head-tag als auch das öffnende body-tag sind optional,
          Das öffnende head-tag und das schießende body-tag auch.
          d.h. mit dem ersten Element, das nur im body vorkommen darf, wird implizit das head-Element geschlossen und das body-Element geschlossen.
          Du meinst: ...und das body-Element geöffnet. ;-))

          Ja, meinte ich. Vor lauter geschlossen/geöffnet ist da was durcheinander gekommen...

          Laut DTD ist das wohl so. Bist Du Dir aber sicher, dass das alle Browser auch so sehen?

          Habs nicht ausprobiert. Wenn aber doch, dann ist der Browser schuld ;-)

          cu,
          Andreas

          --
          Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
          http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
          1. Daran liegt es nicht.

          2. hallo Andreas,

            Das öffnende head-tag und das schießende body-tag
            Habs nicht ausprobiert. Wenn aber doch, dann ist der Browser schuld ;-)

            vor allem, wenn es solche schießwütigen tags gibt ;-)

            Christoph S.

  3. hallo Axel,

    Die Datei Test sieht so aus:

    Dui meinst wahrscheinlich die Datei Test.html

    <a href="http:\127.0.0.1\cgi-bin\tiptest.pl?Gruppe=A" target="Daten">Gruppe A</a>

    Im Link hast du mit "Daten" ein Ziel definiert, das es nicht gibt. Folgerichtig ersetzen es die Browser mehr oder weniger automatisch durch ein default-target. Gib ein target vor, das in deinem Frameset existiert, und alles wird wie gewünscht funktionieren.

    Grüße aus Berlin

    Christoph S.

    1. Hallo,

      <a href="http:\127.0.0.1\cgi-bin\tiptest.pl?Gruppe=A" target="Daten">Gruppe A</a>
      Im Link hast du mit "Daten" ein Ziel definiert, das es nicht gibt. Folgerichtig ersetzen es die Browser mehr oder weniger automatisch durch ein default-target. Gib ein target vor, das in deinem Frameset existiert, und alles wird wie gewünscht funktionieren.

      Wieso existiert dieses Ziel in seinem Frameset nicht? Entweder ich bin blind oder blöd. Copy&Paste aus dem Ursprungspost:

      <frameset cols="250,*">
        <frame src="Test.html" name="Navigation">
        <frame src="cgi-bin/tiptest.pl" name="Daten">
                                        ^^^^^^^^^^^^^

      Viele Grüße,

      Stefan

      --
      Lass dir das Tanzen NICHT verbieten
      http://tanzverbot.de
      1. Danke, wollte mich gerade bereits erschießen.

        Kann den Fehler noch immer nicht erkennen. Kann es etwas damit zu tun haben, dass rechts ein CGI-Skript aufgerufen wird? Habe gerade erste Versuche gestartet, wo ich das nicht mache. Das scheint dann zu gehen. Aber das wäre doch zum Verrücktwerden...

        1. Hallöle,

          Kann den Fehler noch immer nicht erkennen.

          Welche Doctype-Angabe verwendest du? Afaik musst du in der test.html die Variante Transitional verwenden, damit target richtig funktioniert.

          Viele Grüße
          Torsten

          --
          Dieses Posting kommt ohne Garantie auf Vollständigkeit, Richtigkeit und Funktionalität. Geposteter Quelltext ist, soweit nicht anders angegeben, ungetestet.
          ss:| zu:) ls:] fo:) de:[ va:| ch:? sh:( n4:~ rl:? br:> js:| ie:% fl:( mo:)
          1. hi Siechfred,

            Welche Doctype-Angabe verwendest du? Afaik musst du in der test.html die Variante Transitional verwenden, damit target richtig funktioniert.

            Das ist ihm schon gesagt worden  -  das Problem liegt mit an Sicherheit grenzender Wahrscheinlichkeit in seinem Script. Beide Frames rufen dasselbe Script "tiptest.pl" auf, nur im linken Frame mit dem Zusatz "?Gruppe=A". Eine solche Konstruktion ist durchaus möglich, nur steht zu vermuten, daß bei beiden Aufrufen jedesmal das _gesamte_ Script seine Ausgaben produzieren soll.
            Solange wir das Script nicht kennen, ist tiefergehende Fehleranalyse wohl nicht möglich.

            Grüße aus Berlin

            Christoph S.

            1. Hallöle,

              Das ist ihm schon gesagt worden

              Hatte ich nicht gesehen - mea culpa :(

              Viele Grüße
              Torsten

              --
              ss:| zu:) ls:] fo:) de:[ va:| ch:? sh:( n4:~ rl:? br:> js:| ie:% fl:( mo:)
            2. hi Siechfred,

              Welche Doctype-Angabe verwendest du? Afaik musst du in der test.html die Variante Transitional verwenden, damit target richtig funktioniert.
              Das ist ihm schon gesagt worden  -  das Problem liegt mit an Sicherheit grenzender Wahrscheinlichkeit in seinem Script. Beide Frames rufen dasselbe Script "tiptest.pl" auf, nur im linken Frame mit dem Zusatz "?Gruppe=A". Eine solche Konstruktion ist durchaus möglich, nur steht zu vermuten, daß bei beiden Aufrufen jedesmal das _gesamte_ Script seine Ausgaben produzieren soll.
              Solange wir das Script nicht kennen, ist tiefergehende Fehleranalyse wohl nicht möglich.

              Grüße aus Berlin

              Christoph S.

              Soweit ich das überblicken kann, stimmt das, was Du sagst. Es wird immer das gleiche Skript aufgerufen, dass in Abhängigkeit von dem Parameter eine unterschiedlich generierte Seite auswirft. Wo liegt da genau das Problem. Kannst Du mir das genauer erläutern, und vor allem erläutern, wie ich es abstellen muss?

              1. hallo Axel,

                Kannst Du mir das genauer erläutern, und vor allem erläutern, wie ich es abstellen muss?

                Nein. Dazu hast du bisher nicht genug Informationen geliefert. Offenkundig hast du _nicht_ ein Frames-Problem, sondern ein Scriptproblem.

                Grüße aus Berlin

                Christoph S.

                1. Was soll ich da erklären. Es läuft ein Perl-Skript, sagen wir: Bei Gruppe A liefert es eine Handball-Tabelle der Handball-Gruppe A. Bei Gruppe B liefert es eben eine solche von Gruppe B. Es läuft also im Hintergrund eine MySQL-Abfrage und dann wird die Seite gebaut und ausgespuckt. Das wird in der Zeit, in der ich diese Zeilen geschrieben habe, ca. 1.000000 Mal passiert sein, davon zu 80 % auf Seiten mit Frames. Es muss doch funktionieren.

                  1. hallo Axel,

                    Was soll ich da erklären

                    Du sollst nichts mehr erklären, die Fehlerbeschreibung ist inzwischen bekannt, bloß der Grund noch nicht. Wahrscheinlich passiert folgendes: im _rechten_ Frame produziert dein Script bei Aufruf des Framesets eine Textausgabe, im _linken_ steht zunächst deine "Test.html" (übrigens, kleiner Hinweis: du fährst besser, wenn du Dateinamen konsequent klein schreibst). Klickst du jetzt in "Test.html" deinen link, produziert das Script vermutlich erneut seine Ausgaben  -  und zwar aus beiden Aufrufen heraus, also sowohl für den link wie auch im rechten Frame. Damit leistet es vermutlich Doppelarbeit und kommt sich selbst in die Quere.
                    Ich habe vorhin schon gesagt, daß eine tiefergehende Analyse ohne Kenntnis deines Scripts nicht möglich ist.

                    Eins kannst du noch machen: dein Server verfügt höchstwahrscheinlich über eine "error.log" mit der Protokollierung von problematischen Anfragen, sowie über eine "access.log" mit der Protokollierung jedes einzelnen Zugriffs. Schau dir die Protokolldateien an und versuche sier auszuwerten.

                    Christoph S.

                    1. Hallo Christoph,

                      Wahrscheinlich passiert folgendes: im _rechten_ Frame produziert dein Script bei Aufruf des Framesets eine Textausgabe, im _linken_ steht zunächst deine "Test.html" Klickst du jetzt in "Test.html" deinen link, produziert das Script vermutlich erneut seine Ausgaben  -  und zwar aus beiden Aufrufen heraus, also sowohl für den link wie auch im rechten Frame. Damit leistet es vermutlich Doppelarbeit und kommt sich selbst in die Quere.

                      Was du im Verlaufe dieses Threads über das Script gesagt hast ist vermutlich schlichtweg falsch. Was auch immer in dem Script selbst passiert, das Script hat von Frames oder nicht Frames keine Ahnung. Genau so hat der Browser von dem Script keine Ahnung.
                      Wenn ein Link aufgerufen wird, dann setzt der Browser einen Request ab und bekommt daraufhin vom Server eine Response. Ob diese von einem Script stammt oder nicht ist dem Browser egal. Und wenn ich einen Link in einem Frameset aufrufe, dann wird deshalb auch nur ein ganz normaler Request abgeschickt. Wo die Response dann landet legt das target Attribut fest.
                      Selbst wenn das Script fehlerhaft wäre (anderst kann ich dein in die Quere kommen leider nicht beschreiben), dann würde die falsche Ausgabe des Scriptes trotzdem in dem Frame landen, in welchem auch eine richtige Ausgabe gelandet wäre.

                      Die einzige Möglichkeit die ein Script hätte um bei Frames zu intervenieren befschreibt z.B. perlfaq9

                      To target a particular frame in a frameset, include the "Window-target:" in the header.

                      print <<EOF;
                          Location: http://www.domain.com/newpage
                          Window-target: <FrameName>

                      EOF

                      Wenn nun das Script bei einem Aufruf mit ?GruppeA einen Window-target: _blank Header sendet, dann könnte der Browser also ein neues Fenster öffnen. Welche Browser target Angaben im Header unterstützen weiß ich nicht, aber eine betrachtung der Script Header könnte hier schon einmal weiterhelfen den Fehler vielleicht zu finden.

                      Viele Grüße,

                      Stefan

                      --
                      Lass dir das Tanzen NICHT verbieten
                      http://tanzverbot.de
                      1. hallo Stefan,

                        Was du im Verlaufe dieses Threads über das Script gesagt hast ist vermutlich schlichtweg falsch.

                        Vielleicht ist es das wirklich. Nur kann man das eben erst wissen, wenn Axel sein Script preisgibt, was er bisher ja nicht getan hat.

                        Was auch immer in dem Script selbst passiert, das Script hat von Frames oder nicht Frames keine Ahnung.

                        Das Script, wissen wir inzwischen, liest eine Datenbank aus und stellt ein entsprechendes Listing dar. Und wenn es sich dazu selber noch ein Brwoserfenster "erfindet", könnte es durchaus von Frames eine Ahnung haben  -  im Extremfall kann es ja sogar auch noch Javascript produzieren. An solche Dinge hab ich gedacht, wenn auch nicht alle ausgesprochen, weil meine Mutmaßungen zum Scriptinhalt durchaus unzutreffend sein können.

                        Genau so hat der Browser von dem Script keine Ahnung.

                        Braucht er auch nicht. Er muß nur den neu ankommenden Inhalt darstellen, und wenn der nicht zum Frameset paßt ...

                        Die einzige Möglichkeit die ein Script hätte um bei Frames zu intervenieren beschreibt z.B. perlfaq9
                        To target a particular frame in a frameset, include the "Window-target:" in the header.
                            print <<EOF;
                            Location: http://www.domain.com/newpage
                            Window-target: <FrameName>
                            EOF

                        Ein kluger ud richtiger Hinweis, von dem ich hoffen möchte, daß er Axel weiterhilft.
                        Aber es ist nicht die "einzige Möglichkeit". Ein Script kann eben beispielsweise auch noch Javascript erzeugen. Es könnte auch das Frameset neu schreiben, und dann hat der Browser ein Problem, solange er nur den Client-Cache ausliest und nicht refresht.

                        Wenn nun das Script bei einem Aufruf mit ?GruppeA einen Window-target: _blank Header sendet, dann könnte der Browser also ein neues Fenster öffnen.

                        Und damit bist du genau an derselben Stelle wie ich auch. Wir wissen es einfach nicht, ob Axels Script nicht vielleicht genau das macht.

                        Im übrigen: ich habe mich in diesen Thread an einer Stelle "hineingedrängt", an der es bereits zu einer deutlichen "Threaddrift" gekommen war, was Axel dazu veranlaßt hatte, einen neuen Thread zum selben Thema anzufangen  -  siehe [pref:t=50242&m=275036]. Und es geht hier im Forum eigentlich niemals darum, ob jemand "recht" hat, sondern darum, ob und wie eine Frage beschrieben wird, und ob und wie man eine Lösung dafür findet. Es gibt kein Ausschlußkriterium. Aber es gibt sowohl für Fragesteller wie auch für diejenigen, die versuchen, eine Lösung zu finden, das "Recht auf Irrtum"  -  sollte so ein Irrtum vorkommen, kann das Forum in seiner Gesamtheit gerne korrigierend eingreifen und tut es ja oft auch.

                        Grüße aus Berlin

                        Christoph S.

                        1. Hallo an alle,

                          vielen Dank für Eure Hilfe. Auch, wenn ich Christophs Ideen am Anfang vollkommen unverständlich fand, war er auf dem richtigen Weg.

                          Tatsächlich hat das Skript einen Java-Script-Code erzeugt. In diesem wurde eine Variable initialisiert, ohne sie vorher deklariert zu haben. Das war anscheinend der Fehler. Danach funktionierte es.

                          Danke an alle.

                          Axel

          2. Hallöle,

            Kann den Fehler noch immer nicht erkennen.

            Welche Doctype-Angabe verwendest du? Afaik musst du in der test.html die Variante Transitional verwenden, damit target richtig funktioniert.

            Viele Grüße
            Torsten

            Habe jetzt alle Doc-Types gesetzt (Frameset in Hauptdatei, Transitional in Datei Test.html, alles per Copy and Paste aus dem Selfhtml.): keine Besserung.

        2. hallo,

          Kann es etwas damit zu tun haben, dass rechts ein CGI-Skript aufgerufen wird?

          Das hängt von deinen eingesetzten Scripts ab. Möglich ist es durchaus, daß beide Scripts einander widersprechende Ergebnisse bringen und/oder nicht auf dein Frameset abgestimmt sind.

          Christoph S.

      2. hi,

        Wieso existiert dieses Ziel in seinem Frameset nicht?

        Doch, im Frameset exisitiert es, du hast doch selber schon darauf hingewiesen. Aber offenbar soll das aufgerufene Script Text ausgeben, und das Script weiß nichts von diesem Ziel. Der link in "Test.html" ruft nur das Script auf und hat seine Arbeit damit beendet. Wenn das Script nun keine Ahnung hat, wohin es seine Ausgabe schicken soll, passiert der beschriebene Fehler

        Grüße aus Berlin

        Christoph S.

        1. Versteh ich nicht. Wenn ich mit dem target-tag eine x-beliebige html-Datei in den Frame lade, funktioniert auch alles, obwohl in der html-Datei auch nichts vom Frame steht. Wieso soll ich jetzt in dem cgi-Skript Informationen über den Frame unterbringen, und vor allem wo und wie?

          Neueste Meldung: Es ist zum Verrücktwerden
          1. links stehen nur zivile hrefs, die auf html-Dokumente verweisen. Alles kein Problem.
          2. links steht ein href, der auf die Ausgabe eines CgI-Skripts verweist. Klappt beim ersten Mal gut. Sobald ich danach links einen anderen Link anklicke, wird ein neues Fenster aufgemacht.

          hilfe!

          1. Hi,

            Neueste Meldung: Es ist zum Verrücktwerden

            1. links stehen nur zivile hrefs, die auf html-Dokumente verweisen. Alles kein Problem.
            2. links steht ein href, der auf die Ausgabe eines CgI-Skripts verweist. Klappt beim ersten Mal gut. Sobald ich danach links einen anderen Link anklicke, wird ein neues Fenster aufgemacht.

            Steht in der vom cgi-Script ausgelieferten Seite ein Javascript, daß den Fensternamen ändert?

            cu,
            Andreas

            --
            Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
            http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
        2. Hallo,

          Wieso existiert dieses Ziel in seinem Frameset nicht?
          Doch, im Frameset exisitiert es, du hast doch selber schon darauf hingewiesen. Aber offenbar soll das aufgerufene Script Text ausgeben, und das Script weiß nichts von diesem Ziel.

          Warum sollte es auch? Das Script liefert Content an den anfordernden Client (Browser) zurück. Dieser entscheidet, in welchem Fenster dieser Content dargestellt wird. Welche Möglichkeiten sollte ein CGI-Script haben ein Frameset zu sprengen?

          Der link in "Test.html" ruft nur das Script auf und hat seine Arbeit damit beendet. Wenn das Script nun keine Ahnung hat, wohin es seine Ausgabe schicken soll, passiert der beschriebene Fehler

          Unsinn. Der Link sendet eine HTTP-GET-Aforderung und der Browser erwartet den Antwort-Content im angegebenen target.

          viele Grüße

          Axel

          1. hi,

            Welche Möglichkeiten sollte ein CGI-Script haben ein Frameset zu sprengen?

            Das Problem im ganzen Thread ist, daß hier irgendein nicht ganz korrekter CGI-Aufruf passiert und wir das Script noch nicht kennen.
            Daß das Frameset "gesprengt" würde, ist auch nicht der Fall. Möglich wäre das im übrigen durchaus: du kannst die gesamte Frameset-Definition vom Script neu schreiben lassen und die "alte" Frameset-Datei löschen. Dann gibts nur den Effekt, daß ein derart neu gemeriertes Frameset auch erst nach einem refresh im aufrufenden Browser steht.

            Der Link sendet eine HTTP-GET-Aforderung und der Browser erwartet den Antwort-Content im angegebenen target.

            Wenn der link das _gesamte_ Script anspricht, produziert es möglicherweise in _beiden_ Frames neue Ausgaben, da beide Frames bei der vorgestellten Konstruktion das so haben wollen. Es wäre beim Auftreten eines Fehlers der beschriebenen Art günstiger, wenn der link ein anderes Script aufrufen würde als das Script, das sowieso schon im rechten Frame aufgerufen ist. Man kann dann das Problem besser zuordnen.

            Grüße aus Berlin

            Christoph S.