Dengan asumsi saya tidak memiliki kontrol atas konten di iframe, apakah ada cara saya bisa mendeteksi perubahan src di dalamnya melalui halaman induk? Semacam beban mungkin?
Pilihan terakhir saya adalah melakukan tes interval 1 detik jika iframe src sama dengan sebelumnya, tetapi melakukan solusi hacky ini akan menyedot.
Saya menggunakan perpustakaan jQuery jika itu membantu.
javascript
jquery
iframe
onload
Matrym
sumber
sumber
src
properti akan berubah ketika tautan di iframe diklik? Saya tidak yakin tentang itu - jika saya harus menebak, apakah akan mengatakan "tidak". Ada beberapa cara untuk memonitor properti (di Firefox setidaknya AFAIK) tetapi saya tidak yakin apakah akan ada gunanya dalam kasus ini.src
atribut di DOM tidak berubah dalam versi terbaru FireFox atau Safari. @ Michiel jawaban di bawah ini sama baiknya dengan yang saya bisa sejauh ini.Jawaban:
Anda mungkin ingin menggunakan
onLoad
acara tersebut, seperti dalam contoh berikut:Lansiran akan muncul setiap kali lokasi dalam iframe berubah. Ini bekerja di semua browser modern, tetapi mungkin tidak berfungsi di beberapa browser yang sangat lama seperti IE5 dan Opera awal. ( Sumber )
Jika iframe menampilkan halaman dalam domain induk yang sama , Anda dapat mengakses lokasi dengan
contentWindow.location
, seperti dalam contoh berikut:sumber
this.contentWindow.location.href
saya dapatkanPermission denied to access property 'href'
this.contentWindow.location
tersedia untuk domain lain. Bahkanthis.contentWindow.location.href
tersedia untuk domain lain, tetapi hanya untuk menulis. Namun membacathis.contentWindow.location.href
terbatas pada domain yang sama.Jawaban berdasarkan JQuery <3
Seperti yang disebutkan oleh subharb, seperti dari JQuery 3.0 ini perlu diubah menjadi:
https://jquery.com/upgrade-guide/3.0/#breaking-change-load-unload-and-error-removed
sumber
if (counter > 1) { // do something on iframe actual change }
(anggap penghitung diatur ke 0 pada awal)Jika Anda tidak memiliki kendali atas halaman dan ingin melihat beberapa jenis perubahan maka metode modern yang digunakan
MutationObserver
Contoh penggunaannya, mengamati
src
atribut berubah dariiframe
Keluaran setelah 3 detik
Di jsFiddle
Diposting jawaban di sini karena pertanyaan awal ditutup sebagai duplikat dari pertanyaan ini.
sumber
observe
. Ini hanya sebuah contoh.Catatan: Cuplikan hanya akan berfungsi jika iframe dengan asal yang sama.
Jawaban lain mengusulkan
load
acara tersebut, tetapi muncul setelah halaman baru di iframe dimuat. Anda mungkin perlu diberi tahu segera setelah URL berubah , bukan setelah halaman baru dimuat.Inilah solusi JavaScript sederhana:
Ini akan berhasil melacak
src
perubahan atribut, serta setiap perubahan URL yang dibuat dari dalam iframe itu sendiri.Diuji di semua browser modern.
Saya membuat inti dengan kode ini juga. Anda dapat memeriksa jawaban saya yang lain juga. Ini sedikit mendalam tentang bagaimana ini bekerja.
sumber
Iframe selalu menyimpan halaman induk, Anda harus menggunakan ini untuk mendeteksi di halaman mana Anda berada di iframe:
Kode html:
Js:
sumber
Karena versi 3.0 dari Jquery Anda mungkin mendapatkan kesalahan
Yang dapat dengan mudah diperbaiki dengan melakukan
sumber
Berikut adalah metode yang digunakan dalam Commerce SagePay dan modul Commerce Paypoint Drupal yang pada dasarnya membandingkan
document.location.href
dengan nilai lama dengan terlebih dahulu memuat iframe sendiri, kemudian eksternal.Jadi pada dasarnya idenya adalah memuat halaman kosong sebagai pengganti dengan kode JS dan bentuk tersembunyi. Kemudian kode induk JS akan mengirimkan formulir tersembunyi di mana
#action
menunjuk ke iframe eksternal. Setelah pengalihan / pengiriman terjadi, kode JS yang masih berjalan di halaman itu dapat melacakdocument.location.href
perubahan nilai Anda .Berikut ini contoh JS yang digunakan di iframe:
Dan di sini JS digunakan di halaman induk:
Kemudian di halaman pendaratan sementara yang kosong, Anda harus memasukkan formulir yang akan dialihkan ke halaman eksternal.
sumber