Matthias: Problem mit Frames und getElementByID

Hallo,

Vorweg: JavaScript ist nicht meine Welt, ich bin eher in PHP zu Hause, doch mit PHP ist nicht alles möglich...

Ich habe eine Datei, in der sind 2 Links und 2 iFrames.
Klickt man auf den ersten Link, so wird in dem ersten iFrame eine Seite geöffnet (z.B. de.wikipedia.org).
Klickt man jetzt auf den zweiten Link, so soll überprüft werden, ob in dem ersten iFrame de.wikipedia.org angezeigt wird, wenn ja, dann soll im zweiten iFrame ebenfalls eine Seite angezeigt werden. Wenn nein, dann soll (erstmal) nichts passieren.

Ich habe das jetzt erstmal etwas vereinfacht, sprich, wenn man auf den zweiten Link klickt, dann kommt ein alert() und gibt an, welche URL im ersten iFrame angezeigt wird:

<html>  
 <head>  
  <title>Frame-Test</title>  
 </head>  
<script>  
<!--  
 function show(x) {  
  var url = document.getElementById("wikiframe").src;  
  alert(url);  
 }  
 function send(x) {  
  document.getElementById("wikiframe").src = "http://de.wikipedia.org/";  
 }  
-->  
</script>  
 <body>  
  <div onclick="send()" target="wiki">1. Link</div>  
  <div onclick="show()">2. Link</div><br>  
  <iframe name="wiki" id="wikiframe" src="" width="900" height="300"></iframe><br>  
  <iframe name="blank" src="" width="900" height="300"></iframe><br>  
 </body>  
</html>

Das funktioniert soweit auch ganz gut, bis man feststellt, dass man nicht auf "http://de.wikipedia.org/" bleibt, wenn man dies aufruft, sondern zu "http://de.wikipedia.org/wiki/Wikipedia:Hauptseite" weitergeleitet wird.
Von getElementByID wird einem jedoch "vorgegaukelt", dass man auf "http://de.wikipedia.org/" sei. Besonders interessant wird es, wenn man in dem iFrame so viel herumklickt, bis man irgendwo ganz anders ist (z.B. bei google.de).

Gibt es eine Möglichkeit, dass die tatsächlich im iFrame angezeigte URL ausgegeben wird und nicht die URL, die irgendwann mal theoretisch hätte angezeigt werden sollen?
Das erste iFrame auf eine Größe von 1x1 Pixel zu setzen ist leider nicht möglich, da unter Umständen in dem iFrame geklickt werden MUSS.

Ich freue mich sehr über eure Hilfe!

MfG, Matthias

  1. Hallo,

    vermeide wenn möglich alle arten von frames -->
    speziell in deinem fall gibt es webseiten die nicht wollen, das sie in einem frame angezeigt werden und lösen dieses auf. dadurch hast du nichts erreicht ;)

    MfG. Christoph Ludwig

    --
    Wo die Sprache aufhört, fängt die Musik an...
    Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
    Go to this
    1. Hm... Aber wie kann ich dann sicherstellen, dass jemand auf einer bestimmten Seite ist, bevor eine andere Seite geöffnet wird?
      Hintergrund: Ich brauche für beide Seiten die gleiche Session-ID.

      MfG, Matthias

      1. Hi,

        Hm... Aber wie kann ich dann sicherstellen, dass jemand auf einer bestimmten Seite ist, bevor eine andere Seite geöffnet wird?
        Hintergrund: Ich brauche für beide Seiten die gleiche Session-ID.

        Dann beschreib mal bitte detailierter, was du erreichen willst, und wieso.
        An Hand deines Beispiels mit "wikipedia im einen Frame" kann ich jedenfalls icht nachvollziehen, was das mit Session-IDs zu tun haben soll.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Hallo,

          deines Beispiels mit "wikipedia

          ebenso sollte sich der herr angewöhnen, mit example.de zu arbeiten... :)

          MfG. Christoph Ludwig

          --
          Wo die Sprache aufhört, fängt die Musik an...
          Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
          Go to this
          1. ebenso sollte sich der herr angewöhnen, mit example.de zu arbeiten... :)

            Wird gemacht, jetzt ist ja ein für jeden zugängliches Beispiel mit Weiterleitung bekannt.

            MfG, Matthias

          2. [latex]Mae  govannen![/latex]

            ebenso sollte sich der herr angewöhnen, mit example.de zu arbeiten... :)

            Jepp. Frau Hinterholzer wird sich sehr freuen.

            Cü,

            Kai

            --
            Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
            selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
            Mein Selfhtml-Kram
          3. Hi,

            deines Beispiels mit "wikipedia

            ebenso sollte sich der herr angewöhnen, mit example.de zu arbeiten... :)

            Aber nur, wenn er Inhaber der Domain example.de ist.

            Wenn nicht, sollte er doch bei den fuer Beispiele vorgesehenen example.com/.net/.org bleiben.

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
            1. Hallo,

              Aber nur, wenn er Inhaber der Domain example.de ist.

              Wenn nicht, sollte er doch bei den fuer Beispiele vorgesehenen example.com/.net/.org bleiben.

              omg ... wie geil ^^
              sry .. aber ich dachte, das die TLD bei example egal ist :)

              MfG. Christoph Ludwig

              --
              Wo die Sprache aufhört, fängt die Musik an...
              Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
              Go to this
        2. Dann beschreib mal bitte detailierter, was du erreichen willst, und wieso.

          Das ist so:
          Wenn jemand meine Seite öffnen will / öffnet, dann soll er sich bei einer anderen Seite einloggen. Auf diese Seite, auf der man sich einloggen kann/soll, habe ich keinen Einfluss. Ich kann also nicht in eine Datenbank schauen, ob er dort eingeloggt ist.
          Ich kann nur anhand der URL erkennen, ob der User dort eingeloggt ist, oder nicht.
          ausgeloggter Zustand: login.php
          eingeloggter Zustand: index.php
          Ruft man die index.php auf, und ist nicht eingeloggt, so wird man zu login.php weitergeleitet.

          Und nur, wenn er dort eingeloggt ist, soll er Zugriff auf meine Seite (in dem zweiten iFrame) bekommen. Das ist also ein Zugriffsschutz, ohne eigenem Login-System.
          Auf meiner Seite sind keine Top-Secret-Daten, weswegen ich kein eigenes Login-System brauche / haben möchte, doch es soll nicht jeder Hans-Franz, der im I-Net unterwegs ist, diese Daten sehen können.
          Und wenn ein Hacker meint meine Seite hacken zu müssen, dann muss er mich schon für sehr wichtig halten.

          Wo ich das hier gerade schreibe, fällt mir auf, dass es doch nicht unbedingt etwas mit der Session-ID zu tun hat.

          MfG, Matthias

          1. Hi,

            Wenn jemand meine Seite öffnen will / öffnet, dann soll er sich bei einer anderen Seite einloggen. Auf diese Seite, auf der man sich einloggen kann/soll, habe ich keinen Einfluss.

            Klingt nach einem vermurksten Konzept.

            Und nur, wenn er dort eingeloggt ist, soll er Zugriff auf meine Seite (in dem zweiten iFrame) bekommen. Das ist also ein Zugriffsschutz, ohne eigenem Login-System.

            Du hast per JavaScript keinen Zugriff auf Inhalte von fremden Domains.

            Auf meiner Seite sind keine Top-Secret-Daten, weswegen ich kein eigenes Login-System brauche / haben möchte, doch es soll nicht jeder Hans-Franz, der im I-Net unterwegs ist, diese Daten sehen können.

            Entweder willst du ein eigenes, oder keins. Entscheide dich.

            Wo ich das hier gerade schreibe, fällt mir auf, dass es doch nicht unbedingt etwas mit der Session-ID zu tun hat.

            Nein, damit auch nicht.

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
          2. Und nur, wenn er dort eingeloggt ist, soll er Zugriff auf meine Seite (in dem zweiten iFrame) bekommen. Das ist also ein Zugriffsschutz, ohne eigenem Login-System.

            Nein, ist es nicht, da es von etwas Clientseitigem abhängt. Und das ist grundsätzlich deiner Kontrolle entzogen.

            Auf meiner Seite sind keine Top-Secret-Daten, weswegen ich kein eigenes Login-System brauche / haben möchte, doch es soll nicht jeder Hans-Franz, der im I-Net unterwegs ist, diese Daten sehen können.

            Entweder etwas ist geheim, also nur einem bestimmten Benutzerkreis zugänglich, dann brauchst du auch ein eigenes Login-System oder etwas ist öffentlich und der Benutzerkreis ist nicht eingeschränkt, dann ist es egal. Deine Anforderung ist seltsam.

            --
            Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
            Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|
            1. Nein, ist es nicht, da es von etwas Clientseitigem abhängt. Und das ist grundsätzlich deiner Kontrolle entzogen.

              Schade. Ich dachte, gerade mit JavaScript könne man Clientseitig arbeiten.

              Entweder etwas ist geheim, also nur einem bestimmten Benutzerkreis zugänglich, dann brauchst du auch ein eigenes Login-System oder etwas ist öffentlich und der Benutzerkreis ist nicht eingeschränkt, dann ist es egal. Deine Anforderung ist seltsam.

              Sieh es einfach wie bei dem Datenschutz der Telekom: Die Daten sind geheim, aber für jeden einsehbar ;)

              Aber wenn soetwas "clientseitiges" nicht möglich ist, dann muss ich mir was anderes überlegen. Vielleicht muss doch das eigene Login-System her (dann aber mit PHP ;) ).

              Auf alle Fälle vielen Dank an alle für ihre Mühe und Hilfe!

              Mfg, Matthias

              1. Nein, ist es nicht, da es von etwas Clientseitigem abhängt. Und das ist grundsätzlich deiner Kontrolle entzogen.
                Schade. Ich dachte, gerade mit JavaScript könne man Clientseitig arbeiten.

                Natürlich kann man mit JavaScript clientseitig arbeiten. Aber *alles*, was dabei geschieht, kann vom Client auch beliebig manipuliert werden und auch ausgelesen werden.

                Entweder etwas ist geheim, also nur einem bestimmten Benutzerkreis zugänglich, dann brauchst du auch ein eigenes Login-System oder etwas ist öffentlich und der Benutzerkreis ist nicht eingeschränkt, dann ist es egal. Deine Anforderung ist seltsam.
                Sieh es einfach wie bei dem Datenschutz der Telekom: Die Daten sind geheim, aber für jeden einsehbar ;)

                Nein, das ist nicht vergleichbar, dort hat ja ein Fehler bei der Geheimhaltung dafür gesorgt, dass die Daten in die "freie Wildbahn" gelangten.

                Aber wenn soetwas "clientseitiges" nicht möglich ist, dann muss ich mir was anderes überlegen. Vielleicht muss doch das eigene Login-System her (dann aber mit PHP ;) ).

                Uh, warum gerade mit PHP?

                --
                Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
                Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|
                1. Uh, warum gerade mit PHP?

                  Weil ich mit PHP besser zurecht komme, als mit JavaScript.

                  MfG, Matthias

  2. Das funktioniert soweit auch ganz gut, bis man feststellt, dass man nicht auf "http://de.wikipedia.org/" bleibt, wenn man dies aufruft, sondern zu "http://de.wikipedia.org/wiki/Wikipedia:Hauptseite" weitergeleitet wird.
    Von getElementByID wird einem jedoch "vorgegaukelt", dass man auf "http://de.wikipedia.org/" sei.

    Das src-Attribut gibt wieder, was du im HTML-Code ursprünglich gesetzt hast bzw. mittels JavaScript nachträglich verändert hast.
    Wenn der Anwender im Frame navigiert hat, dann kannst du das nicht über das src-Attribut herausbekommen.

    Gibt es eine Möglichkeit, dass die tatsächlich im iFrame angezeigte URL ausgegeben wird

    document.getElementById("iframe").contentWindow.location.href

    Das geht aber nur, wenn sich die angezeigte Seite im Iframe auf derselben Domain befindet wie die einbindende Seite. Sonst schlägt die Same Origin Policy zu und unterbindet den Domain-übergreifenden Zugriff.

    Auch von mir die Bitte, mal deine Aufgabenstellung näher zu erläutern; aus deinem Beispiel wird das nicht ganz klar.

    Mathias