IFRAME'den güncel URL alın


Yanıtlar:


167

Güvenlik nedenleriyle, url'yi yalnızca iframe'in içeriği ve başvuran javascript aynı etki alanından sunulduğu sürece alabilirsiniz. Bu doğru olduğu sürece, bunun gibi bir şey çalışacaktır:

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

İki etki alanı uyumsuzsa, siteler arası referans komut dosyası çalıştırma güvenlik kısıtlamalarıyla karşılaşırsınız.

Benzer bir sorunun yanıtlarına da bakın .


kazanan cevabın sağladığı çözümün işe yarayıp yaramadığını biliyor musunuz? Bilgisayarımda çalışmasını sağlayamadım (IE, Windows)
chris

Benzer soruya listelediğiniz bağlantıdan bahsediyordum.
chris

Bağladığım soruda kazanan bir cevap yok ... En üstteki cevabı kastediyorsanız, bu gerçekten çalışan bir çözüm değil. IE ile, yukarıda bahsedilen soruya verilen cevaplarda da verilen STD yaklaşımını deneyebilirsiniz.
kkyy

18
İframe src'niz farklı bir etki alanındaysa bu çalışmaz.
2016

Ya özniteliği sandbox="allow-same-origin"iFrame'e eklersek ?
Roel

26

İframe'iniz başka bir etki alanından (etki alanları arası) ise, diğer yanıtlar size yardımcı olmayacaktır ... Bunu kullanmanız yeterlidir:

var currentUrl = document.referrer;

ve - burada ana url'ye sahipsiniz!


28
-1 OP, üst sayfanın yönlendirenini değil, iframe'in geçerli url'sini arıyor.
Christophe

15
@Christophe - Biliyorum, ancak ana url'yi arayan ve bu soruya gelen insanlara yardımcı olabilir!
ParPar

6
gr8 .. Bu bana yardımcı oluyor
Vikky

1
Bu tam olarak aradığım şeydi ve sorunumu bana X-Script hatası vermeden çözdü. Bunun için +1
Ulysses Alves

1
Mükemmel, üst
öğeye

4

Umarım bu, sizin durumunuzda tam olarak aynı problemi yaşadım ve veriyi ana pencere ile iframe arasında paylaşmak için yerel depolamayı kullandım. Yani ana pencerede şunları yapabilirsiniz:

localStorage.setItem("url", myUrl);

Ve iframe kaynağının bu verileri yerel depolamadan aldığı kodda:

localStorage.getItem('url');

Bana çok zaman kazandırdı. Görebildiğim kadarıyla tek koşul, ana sayfa koduna erişim. Umarım bu birine yardımcı olur.


4
yerel depolama yalnızca aynı etki alanında çalışır ... öyleyse neden tüm bu sorunla uğraşasınız ki? sadece konumu sorgulayın.
Yuki

3

İframe bağlamındaysanız,

yapabilirsin

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

Ana pencere / çerçevedeyseniz, https://stackoverflow.com/a/938195/2305243'ün cevabını kullanabilirsiniz.

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

1

Blob url hrefs ile ilgili bir sorun yaşadım. Bu nedenle, iframe referansıyla, iframe'in src özelliğinden bir url oluşturdum:

    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");
    }

0

Bununla mücadele eden herkes için bazı ek bilgiler:

Yüklenmeden önce iframe'den URL almaya çalışıyorsanız, boş değerler alacaksınız. Tüm iframe'i javascript'te oluşturarak ve onLoad fonksiyonu ile ihtiyacım olan değerleri alarak bu sorunu çözdüm:

var iframe = document.createElement('iframe');
iframe.onload = function() {

    //some custom settings
    this.width=screen.width;this.height=screen.height; this.passing=0; this.frameBorder="0";

    var href = iframe.contentWindow.location.href;
    var origin = iframe.contentWindow.location.origin;
    var url = iframe.contentWindow.location.url;
    var path = iframe.contentWindow.location.pathname;

    console.log("href: ", href)
    console.log("origin: ", origin)
    console.log("path: ", path)
    console.log("url: ", url)
};

iframe.src = 'http://localhost/folder/index.html';

document.body.appendChild(iframe);

Aynı kaynak ilkesi nedeniyle, "çapraz kaynak" çerçevelerine erişirken sorunlar yaşadım - tüm dosyaları doğrudan diskimden çalıştırmak yerine yerel olarak bir web sunucusu çalıştırarak bunu çözdüm. Tüm bunların çalışması için, iframe'e kaynak olarak aynı protokol, ana bilgisayar adı ve bağlantı noktası ile erişmeniz gerekir. Diskimdeki tüm dosyaları çalıştırırken bunlardan hangisinin eksik / eksik olduğundan emin değilim.

Ayrıca, konum nesneleri hakkında daha fazla bilgi: https://www.w3schools.com/JSREF/obj_location.asp


0

Etki alanları arası src içermeyen bir iframe içindeyseniz veya src boşsa:

Sonra:

function getOriginUrl() {
    var href = document.location.href;
    var referrer = document.referrer;
    // Check if window.frameElement not null
    if(window.frameElement) {
        href = window.frameElement.ownerDocument.location.href;
        // This one will be origin
        if(window.frameElement.ownerDocument.referrer != "") {
            referrer = window.frameElement.ownerDocument.referrer;
        }
    }
    // Compare if href not equal to referrer
    if(href != referrer) {
        // Take referrer as origin
        return referrer;
    } else {
        // Take href
        return href
    }
}

Etki alanları arası src'ye sahip bir iframe içindeyseniz:

Sonra:

function getOriginUrl() {
    var href = document.location.href;
    var referrer = document.referrer;
    // Detect if you're inside an iframe
    if(window.parent != window) {
        // Take referrer as origin
        return referrer;
    } else {
        // Take href
        return href;
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.