Geçerli URL'yi bir iframe'den almanın basit bir yolu var mı?
İzleyici birden çok siteden geçiyordu. Sanırım javascript'te bir şey kullanacağım.
Yanıtlar:
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 .
sandbox="allow-same-origin"
iFrame'e eklersek ?
İ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!
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.
İ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
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");
}
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
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;
}
}