Aktuelle URL von IFRAME abrufen


88

Gibt es eine einfache Möglichkeit, die aktuelle URL von einem Iframe abzurufen?

Der Betrachter würde mehrere Websites durchlaufen. Ich vermute, ich würde etwas in Javascript verwenden.


2
Wenn Sie hierher gekommen sind, um nach der URL der "übergeordneten" Seite des Iframes zu
suchen

Antworten:


160

Aus Sicherheitsgründen können Sie die URL nur so lange abrufen, wie der Inhalt des Iframes und das referenzierende Javascript von derselben Domain bereitgestellt werden. Solange das stimmt, wird so etwas funktionieren:

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

Wenn die beiden Domänen nicht übereinstimmen, treten Sicherheitsbeschränkungen für Cross-Site-Referenzskripte auf.

Siehe auch Antworten auf eine ähnliche Frage .


Wissen Sie, ob die von der Gewinnerantwort bereitgestellte Lösung funktioniert? Ich konnte es nicht auf meinem Computer (IE, Windows) zum
Laufen bringen

Ich habe über den Link gesprochen, den Sie zu der ähnlichen Frage aufgeführt haben.
Chris

Die Frage, die ich verlinkt habe, enthält keine gewinnbringende Antwort. Wenn Sie die oberste Antwort meinen, ist dies keine wirklich funktionierende Lösung. Mit IE können Sie den HTA-Ansatz ausprobieren, der auch in den Antworten auf die oben genannte Frage enthalten ist.
kkyy

15
Dies funktioniert nicht, wenn Ihr iframe src aus einer anderen Domäne stammt.
Confile

Was ist, wenn wir das Attribut sandbox="allow-same-origin"dem iFrame hinzufügen?
Roel

26

Wenn Ihr Iframe von einer anderen Domain stammt (domänenübergreifend), helfen Ihnen die anderen Antworten nicht weiter. Sie müssen lediglich Folgendes verwenden:

var currentUrl = document.referrer;

und - hier hast du die Haupt-URL!


27
-1 Das OP sucht nach der aktuellen URL des Iframes, nicht nach dem Referrer der übergeordneten Seite.
Christophe

15
@Christophe - Ich weiß, aber es kann Leuten helfen, die nach der Haupt-URL suchen und auf diese Frage gekommen sind!
ParPar

6
gr8 .. Das hilft mir
Vikky

1
Dies ist genau das, wonach ich gesucht habe, und es löst mein Problem, ohne dass ich einen X-Script-Fehler bekomme. +1 dafür
Ulysses Alves

1
Ausgezeichnet, ich brauche die Iframe-URL, nicht die Eltern :)
speti43

4

Ich hoffe, dies wird einigen helfen, da ich in Ihrem Fall genau das gleiche Problem hatte und nur localstorage verwendet habe, um die Daten zwischen dem übergeordneten Fenster und dem Iframe zu teilen. Im übergeordneten Fenster können Sie also:

localStorage.setItem("url", myUrl);

Und in Code, in dem die Iframe-Quelle nur diese Daten von localstorage erhält:

localStorage.getItem('url');

Hat mir viel Zeit gespart. Soweit ich sehen kann, ist die einzige Bedingung der Zugriff auf den übergeordneten Seitencode. Hoffe das wird jemandem helfen.


3
Der lokale Speicher funktioniert nur in derselben Domäne. Warum also mit all diesen Problemen umgehen? Fragen Sie einfach den location.href
Yuki

3

Wenn Sie sich im iframe-Kontext befinden,

du könntest es tun

const currentIframeHref = new URL(document.location.href);
const urlOrigin = currentIframeHref.origin;
const urlFilePath = decodeURIComponent(currentIframeHref.pathname);

Wenn Sie sich im übergeordneten Fenster / Frame befinden, können Sie die Antwort von https://stackoverflow.com/a/938195/2305243 verwenden

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

1

Ich hatte ein Problem mit Blob URL Hrefs. Mit einem Verweis auf den Iframe habe ich gerade eine URL aus dem src-Attribut des Iframes erstellt:

    const iframeReference = document.getElementById("iframe_id");
    const iframeUrl = iframeReference ? new URL(iframeReference.src) : undefined;
    if (iframeUrl) {
        console.log("Voila: " + iframeUrl);
    } else {
        console.warn("iframe with id iframe_id not found");
    }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.