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
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:
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:
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?
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:
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).
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.
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-
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)