Wie erhalte ich den aktuellen Standort eines Iframes?

Lesezeit: 7 Minuten

Ich habe eine grundlegende Dateneingabeanwendung erstellt, die es Benutzern ermöglicht, externe Inhalte in iFrame zu durchsuchen und Daten schnell von derselben Seite aus einzugeben. Eine der Datenvariablen ist die URL. Idealerweise möchte ich die aktuelle Iframe-URL in ein Textfeld mit Javascript laden können. Mir ist jetzt klar, dass dies aus Sicherheitsgründen nicht passieren wird.

Hat jemand serverseitig etwas gemacht? oder kennen Sie einen .Net-Browser in den Browsersteuerelementen. Das ultimative Ziel ist es, dem Benutzer eine einfache Methode zum Extrahieren der URL der Seite zu geben, die er im iframe anzeigt. Es muss nicht unbedingt ein iframe sein, ein Browser im Browser wäre ideal.

Danke Adam

Wie erhalte ich den aktuellen Standort eines Iframes
Joaquín Cuenca Abela

Ich habe einige Tests in Firefox 3 durchgeführt und den Wert von verglichen .src und .documentWindow.location.href in einem (n iframe. (Beachten Sie das documentWindow wird genannt contentDocument in Chrome, also statt .documentWindow.location.href in Chrome wird es sein .contentDocument.location.href.)

src ist immer die letzte URL, die im Iframe ohne Benutzerinteraktion geladen wurde. Das heißt, es enthält den ersten Wert für die URL oder den letzten Wert, den Sie mit Javascript aus dem enthaltenden Fenster eingerichtet haben:

document.getElementById("myiframe").src="http://www.google.com/";

Wenn der Benutzer innerhalb des Iframes navigiert, können Sie nicht mehr mit src auf den Wert der URL zugreifen. Wenn im vorherigen Beispiel der Nutzer www.google.com verlässt und Sie Folgendes tun:

alert(document.getElementById("myiframe").src);

Du bekommst noch “http://www.google.com“.

documentWindow.location.href ist nur verfügbar, wenn der iframe eine Seite in derselben Domäne wie das enthaltende Fenster enthält, aber wenn es verfügbar ist, enthält es immer den richtigen Wert für die URL, selbst wenn der Benutzer im iframe navigiert.

Wenn Sie versuchen, darauf zuzugreifen documentWindow.location.href (oder irgendetwas darunter documentWindow) und der Iframe befindet sich auf einer Seite, die nicht zur Domäne des enthaltenden Fensters gehört, wird eine Ausnahme ausgelöst:

document.getElementById("myiframe").src="http://www.google.com/";
alert(document.getElementById("myiframe").documentWindow.location.href);
Error: Permission denied to get property Location.href

Ich habe keinen anderen Browser getestet.

Ich hoffe es hilft!

  • Vielen Dank für den Hinweis, Billy. Ich habe die Antwort mit Anweisungen zum Zugriff auf die href in Chrome aktualisiert. Ich habe keinen anderen Browser getestet.

    – Joaquín Cuenca Abela

    2. Juni 2011 um 15:44 Uhr

  • Können Sie mir helfen? Wenn ich benutze document.getElementById("myiframe").src, erhalte ich den Anfangszustand, egal ob src auf meiner Domain liegt oder nicht. Und wenn ich benutze document.getElementById("myiframe").documentWindow.location.href Ich bekomme ein TypeError: document.getElementById("myiframe").documentWindow is undefined Haben Sie eine Idee, warum ich einen TypeError bekommen kann?

    – Nikolai

    17. Februar 2012 um 3:01 Uhr


  • Nikolay, versuche document.getElementById(“myiframe”).contentDocument.location.href

    – Joaquín Cuenca Abela

    25. Februar 2012 um 10:12 Uhr

  • Hallo Joaquin, wie du erwähnt hast, ist src die letzte geladene URL. Ist es möglich, die aktuelle href anzuzeigen?

    – Jackson Christopher

    27. September 2021 um 5:31 Uhr

document.getElementById('iframeID').contentWindow.location.href

Sie können überhaupt nicht auf den domänenübergreifenden Iframe-Standort zugreifen.

  • So einfach geht das, wenn der Browser das zulässt. In meiner Antwort sehen Sie genau denselben DOM-Pfad, der in Safari, Chrome, Firefox 3+ oder IE * nicht funktioniert, da er unsicher ist.

    – Antonius

    24. August 2009 um 7:23 Uhr

  • Wie ich in meiner Antwort darauf hingewiesen habe, funktioniert dies nicht, wenn die URL in iframeID außerhalb der Domäne des enthaltenden Fensters liegt.

    – Joaquín Cuenca Abela

    6. Juli 2012 um 9:49 Uhr

Ich benutze das.

var iframe = parent.document.getElementById("theiframe");
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;

var currentFrame = innerDoc.location.href;

HTA funktioniert wie eine normale Windows-Anwendung.
Sie schreiben HTML-Code und speichern ihn als .hta-Datei.

Allerdings gibt es zumindest einen Nachteil: Der Browser kann keine .hta-Datei öffnen; Es wird wie ein normales .exe-Programm behandelt. Wenn Sie also einen Link zu einer .hta-Datei auf Ihrer Webseite platzieren, wird ein Download-Dialog geöffnet, in dem Sie gefragt werden, ob Sie die HTA-Datei öffnen oder speichern möchten. Wenn es für Sie kein Problem ist, können Sie auf “Öffnen” klicken und es öffnet sich ein neues Fenster (das keine Symbolleisten hat, also keine Zurück-Schaltfläche, weder Adressleiste noch Menüleiste).

Ich musste etwas tun, das dem, was Sie wollen, sehr ähnlich ist, aber anstatt iframesIch habe eine echte frameset.
Die Hauptseite muss eine .hta-Datei sein; die andere sollte eine normale .htm-Seite sein (oder .php oder was auch immer).

Hier ist ein Beispiel einer HTA-Seite mit 2 Frames, wobei der obere eine Schaltfläche und ein Textfeld hat, das die zweite Frame-URL enthält; Die Schaltfläche aktualisiert das Feld:

frameset.hta

<html>
    <head>
        <title>HTA Example</title>
        <HTA:APPLICATION id="frames" border="thin" caption="yes" icon="http://www.google.com/favicon.ico" showintaskbar="yes" singleinstance="no" sysmenu="yes" navigable="yes" contextmenu="no" innerborder="no" scroll="auto" scrollflat="yes" selection="yes" windowstate="normal"></HTA:APPLICATION>
    </head>
    <frameset rows="60px, *">
        <frame src="https://stackoverflow.com/questions/44359/topo.htm" name="topo" id="topo" application="yes" />
        <frame src="http://www.google.com" name="conteudo" id="conteudo" application="yes" />
    </frameset>
</html>
  • Dort ist ein HTA:APPLICATION Tag, das einige Eigenschaften für die Datei festlegt; Es ist gut zu haben, aber es ist kein Muss.
  • Sie BRAUCHEN ein platzieren application="yes" an den Tags der Frames. Es sagt, dass sie auch zum Programm gehören und Zugriff auf alle Daten haben sollten (wenn Sie dies nicht tun, zeigen die Frames immer noch den Fehler, den Sie zuvor hatten).

topo.htm

<html>
    <head>
        <title>Topo</title>
        <script type="text/javascript">
            function copia_url() {
                campo.value = parent.conteudo.location;
            }
        </script>
    </head>
    <body style="background: lightBlue;" onload="copia_url()">
        <input type="button" value="Copiar URL" onclick="copia_url()" />
        <input type="text" size="120" id="campo" />
    </body>
</html>
  • Sie sollten bemerken, dass ich keine getElement-Funktion verwendet habe, um das Feld abzurufen; In einer HTA-Datei werden alle Elemente, die eine ID haben, sofort zu einem Objekt

Ich hoffe, das hilft Ihnen und anderen, die zu dieser Frage kommen. Es hat mein Problem gelöst, das sieht aus wie das gleiche wie Sie haben.

Weitere Informationen finden Sie hier: http://www.irt.org/articles/js191/index.htm

Viel Spaß =]

Ich mag Ihre serverseitige Idee, auch wenn meine vorgeschlagene Implementierung ein wenig nach Ghetto klingt.

Sie könnten die .innerHTML des Iframes auf die HTML-Inhalte setzen, die Sie serverseitig abrufen. Je nachdem, wie Sie dies erfassen, müssen Sie auf relative und absolute Pfade achten.

Plus, abhängig davon, wie die Seite, die Sie abrufen, mit anderen Seiten interagiert, könnte dies überhaupt nicht funktionieren (Cookies, die für die Seite, die Sie abrufen, gesetzt werden, funktionieren nicht über Domänen hinweg, vielleicht wird der Status in Javascript verfolgt … Viele Gründe das könnte nicht funktionieren.)

Ich glaube nicht, dass es theoretisch möglich ist, den aktuellen Status der Seite zu verfolgen, die Sie spiegeln möchten, aber ich bin mir nicht sicher. Die Site könnte alle möglichen Dinge serverseitig verfolgen, Sie haben keinen Zugriff auf diesen Status. Stellen Sie sich den Fall vor, in dem beim Laden einer Seite eine Variable serverseitig auf einen Zufallswert gesetzt wird. Wie würden Sie diesen Zustand erfassen?

Helfen diese Ideen bei irgendetwas?

-Brian J. Stina-

1645907711 656 Wie erhalte ich den aktuellen Standort eines Iframes
Thomas Hansen

Sie können verwenden Ra-Ajax und haben einen Iframe, der z. B. in ein Fenstersteuerelement eingeschlossen ist. Obwohl ich die Leute im Allgemeinen nicht dazu ermutige, iFrames (z irgendetwas)

Eine andere Alternative besteht darin, den HTML-Code auf den Server zu laden und ihn direkt als Inhalt eines Labels oder so in das Fenster zu senden. Sehen Sie sich an, wie dies Ajax-RSS-Parser lädt die RSS-Elemente in die Quelle, die heruntergeladen werden können Hier (Open-Source-LGPL)

(Disclaimer; ich arbeite mit Ra-Ajax…)

Hilft das?

http://www.quirksmode.org/js/iframe.html

Ich habe das nur in Firefox getestet, aber wenn Sie so etwas haben:

<iframe name="myframe" id='myframe' src="http://www.google.com"></iframe>

Sie können seine Adresse erhalten, indem Sie Folgendes verwenden:

document.getElementById('myframe').src

Ich bin mir nicht sicher, ob ich deine Frage richtig verstanden habe, aber trotzdem 🙂

  • Dadurch erhalten Sie nur den Anfangszustand, nicht den aktuellen Zustand

    – Annakata

    22. Dezember 2008 um 10:53 Uhr

867950cookie-checkWie erhalte ich den aktuellen Standort eines Iframes?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy