Mengapa orang masih menggunakan iframe? [Tutup]

89

Bagi saya iframe adalah kejahatan murni (yah, mungkin tidak begitu murni). Mereka sepertinya membuat banyak masalah. Ya, seluruh situs Anda akan dimuat sekali dan kemudian Anda hanya dapat memuat satu halaman. Tetapi orang-orang menemukan AJAX untuk tujuan ini.

Salah satu masalah terbesar yang saya temukan iframeadalah saya tidak dapat menempelkan tautan ke salah satu subhalaman, karena URL tidak pernah berubah (ya, saya tahu ada solusi untuk ini). Hal kedua, mesin pencari web mungkin mengalami masalah untuk mengindeks situs itu dengan benar.

Terkadang aksesibilitas situs ini lebih buruk dan beberapa browser bahkan dapat menampilkannya dengan tidak semestinya.

Ada cara yang lebih baik untuk mendesain tata letak tanpa (i) bingkai. Setiap hari saya dapat melihat seseorang mengajukan pertanyaan SO, seperti "Bagaimana cara mengakses iframe dengan jQuery?".

Lantas apa saja sih keunggulan iframe? Apa alasannya untuk tetap menggunakannya? Saya hanya ingin tahu mengapa :)

(karena ini bukan pertanyaan nyata, ini adalah CW)

Ventus
sumber
Saya setuju dengan Moshe di atas. Satu-satunya penggunaan Iframe adalah untuk: klien web kuno yang tidak mendukung CSS modern atau di lingkungan berpemilik.
Boris Hamanov
Akhir-akhir ini, sayangnya, setiap browser memiliki masalah kompatibilitas! mereka tidak standar! tag div bermasalah, tag tabel bermasalah, dan seterusnya ... mereka akan kehilangan waktu kami untuk mendesain situs web yang 100% kompatibel. beberapa kali cara terakhir untuk membuat situs web kompatibel bahkan dengan IE7. menggunakan iframe. iframe dapat menambal setiap masalah: '(jika Anda memeriksa status situs web saya, Anda akan melihat banyak kunjungan dari IE7. banyak orang menggunakan peramban lama bahkan di tahun 2016 !!!
Mahdi Jazini

Jawaban:

102

Saya dapat memikirkan 2 alasan (saat ini) mengapa orang masih menggunakan iframe daripada AJAX:

1) Iframe menghindari kebijakan asal lintas domain (gambar, skrip, dan gaya tidak). Ini dapat berguna untuk menarik situs / konten dari nama domain lain dengan relatif aman. Pada dasarnya, ini memungkinkan keuntungan untuk dapat menampilkan data secara visual dari domain lain tanpa membiarkan mereka menginjak-injak halaman Anda dengan akses tak terbatas (seperti yang dapat dilakukan JSONP).

2) Anda dapat memuat berbagai jenis sumber daya dari dalam iframe, bukan hanya jenis mime tertentu (Anda relatif terbatas pada application / javascript, application / x-javascript, text / css, text / xml, image / png, image / jpeg, image / gif dengan skrip, XHR, gambar, dan sumber). Misalnya, jika saya ingin menunjukkan PDF kepada Anda, saya dapat membuka iframe dan membiarkan plugin Adobe Reader menunjukkan file itu kepada Anda. Selain itu, di domain yang sama, jika saya ingin menyalurkan skrip, gaya, dan gambar secara bersamaan (sebaris pada halaman, gambar harus berupa URI data), saya dapat melakukannya dengan iframe (dan jika itu sama domain, port, dan protokol saya juga dapat mengaksesnya dengan JavaScript).

Tahukah Anda bahwa Gmail adalah sekumpulan iframe? Bagian yang terlihat hanyalah pemosisian yang cerdas. Selain itu, banyak penerapan OAuth (Twitter, Facebook, Google, Yahoo!) biasanya menggunakan iframe untuk mengaitkan pengguna di domain mereka dengan URL otentikasi yang berhasil (setelah pengguna masuk).

Dan Beam
sumber
2
Re # 1, Tetapi header HTTP dapat memblokir iframe .....
Pacerier
2
Re # 2, Tapi Anda bisa melakukannya tanpa iframe, misalnya<embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
Pacerier
4
Re # 3, Gmail dapat ditulis ulang tanpa iframe. Jadi mengapa orang masih menggunakan iframe untuk peramban modern? Pertanyaannya tidak terjawab.
Pacerier
22

IFRAME digunakan untuk menyematkan dan memisahkan konten pihak ketiga ke dalam situs web.

Sebagian besar solusi periklanan web didasarkan pada iframe - karena memberikan keamanan (kebijakan lintas domain) dan persegi panjang terisolasi di layar yang dapat dikelola sepenuhnya oleh konten dan skrip pihak ketiga (kasus penggunaan yang umum adalah iklan).

Penggunaan modern IFRAMES lainnya adalah pengelolaan riwayat (solusi umum tombol kembali) dari aplikasi AJAX.

FRAME adalah versi buruk dari IFRAMES. Penggunaannya menurun.

gertas
sumber
1
Ini jauh lebih sederhana, dan contoh iklan yang bagus :)
oneworld
15

Jika pengguna menonaktifkan javascript, iframes akan berfungsi saat ajax tidak. Ini tidak keluar dari pertanyaan, mengingat orang menggunakan hal-hal seperti NoScript .

Reinderien
sumber
4
Ini benar, tetapi mengubah / menambahkan / memanipulasi iframe dalam banyak kasus membutuhkan JavaScript (kecuali untuk 2 yang dapat saya pikirkan, menautkan ke target dan <form>memposting ke target).
Dan Beam
Baik; meski begitu, mengubah poin iframe menjadi menggunakan JS biasanya memerlukan satu baris, berbeda dengan kerumitan yang lebih besar XMLHttpRequest.
Reinderien
7

Saya menggunakannya di situs web ajax, ketika saya perlu mengunggah file tanpa memuat ulang halaman.

CodeReaper
sumber
@Mwizak Ajax harus afaik mencakup semua jenis javascript termasuk sudut.
CodeReaper
3

Saya masih melihat iframe digunakan di perusahaan besar di mana mereka menyediakan satu tanda yang menyuntikkan informasi header tentang pengguna yang diautentikasi yang kemudian diteruskan, melalui iframe, ke aplikasi sebenarnya. Karena "portal" yang mengelilingi iframe menangani semua detail autentikasi spesifik, aplikasi di belakangnya tidak perlu menerapkan masing-masing untuk itu, mempermudah tim pengembangan dan memiliki satu tempat untuk memantau dan menyesuaikan detail autentikasi pengguna.

Kris van der Mast
sumber
Tidak melihat mengapa Anda tidak dapat menambahkan header dengan XMLHttpRequest ( w3.org/TR/XMLHttpRequest/#the-setrequestheader-method ) kecuali domain, protokol, dan port tidak cocok (yang berarti Anda memiliki masalah yang berbeda dari header)?
Dan Beam
Intinya adalah 2 aplikasi yang berbeda, biasanya bahkan 2 teknologi yang sama sekali berbeda. Yang satu menangani otentikasi dan yang lainnya mengambil tajuk yang dimasukkan untuk tiket otentikasi (atau membangunnya saat diperlukan).
Kris van der Mast
3

Ada banyak alasan teknis untuk menggunakannya (terutama masalah keamanan yang disebutkan oleh Dan Beam).

Yang tidak boleh Anda lakukan adalah menggunakan iframe "like frames", melakukan navigasi ke halaman baru dengan memperbarui iframe saja. Seperti yang Anda katakan, ini mencegah navigasi agar tidak dapat di-bookmark / ditautkan, merespons tombol navigasi normal, dan menyediakan kemampuan tautan yang berguna seperti buka-dalam-tab-baru.

Tapi itu tidak hanya terjadi pada iframe. Anda dapat melihat lebih banyak halaman di mana navigasi dilakukan dengan mengambil konten baru XMLHttpRequestdan menuliskannya ke div konten utama innerHTML. Seringkali ini dilakukan dengan jQuery load()dan animasi slidey pintar-pintar. Ini merusak navigasi sama buruknya dengan iframe-used-as-frame, atau memang old-school framesets. Sungguh memalukan begitu banyak penulis web yang menggunakan taktik ini dan percaya bahwa itu adalah metodologi desain web super-modern, padahal sebenarnya itu hanya tampilan baru pada rangkaian bingkai yang dibenci kemarin.

Anda dapat mengatasinya dalam kedua kasus, tetapi itu berarti Anda harus menyimpan kondisi tampilan di bagian #pengenal fragmen dan mendukung navigasi hash yang tepat, yang tidak sepele. Meskipun demikian, Anda masih memiliki masalah dengan agen non-JS seperti mesin pencari; Anda akhirnya harus memiliki navigasi berbasis ?dan paralel #untuk mendukung keduanya. Ini menyakitkan dan paling tidak repot.

bobince
sumber
Nantikan API Riwayat di HTML5, yang akan memungkinkan pengambilan konten tanpa memuat ulang atau merusak tombol kembali / maju.
Lie Ryan
2

Frameset sudah usang sejak HTML 5, dan terkadang Anda perlu memiliki bingkai dengan situs lain di dalam situs. AJAX juga hanya bisa melakukan banyak hal. Coba unggah file ke situs di domain lain melalui https tanpa iframe. AJAX tidak akan membantu Anda di sana.

McTrafik
sumber
2

Selain alasan lain, saya memiliki satu penggunaan spesifik iframedalam aplikasi saya. Sayangnya, browser target dalam kasus saya adalah Internet Explorer 6. Saya perlu memiliki footer dan header yang diperbaiki di halaman web saya. Bagian utama dari halaman ini dapat di-scroll.

Namun, ada bug di IE6 di mana saya tidak dapat menampilkan divelemen di atas selectelemen menggunakan z-indexproperti CSS. Jadi, saya perlu membuat iframeyang akan digunakan sebagai hack untuk menghindari masalah ini.

Tentu saja, ini adalah penggunaan yang sangat spesifik iframedan satu-satunya perhatian IE6...

romaintaz
sumber
1

Editor Javascript WYSIWYG menggunakan iframe, karena itu cara termudah dan terbaik untuk membuatnya. Misalnya TinyMCE menggunakannya:

http://tinymce.moxiecode.com/

pemula
sumber
1

Saya sedang membangun jejaring sosial dan saya melihat iframe berguna untuk widget untuk ditempatkan di situs web orang lain agar ditampilkan seperti profil mini atau diintegrasikan dengan konten di server jarak jauh. Sepertinya cara paling sederhana untuk membangun ini. Saya tahu beberapa widget menggunakan JavaScript. Juga dengan metode iframe sesinya sama dengan mengunjungi situs seperti biasa, sangat bagus untuk tombol suka.

Keverw
sumber
0

Banyak Editor Teks Terformat (misalnya TinyMCE, HTMLArea) diimplementasikan sebagai iframe.

Lie Ryan
sumber
Ini karena FireFox IIRC.
alex
0

iFrame tidak masalah untuk beberapa kasus, karena X-domain-request, atau memposting data ke sumber melalui parameter. Tetapi ketika saya ingin mengakses data di seluruh domain, saya lebih suka menggunakan file CSS - mereka dapat menerima params, mengatur cookie, menambahkan konten ke halaman (: sebelum &: setelah) dan memberikan umpan balik visual.

fb55
sumber