Saya ingin tahu apakah ada alternatif untuk iFrames dengan HTML5. Maksud saya, dapat menyuntikkan lintas-domain HTML di dalam halaman web tanpa menggunakan iFrame.
Pada dasarnya ada 4 cara untuk menanamkan HTML ke halaman web:
<iframe>
Konten iframe sepenuhnya hidup dalam konteks yang terpisah dari halaman Anda. Meskipun sebagian besar fitur yang hebat dan paling kompatibel di antara versi browser, itu menciptakan tantangan tambahan (menyusut membungkus ukuran frame dengan kontennya sulit, sangat frustasi untuk skrip ke dalam / keluar dari, hampir mustahil untuk gaya).XMLHttpRequest
objek untuk mengambil data dan menyuntikkannya ke halaman Anda. Ini tidak ideal karena tergantung pada teknik scripting, sehingga membuat eksekusi lebih lambat dan lebih kompleks, di antara kelemahan lainnya .Komponen Web HTML5 . Impor HTML, bagian dari Komponen Web, memungkinkan untuk bundel dokumen HTML dalam dokumen HTML lainnya. Itu termasuk HTML
, CSS
, JavaScript
atau apa pun sebuah .html
file yang dapat berisi. Ini membuatnya menjadi solusi hebat dengan banyak kasus penggunaan yang menarik: memecah aplikasi menjadi komponen yang dibundel yang dapat Anda distribusikan sebagai blok bangunan, mengelola dependensi dengan lebih baik untuk menghindari redundansi, organisasi kode, dll. Ini adalah contoh sepele:
<!-- Resources on other origins must be CORS-enabled. -->
<link rel="import" href="http://example.com/elements.html">
Kompatibilitas asli masih menjadi masalah, tetapi Anda dapat menggunakan polyfill untuk membuatnya berfungsi di browser yang hijau Today.
Anda dapat menggunakan objek dan embed, seperti:
Yang bukan baru, tetapi masih berfungsi. Saya tidak yakin apakah itu memiliki fungsi yang sama.
sumber
Tidak, tidak ada yang setara. The
<iframe>
elemen masih berlaku di HTML5. Bergantung pada interaksi persis apa yang Anda butuhkan, mungkin ada API yang berbeda. Misalnya adapostMessage
metode yang memungkinkan Anda untuk mencapai interaksi javascript lintas domain. Tetapi jika Anda ingin menampilkan konten HTML lintas domain (ditata dengan CSS dan dibuat interaktif dengan javascript)iframe
tetap sebagai cara yang baik untuk dilakukan.sumber
object
adalah alternatif yang mudah di HTML5:Anda juga dapat mencoba
embed
:sumber
Jika Anda ingin melakukan ini dan mengontrol server dari mana halaman dasar atau konten dilayani, Anda dapat menggunakan Cross Origin Resource Sharing ( http://www.w3.org/TR/access-control/ ) untuk memungkinkan klien- sisi JavaScript untuk memuat data ke
<div>
melaluiXMLHttpRequest()
:Sekarang untuk lynchpin dari seluruh operasi ini, Anda perlu menulis kode untuk server Anda yang akan memberikan
Access-Control-Allow-Origin
header kepada klien , menentukan domain mana yang Anda inginkan untuk diakses oleh kode sisi klienXMLHttpRequest()
. Berikut ini adalah contoh kode PHP yang dapat Anda sertakan di bagian atas halaman Anda untuk mengirim header ini ke klien:sumber
Ini juga tampaknya berfungsi, meskipun W3C menyatakan itu tidak dimaksudkan "untuk aplikasi eksternal (biasanya non-HTML) atau konten interaktif"
Info lebih lanjut: http://www.w3.org/wiki/HTML/Elements/embed http://www.w3schools.com/tags/tag_embed.asp
sumber
Iframe masih merupakan cara terbaik untuk mengunduh konten visual lintas domain. Dengan AJAX Anda tentu dapat mengunduh HTML dari halaman web dan menempelkannya pada div (seperti yang disebutkan orang lain) namun masalah yang lebih besar adalah keamanan. Dengan iframe Anda akan dapat memuat konten lintas domain tetapi tidak akan dapat memanipulasinya karena konten tersebut sebenarnya bukan milik Anda. Di sisi lain dengan AJAX Anda tentu saja dapat memanipulasi konten apa pun yang dapat Anda unduh, tetapi server domain lain perlu diatur sedemikian rupa sehingga memungkinkan Anda untuk mengunduhnya. Sering kali Anda tidak akan memiliki akses ke konfigurasi domain lain dan bahkan jika Anda melakukannya, kecuali jika Anda melakukan konfigurasi seperti itu sepanjang waktu, itu bisa menjadi sakit kepala. Dalam hal ini iframe bisa menjadi alternatif yang JAUH lebih mudah.
Seperti yang telah disebutkan orang lain, Anda juga dapat menggunakan tag embed dan tag objek tetapi itu belum tentu lebih maju atau lebih baru dari iframe.
HTML5 lebih mengarah pada adopsi API web untuk mendapatkan informasi dari lintas domain. Biasanya API web hanya mengembalikan data dan bukan HTML.
sumber
nice-to-know
Anda dapat menggunakan XMLHttpRequest untuk memuat halaman ke div (atau elemen lain dari halaman Anda). Contoh fungsi adalah:
Jika server Anda mampu, Anda juga bisa menggunakan PHP untuk melakukan ini, tetapi karena Anda meminta metode HTML5, ini yang Anda butuhkan.
sumber
Saya membuat modul simpul untuk menyelesaikan masalah ini simpul-iframe-penggantian . Anda memberikan URL sumber dari situs induk dan pemilih CSS untuk menyuntikkan konten Anda dan menggabungkan keduanya.
Perubahan ke situs induk diambil setiap 5 menit.
Sumber tersebut berisi contoh kerja menyuntikkan konten ke beranda BBC News .
sumber
Anda harus melihat JSON-P - itu solusi sempurna bagi saya ketika saya memiliki masalah itu:
https://en.wikipedia.org/wiki/JSONP
Anda pada dasarnya mendefinisikan file javascript yang memuat semua data Anda dan file javascript lain yang memproses dan menampilkannya. Itu menghilangkan scrollbar iframe yang jelek.
sumber