Oke, saya punya halaman di dan di halaman ini saya punya iframe. Apa yang perlu saya lakukan adalah di halaman iframe, cari tahu apa URL halaman utama itu.
Saya telah mencari-cari dan saya tahu bahwa ini tidak mungkin jika halaman iframe saya berada di domain yang berbeda, karena itu adalah skrip lintas situs. Tetapi di mana-mana saya baca mengatakan bahwa jika halaman iframe berada pada domain yang sama dengan halaman induk, itu harus berfungsi jika saya lakukan misalnya:
parent.document.location
parent.window.document.location
parent.window.location
parent.document.location.href
... atau kombo serupa lainnya, karena tampaknya ada beberapa cara untuk mendapatkan info yang sama.
Bagaimanapun, jadi inilah masalahnya. Iframe saya ada di domain yang sama dengan halaman utama, tetapi tidak di domain SUB yang sama. Jadi misalnya saya punya
http: // www.mysite.com/pageA.html
dan kemudian URL iframe saya adalah
http: // qa-www.mysite.com/pageB.html
Ketika saya mencoba mengambil URL dari pageB.html
(halaman iframe), saya terus mendapatkan kesalahan ditolak akses yang sama. Jadi tampaknya bahkan sub-domain dihitung sebagai skrip lintas situs, apakah itu benar, atau apakah saya melakukan sesuatu yang salah?
sumber
<iframe src="url?parent=parent-url"></iframe>
Jawaban:
Kamu benar. Subdomain masih dianggap sebagai domain terpisah saat menggunakan iframe. Dimungkinkan untuk meneruskan pesan menggunakan
postMessage(...)
, tetapi API JS lainnya sengaja dibuat tidak dapat diakses.URL juga masih mungkin tergantung pada konteksnya. Lihat jawaban lain untuk lebih jelasnya.
sumber
Ya, mengakses URL halaman induk tidak diizinkan jika iframe dan halaman utama tidak dalam domain (sub) yang sama. Namun, jika Anda hanya perlu URL halaman utama (yaitu URL browser), Anda dapat mencoba ini:
catatan:
window.parent.location
Diperbolehkan; itu menghindari kesalahan keamanan dalam OP, yang disebabkan oleh mengakseshref
properti:window.parent.location.href
menyebabkan "Memblokir bingkai dengan asal ..."document.referrer
merujuk ke "URI halaman yang terhubung ke halaman ini." Ini mungkin tidak mengembalikan dokumen yang berisi jika beberapa sumber lain yang menentukaniframe
lokasi, misalnya:document.referrer
akan menjadi Domain 3 , bukan yang mengandung Domain 1document.location
merujuk ke "objek Lokasi, yang berisi informasi tentang URL dokumen"; mungkin dokumen saat ini, yaitu iframe saat ini terbuka. Ketikawindow.location === window.parent.location
, maka iframe inihref
adalah sama sebagai induk mengandung Inihref
.sumber
document.domain
bingkai paling atas dan paling dalam. mungkin.var url = (parent !== window) ? document.referrer : document.location;
Referer-Policy
tajuk.Saya baru saja menemukan solusi untuk masalah ini yang sangat sederhana, namun saya belum menemukan diskusi di mana pun yang menyebutkannya. Itu memang membutuhkan kontrol dari frame induk.
Di iFrame Anda, katakan Anda menginginkan iframe ini: src = "http://www.example.com/mypage.php"
Nah, alih-alih HTML untuk menentukan iframe, gunakan javascript untuk membangun HTML untuk iframe Anda, dapatkan url induk melalui javascript "at build time", dan kirim sebagai parameter GET url dalam querystring target src Anda, seperti begitu:
Kemudian, cari sendiri fungsi parsing url javascript yang mem-parsing string url untuk mendapatkan variabel url yang Anda cari, dalam hal ini "url".
Saya menemukan parser string url yang bagus di sini: http://www.netlobo.com/url_query_string_javascript.html
sumber
Jika iframe Anda dari domain lain, (lintas domain), Anda hanya perlu menggunakan ini:
dan - di sini Anda mendapatkan url utama!
sumber
window.location.reload(true)
) Ini tidak berfungsi lagi. Maka referer adalah URL iframe itu sendiri.Untuk halaman di domain yang sama dan subdomain yang berbeda, Anda dapat mengatur
document.domain
properti melalui javascript.Baik frame induk dan iframe perlu mengatur document.domain mereka ke sesuatu yang umum di antara mereka.
yaitu
www.foo.mydomain.com
danapi.foo.mydomain.com
masing-masing dapat menggunakan salah satufoo.mydomain.com
atau hanyamydomain.com
dan kompatibel (tidak, Anda tidak dapat mengatur keduanya untukcom
, karena alasan keamanan ...)juga, perhatikan bahwa document.domain adalah jalan satu arah. Pertimbangkan menjalankan tiga pernyataan berikut secara berurutan:
Browser modern juga dapat menggunakan window.postMessage untuk berbicara lintas asal, tetapi tidak akan berfungsi di IE6. https://developer.mozilla.org/en/DOM/window.postMessage
sumber
Baris berikut akan berfungsi: yang
document.location.ancestorOrigins[0]
ini mengembalikan nama domain leluhur.sumber
document.location.ancestorOrigins
kembaliundefined
untuk sayaCobalah:
Ketika Anda mengubah Anda berada di iframe, host Anda adalah "pengarah".
sumber
Saya punya masalah dengan ini. Jika menggunakan bahasa seperti php saat laman Anda pertama kali memuat iframe grab
$_SERVER['HTTP_REFFERER']
dan atur ke variabel sesi.Dengan cara ini ketika halaman dimuat di iframe Anda tahu url induk lengkap dan string kueri dari halaman yang memuatnya. Dengan keamanan lintas browser itu sedikit sakit kepala mengandalkan window.parent apa pun jika Anda domain yang berbeda.
sumber
Saya menemukan bahwa contoh di atas menyarankan bekerja sebelumnya ketika skrip dieksekusi di iframe namun tidak mengambil url ketika skrip dieksekusi di luar iframe, diperlukan sedikit penyesuaian:
sumber
Saya tidak bisa mendapatkan solusi sebelumnya untuk bekerja tetapi saya menemukan bahwa jika saya mengatur scr iframe dengan misalnya
http:otherdomain.com/page.htm?from=thisdomain.com/thisfolder
maka saya bisa, dalam ekstrak iframethisdomain.com/thisfolder
dengan menggunakan javascript berikut:sumber
Masalahnya dengan PHP $ _SERVER ['HTTP_REFFERER'] adalah ia memberikan url halaman yang sepenuhnya memenuhi syarat dari halaman yang membawa Anda ke halaman induk. Itu tidak sama dengan halaman induk, itu sendiri. Lebih buruk lagi, terkadang tidak ada http_referer, karena orang tersebut mengetikkan url dari halaman induknya. Jadi, jika saya sampai ke halaman orang tua Anda dari yahoo.com, maka yahoo.com menjadi http_referer, bukan halaman Anda.
sumber
Saya telah menemukan dalam kasus di mana
$_SERVER['HTTP_REFERER']
tidak berfungsi (saya sedang melihat Anda, Safari),$_SERVER['REDIRECT_SCRIPT_URI']
telah menjadi cadangan yang berguna.sumber
Di chrome dimungkinkan untuk menggunakan location.ancestorOrigins Ini akan mengembalikan semua url induk
sumber
Saya tahu itu super tua tapi itu menghembus pikiran saya tidak ada yang merekomendasikan hanya melewati cookie dari satu domain ke domain lainnya. Saat Anda menggunakan subdomain, Anda dapat membagikan cookie dari domain dasar ke semua subdomain hanya dengan menyetel cookie ke url
.basedomain.com
Kemudian Anda dapat membagikan data apa pun yang Anda butuhkan melalui cookie.
sumber
Ini berhasil bagi saya untuk mengakses url iframe src.
sumber
Dapatkan semua fungsi Iframe Induk dan HTML
sumber