Saya ingin memanggil fungsi JavaScript jendela induk dari iframe.
<script>
function abc()
{
alert("sss");
}
</script>
<iframe id="myFrame">
<a onclick="abc();" href="#">Call Me</a>
</iframe>
javascript
iframe
onclick
Arjun Singh
sumber
sumber
Jawaban:
Lihat window.parent
Mengembalikan referensi ke induk dari jendela saat ini atau subframe.
Jika sebuah jendela tidak memiliki induk, properti induknya adalah referensi untuk dirinya sendiri.
Ketika jendela dimuat dalam
<iframe>
,<object>
atau<frame>
, induknya adalah jendela dengan elemen embedding jendela.sumber
alert
akan dipanggil;alert
fungsi orang tua atau fungsi iframealert
, jikaparent.abc();
dipanggil iframe?window.postMessage()
(atauwindow.parent.postMessage()
) ada. Periksa @Andrii jawabBaru-baru ini saya harus mencari tahu mengapa ini tidak berhasil juga.
Javascript yang ingin Anda panggil dari iframe anak harus di kepala orang tua. Jika ada di badan, skrip tidak tersedia dalam cakupan global.
Semoga ini bisa membantu siapa saja yang menemukan masalah ini lagi.
sumber
Window.postMessage ()
Metode ini dengan aman memungkinkan
cross-origin
komunikasi.Dan jika Anda memiliki akses ke kode halaman induk maka metode induk apa pun dapat dipanggil serta data apa pun dapat diteruskan langsung dari
Iframe
. Ini adalah contoh kecil:Halaman induk:
Kode iframe:
PEMBARUAN:
Catatan keamanan:
Selalu berikan target tertentu, BUKAN
*
, jika Anda tahu di mana dokumen jendela lain harus berada. Gagal memberikan target spesifik mengungkapkan data yang Anda kirim ke situs berbahaya apa pun yang tertarik (komentar oleh ZalemCitizen ).Referensi:
sumber
Saya telah memposting ini sebagai jawaban terpisah karena tidak terkait dengan jawaban saya yang ada.
Masalah ini baru-baru ini dipangkas lagi untuk mengakses induk dari iframe yang merujuk subdomain dan perbaikan yang ada tidak berhasil.
Kali ini jawabannya adalah mengubah document.domain dari halaman induk dan iframe menjadi sama. Ini akan menipu pemeriksaan kebijakan asal yang sama dengan berpikir bahwa mereka hidup berdampingan pada domain yang sama persis (subdomain dianggap sebagai host yang berbeda dan gagal dalam pemeriksaan kebijakan asal yang sama).
Masukkan yang berikut ini ke
<head>
halaman di iframe agar sesuai dengan domain induk (sesuaikan untuk tipe dokumen Anda).Harap dicatat bahwa ini akan menimbulkan kesalahan pada pengembangan host lokal, jadi gunakan cek seperti berikut untuk menghindari kesalahan:
sumber
example.com
iframeabc.example.com
, maka kedua induk dan iframe harus memanggildocument.domain = "example.com"
Kamu bisa memakai
lihat berikut ini.
sumber
abc()
hanya akan berfungsi jikafunction abc()
dideklarasikan di iframe sebagai lawan dari halaman induk.window.top.abc()
keluar dari iframe ke dalam dokumen induk.Tambahan lain untuk mereka yang membutuhkannya. Solusi Ash Clarke tidak berfungsi jika mereka menggunakan protokol yang berbeda jadi pastikan bahwa jika Anda menggunakan SSL, iframe Anda menggunakan SSL juga atau itu akan merusak fungsinya. Solusinya memang berhasil untuk domain itu sendiri, jadi terima kasih untuk itu.
sumber
Solusi yang diberikan oleh Ash Clarke untuk subdomain berfungsi dengan baik, tetapi harap dicatat bahwa Anda harus menyertakan document.domain = "mydomain.com"; di kedua kepala halaman iframe dan kepala halaman induk, sebagaimana dinyatakan dalam tautan yang sama memeriksa kebijakan asal
sumber
document.domain
?localhost
atau alamat ip mesin (biasanya127.0.0.1
), tergantung pada apa yang ada di bilah alamat url.parent.abc () hanya akan berfungsi di domain yang sama karena tujuan keamanan. Saya mencoba solusi ini dan milik saya bekerja dengan sempurna.
Semoga ini membantu. :)
sumber
Dengan Firefox dan Chrome Anda dapat menggunakan:
Jika fungsi saya hadir di iframe dan di induk, yang orangtua akan dipanggil.
sumber
Sementara beberapa solusi ini mungkin berhasil, tidak ada yang mengikuti praktik terbaik. Banyak yang menetapkan variabel global dan Anda mungkin menemukan diri Anda melakukan panggilan ke beberapa variabel induk atau fungsi, yang mengarah ke namespace yang berantakan dan rentan.
Untuk menghindari ini, gunakan pola modul. Di jendela induk:
Kemudian, di iframe:
Ini mirip dengan pola yang dijelaskan dalam bab Inheritance dari teks mani Crockford, "Javascript: The Good Parts." Anda juga dapat mempelajari lebih lanjut di halaman w3 untuk praktik terbaik Javascript. https://www.w3.org/wiki/JavaScript_best_practices#Avoid_globals
sumber