Per JavaScript die URL vom IFrame bestimmen



  • Hallo!
    Ich habe in einer HTML-Datei ein iframe eingebettet und darüber einen Button. Beim Drücken des Buttons wird ein Skript ausgeführt, welches u.a. die aktuelle URL des iframes benötigt. Aber wie komme ich daran? Der iframe hat einen Namen, z.B. "MyFrame", so dass mir "document.MyFrame" das window-Objekt liefert. Innerhalb eines Window-Objekts sollte doch das Document-Objekt verfügbar sein, sodass man schliesslich über "document.MyFrame.document.URL" das gewünschte erhalten sollte? Allerdings ist bei mir "document.MyFrame.document" bereits "undefined". Was mache ich falsch? Bin für jeden Tipp dankbar. Schon mal vielen Dank für eure Hilfe.
    Gruß,
    Wischmop

    Hier mal meine kleine Test-Seite:

    <html>
    <body>
    <button onClick="alert(document.myframe.document.URL)">test</button><br>
    <iframe name="myframe" src="http://www.heise.de/newsticker"></iframe>
    </body>
    </html>



  • myframe.location.href 🙄



  • Klappt aber so wie es aussieht (zumindest im IE) nur, wenn im iframe keine URL von einem anderen Host geladen wurde 😞
    Sonst kommt: Zugriff verweigert 😕



  • Habe es nochmal mit MyFrame.document.URL bei dem gleichen Host getestet (also nicht www.heise.de) und so funktioniert es, aber natürlich auch mit MyFrame.location.href . Mein Problem ist allerdings, dass ich in meiner Seite einen IFrame einbetten will, in dem der User normal surfen können soll und nach dem Drücken eines Button ausserhalb des iframes soll die momentane URL des IFrames meinem Server übermittels werden, sodass die neue Seite wieder den IFrame enthält, aber als source die URL, wo der User als letztes war. Kann man da nichts machen? Kommt man mit signierten Scripts vielleicht weiter?



  • Wenn du über location.href dem iframe eine neue URL zuweist kannst du in dem aufgerufenen Script der Referer abfragen 😉



  • Hallo Flenders,
    das ist eine sehr coole Idee. Wenn ich das richtig verstanden habe, meinst Du das also so, dass wenn der User auf einen Button ausserhalb des IFrames klickt, wechsel ich erst einmal die Eigenschaft location.href des IFrames auf eine definierte URL meines Webservers. Innerhalb dieser Seitenabfrage erhalte ich dann anhand von "HTTP_REFERER" die URL, die zuvor im IFrame angezeigt wurde.
    Dies liesse sich bei meinem Projekt realisieren. Ich habe das auch gleich mal getestet, aber jetzt stelle ich fest, dass ich die Eigenschaft location.href des IFrames auch nicht schreibend verwenden kann, wenn der IFrame zuvor die URL eines anderen Hosts enthält. Ist allerdings auch klar, denn "MyFrame.location" ist bereits undefined.
    Schade, Dein Vorschlag hat mir sehr gut gefallen, wenn ich es richtig verstanden habe.
    Hast Du vielleicht noch einen Tipp parat oder falls ich Dich falsch verstanden habe, kannst Du mir es nochmal genauer erklären?
    Das muss doch irgendwie gehen...

    Gruß,
    Wischmop



  • Komisch - heute bekomme ich als Referer immer die URL der Seite, in die das iframe eingebettet ist 😕



  • Aaalsooo,
    ich habe nicht das Problem, dass ich den Referer nicht angezeigt bekomme (bzw. bekommen würde). Mein Problem ist, dass ich Eigenschaft document.MyIFrame.location.href nicht ändern kann, weil document.MyIFrame.location bereits 'undefined' ist, sobald die Seite im iframe von einem anderen Host stammt. So ist es zumindestens mit dem Konqueror-Browser.

    Mit Mozilla (habe noch Version 1.1) habe ich noch ein anderes Problem: Und zwar ist document.MyIFrame bereits 'undefined' und zwar immer, egal von welchem Host die im iframe angezeigte Seite stammt. Aber das ist erst mal nebensächlich, auch wenn ich das noch lösen muss...

    Ich hoffe, dass ich mein Problem nun verständlich geschildert habe, manchmal neige ich dazu einfache Sachverhalte kompliziert auszudrücken 😉

    Um die Verwirrung komplett zu machen, hier nochmal meine Testseite:

    <html>
    <head>
    <title>Test</title>
    </head>
    <body>
    <script  type="text/javascript">
    <!-- Begin
    function test_it(){
      if(typeof(document)=="undefined")
        alert("document undefined")
      else if(typeof(document.MyIFrame)=="undefined")
        alert("document.MyIFrame undefined")
      else if(typeof(document.MyIFrame.location)=="undefined")
        alert("document.MyIFrame.location undefined")
      else if(typeof(document.MyIFrame.location.href)=="undefined")
        alert("document.MyIFrame.location.href undefined")
      else
        document.MyIFrame.location.href="http://127.0.0.1"
    }
    //-->
    </script>
    <iframe name="MyIFrame" src="http://www.c-plusplus.net">
    <p>Scheiss Browser!
    </iframe>
    <button onClick="test_it()">test</button><br>
    </body>
    </html>
    


  • Versuch's mal mit

    document.getElementsByName("MyIFrame")[0].src="http://127.0.0.1"
    

    funktioniert aber nur in neuen (DOM fähigen) Browsern



  • Hi Flenders,
    Tja, wie es scheint, hilft mir dies immer noch nicht. Aber zunächt einmal vielen Dank für die Vorgehensweise mit GetElementsByName/Id. DOM gefällt mir, werde dies nun öfters einsetzten (ausserdem funtionieren jetzt auch einige Sachen mit Mozilla, die vorher nicht liefen).
    Nun aber nochmal zum Problem:
    Ich kann zwar nun sogar die Eigenschaft document.getElementsByName("MyIFrame")[0].src lesen (das würde mir ja sogar reichen, anstatt über HTTP_REFERER), allerdings ist diese Eigenschaft immer die, die zum Beginn in <iframe src="..."> gesetzt wurde, auch wenn sich die URL im iframe durch Klicken auf einen Link geändert hat.
    Dein anderer Vorschag war der Weg über HTTP_REFER, der mir auch gefällt. Wenn ich allerdings die URL über document.getElementsByName("MyIFrame")[0].src auf eine Seite meines Webservers ändere, ist HTTP_REFERER immer ein leerer String (sowohl bei Konqueror als auch bei Mozilla).
    Mir scheint es so zu sein, als soll man vielleicht aus irgend welchen Sicherheitsgründen nicht an die URL des IFrames kommen. Deshalb habe ich auch an soetwas wie signierte Skripts gedacht...

    Naja, wenn Dir oder jemand anderem noch etwas einfällt, dann bitte her damit 😉
    Ansonsten werde ich wohl irgend wie damit leben müssen, obwohl dies natürlich sehr suboptimal ist und ich der Meinung bin, dass soetwas doch irgend wie gehen muss.

    Auf jeden Fall ein herzliches Dankeschön für die vielen Tipps!


Anmelden zum Antworten