Apakah ada cara sederhana untuk mendapatkan URL saat ini dari iframe?
Penampil akan melalui banyak situs. Saya menduga saya akan menggunakan sesuatu dalam javascript.
Apakah ada cara sederhana untuk mendapatkan URL saat ini dari iframe?
Penampil akan melalui banyak situs. Saya menduga saya akan menggunakan sesuatu dalam javascript.
Jawaban:
Demi alasan keamanan, Anda hanya bisa mendapatkan url selama konten iframe, dan javascript referensi, disajikan dari domain yang sama. Selama itu benar, hal seperti ini akan berhasil:
document.getElementById("iframe_id").contentWindow.location.href
Jika kedua domain tidak cocok, Anda akan mengalami pembatasan keamanan skripting referensi lintas situs.
Lihat juga jawaban untuk pertanyaan serupa .
sandbox="allow-same-origin"
ke iFrame?
Jika iframe Anda berasal dari domain lain, (lintas domain), jawaban lain tidak akan membantu Anda ... Anda hanya perlu menggunakan ini:
var currentUrl = document.referrer;
dan - di sini Anda mendapatkan url utama!
Semoga ini akan membantu beberapa bagaimana dalam kasus Anda, saya menderita masalah yang sama persis, dan hanya menggunakan penyimpanan lokal untuk berbagi data antara jendela induk dan iframe. Jadi di jendela induk Anda dapat:
localStorage.setItem("url", myUrl);
Dan dalam kode di mana sumber iframe hanya mendapatkan data ini dari penyimpanan lokal:
localStorage.getItem('url');
Menghemat banyak waktu saya. Sejauh yang saya bisa lihat, satu-satunya syarat adalah akses ke kode halaman induk. Semoga ini bisa membantu seseorang.
Jika Anda berada dalam konteks iframe,
Anda bisa melakukannya
const currentIframeHref = new URL(document.location.href);
const urlOrigin = currentIframeHref.origin;
const urlFilePath = decodeURIComponent(currentIframeHref.pathname);
Jika Anda berada di jendela / bingkai induk, maka Anda dapat menggunakan jawaban https://stackoverflow.com/a/938195/2305243 , yaitu
document.getElementById("iframe_id").contentWindow.location.href
Saya mengalami masalah dengan hrefs url blob. Jadi, dengan referensi ke iframe, saya baru saja menghasilkan url dari atribut src iframe:
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");
}
Beberapa informasi tambahan untuk siapa saja yang mungkin bergumul dengan ini:
Anda akan mendapatkan nilai null jika Anda mencoba mendapatkan URL dari iframe sebelum dimuat. Saya memecahkan masalah ini dengan membuat seluruh iframe dalam javascript dan mendapatkan nilai yang saya butuhkan dengan fungsi onLoad:
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);
Karena kebijakan asal yang sama, saya mengalami masalah saat mengakses frame "lintas asal" - saya mengatasinya dengan menjalankan server web secara lokal alih-alih menjalankan semua file langsung dari disk saya. Agar semua ini berfungsi, Anda harus mengakses iframe dengan protokol, nama host, dan port yang sama dengan aslinya. Tidak yakin yang mana yang hilang saat menjalankan semua file dari disk saya.
Juga, lebih lanjut tentang objek lokasi: https://www.w3schools.com/JSREF/obj_location.asp
Jika Anda berada di dalam iframe yang tidak memiliki lintas domain src, atau src kosong:
Kemudian:
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
}
}
Jika Anda berada di dalam iframe dengan src lintas domain:
Kemudian:
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;
}
}