var iframe = document.getElementById('iframeId');var innerDoc =(iframe.contentDocument)? iframe.contentDocument : iframe.contentWindow.document;
Anda bisa menulis:
var iframe = document.getElementById('iframeId');var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
dan dokumen internal yang valid pertama akan dikembalikan.
Setelah Anda mendapatkan dokumen internal, Anda bisa mengakses internalnya dengan cara yang sama seperti Anda mengakses elemen apa pun di halaman Anda saat ini. ( innerDoc.getElementById... dll.)
PENTING: Pastikan iframe berada di domain yang sama, jika tidak, Anda tidak dapat mengakses internalnya. Itu akan menjadi skrip lintas situs.
Jawaban yang bagus Tahukah Anda bahwa Anda dapat melakukannya: var innerDoc = iframe.contentDocument || iframe.contentWindow.document; // lebih mudah dibaca dan artinya sama
David Snabel-Caunt
5
Saya telah melihat orang-orang bingung oleh lebih dari operator ternary. Mereka tampaknya tidak tahu bahwa yang valid pertama dikembalikan.
geowa4
5
sebenarnya, ketika saya mengedit jawaban untuk memasukkannya, pria di atas bahu saya bertanya kepada saya apa yang ...
geowa4
12
Mungkin lebih baik untuk mendidik daripada penggunaan kode yang lebih kompleks untuk kesederhanaan :)
David Snabel-Caunt
1
@JellicleCat: Cara apa pun untuk melakukan "pemalsuan permintaan lintas situs", juga dikenal sebagai serangan "satu-klik" atau "sesi berkendara"
CSharper
12
Jangan lupa untuk mengakses iframe setelah dimuat . Cara lama tapi andal tanpa jQuery:
Itu memanggil fungsi dari iFrame, tidak mendapatkan referensi ke elemen.
Nick Mitchell
3
Jawaban di atas memberikan solusi yang baik menggunakan Javscript. Berikut ini adalah solusi jQuery sederhana:
$('#iframeId').contents().find('div')
Kuncinya di sini adalah .contents()metode jQuery , tidak seperti .children()yang hanya bisa mendapatkan elemen HTML, .contents()bisa mendapatkan node teks dan elemen HTML. Itu sebabnya orang bisa mendapatkan konten dokumen iframe dengan menggunakannya.
Bacaan lebih lanjut tentang jQuery .contents(): .contents ()
Perhatikan bahwa iframe dan halaman harus berada di domain yang sama.
Jika iframe tidak berada dalam domain yang sama sehingga Anda tidak bisa mendapatkan akses ke internalnya dari induk tetapi Anda dapat memodifikasi kode sumber iframe maka Anda dapat memodifikasi halaman yang ditampilkan oleh iframe untuk mengirim pesan ke jendela induk, yang memungkinkan Anda berbagi informasi antar halaman. Beberapa sumber:
Jangan lupa untuk mengakses iframe setelah dimuat . Cara lama tapi andal tanpa jQuery:
sumber
CallYourFunction()
adalah fungsi di dalam halaman dan fungsi tindakan di atasnyasumber
Jawaban di atas memberikan solusi yang baik menggunakan Javscript. Berikut ini adalah solusi jQuery sederhana:
Kuncinya di sini adalah
.contents()
metode jQuery , tidak seperti.children()
yang hanya bisa mendapatkan elemen HTML,.contents()
bisa mendapatkan node teks dan elemen HTML. Itu sebabnya orang bisa mendapatkan konten dokumen iframe dengan menggunakannya.Bacaan lebih lanjut tentang jQuery
.contents()
: .contents ()Perhatikan bahwa iframe dan halaman harus berada di domain yang sama.
sumber
Tidak ada jawaban lain yang bekerja untuk saya. Saya akhirnya membuat fungsi di dalam iframe saya yang mengembalikan objek yang saya cari:
Kemudian Anda memanggil fungsi seperti itu untuk mengambil elemen:
sumber
Jika iframe tidak berada dalam domain yang sama sehingga Anda tidak bisa mendapatkan akses ke internalnya dari induk tetapi Anda dapat memodifikasi kode sumber iframe maka Anda dapat memodifikasi halaman yang ditampilkan oleh iframe untuk mengirim pesan ke jendela induk, yang memungkinkan Anda berbagi informasi antar halaman. Beberapa sumber:
sumber
Kode di bawah ini akan membantu Anda mengetahui data iframe.
sumber