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.

chris
quelle
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 .

kkyy
quelle
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!

ParPar
quelle
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.

Beny
quelle
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
Alan Dong
quelle
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");
    }
rauben
quelle