HTML5 mendefinisikan beberapa elemen konten tertanam, yang, dari pandangan mata burung, tampaknya sangat mirip dengan titik yang sebagian besar identik.
Apa perbedaan yang sebenarnya antara iframe
, embed
dan object
?
Jika saya ingin menyematkan file HTML dari situs pihak ketiga, elemen mana yang bisa saya gunakan, dan bagaimana perbedaannya?
Jawaban:
<iframe>
Terutama digunakan untuk memasukkan sumber daya dari domain atau subdomain lain tetapi dapat digunakan untuk memasukkan konten dari domain yang sama juga. The
<iframe>
'Kekuatan adalah bahwa kode tertanam adalah 'hidup' dan dapat berkomunikasi dengan dokumen induk.<embed>
Dibakukan dalam HTML 5, sebelum itu adalah tag non standar, yang diakui telah diterapkan oleh semua browser utama. Perilaku sebelum HTML 5 dapat bervariasi ...
Digunakan untuk menyematkan konten untuk plugin browser. Pengecualian untuk ini adalah SVG dan HTML yang ditangani secara berbeda sesuai dengan standar.
Rincian tentang apa yang bisa dan tidak bisa dilakukan dengan konten yang disematkan terserah plugin browser yang dimaksud. Tetapi untuk SVG Anda dapat mengakses dokumen SVG tertanam dari induk dengan sesuatu seperti:
Dari dalam dokumen SVG atau HTML tertanam Anda dapat menjangkau induk dengan:
Untuk HTML yang disematkan tidak ada cara untuk mendapatkan dokumen yang disematkan dari induknya (yang saya temukan)
<object>
Kesimpulan
Kecuali Anda menanamkan SVG atau sesuatu yang statis, Anda mungkin lebih baik menggunakannya
<iframe>
. Untuk memasukkan penggunaan SVG<embed>
(jika saya ingat dengan benar<object>
tidak akan membiarkan Anda skrip †). Jujur saya tidak tahu mengapa Anda akan menggunakan<object>
kecuali untuk browser atau flash yang lebih lama (yang saya tidak bekerja dengan).† Seperti yang ditunjukkan dalam komentar di bawah ini; skrip dalam
<object>
akan berjalan tetapi konteks orang tua dan anak tidak dapat berkomunikasi secara langsung. Dengan<embed>
Anda bisa mendapatkan konteks anak dari orang tua dan sebaliknya. Ini artinya mereka dapat Anda gunakan skrip di induk untuk memanipulasi anak dll. Bagian itu tidak mungkin dengan<object>
atau di<iframe>
mana Anda harus mengatur beberapa mekanisme lain, seperti JavaScript postMessage API .sumber
embed
sangat ideal untuk membuat pengunjung mengikuti rantai pengalihan yang berasal dari situs web yang memblokir framing. (Kami menggunakannya untuk memulai login<object>
akan berjalan, tetapi tidak mungkin (atau saya tidak mengelola) untuk mendapatkan konteks objek dari halaman induk. Jadi skrip "internal" akan berjalan, skrip "eksternal", dari sudut pandang objek, tidak dapat berkomunikasi dengan konteks objek.<iframe />
adalah jalan yang harus ditempuh. Inti dari postingan ini adalah mereka semua berbeda.<embed>
masih dalam spesifikasi: w3.org/TR/html5/embedded-content-0.html#the-embed-element , jadi menyebutkan itu dibenarkan. Saya juga merasa sedikit lucu bahwa Anda berpendapat bahwa<embed>
sudah ketinggalan jaman dan menyebutkan applet Java dalam kalimat berikutnya :)Salah satu alasan untuk menggunakan
object
lebihiframe
adalah bahwa objek kembali ukuran konten yang disematkan agar sesuai dengan dimensi objek. paling terkenal di safari di iPhone 4s di mana lebar layarnya320px
dan html dari URL yang disematkan dapat membuat dimensi lebih besar.sumber
Alasan lain untuk menggunakan
object
lebih dari iframe adalah bahwaobject
sumber daya sub (ketika<object>
melakukanHTTP
permintaan) dianggap sebagaipassive/display
dalam halMixed content
, yang berarti lebih aman ketika Anda harus memilikiMixed content
.Konten campuran berarti bahwa ketika Anda memiliki
https
tetapi sumber daya Anda berasalhttp
.Referensi: https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content
sumber