İnsanlar neden hala iframe kullanıyor? [kapalı]


89

Benim için iframe'ler saf kötüdür (pekala, belki o kadar da saf değildir). Pek çok sorun çıkarıyor gibi görünüyorlar. Evet, sitenizin tamamı bir kez yüklenecek ve ardından tek bir sayfa yükleyebilirsiniz. Ancak insanlar bu amaçla AJAX'ı icat etti.

Bulduğum en büyük sorunlardan iframebiri, alt sayfalardan birine bağlantı yapamadığımdı, çünkü URL hiç değişmedi (evet, bunun için bir çözüm olduğunu biliyorum). İkinci olarak, web arama motorları bu siteleri doğru bir şekilde dizine eklemekte sorun yaşayabilir.

Bazen bu sitelerin erişilebilirliği daha kötüdür ve hatta bazı tarayıcılar bunları uygunsuz bir şekilde görüntüleyebilir.

(İ) çerçeveler olmadan düzen tasarlamanın daha iyi yolları vardır. Her gün birisinin SO'da "jQuery ile iframe'e nasıl erişilir?" Gibi sorular sorduğunu görüyorum.

Öyleyse iframe'lerin faydaları nelerdir? Hala kullanmak için ne sebep olabilir? Sadece nedenini bilmek istiyorum :)

(gerçek bir soru olmadığı için, bu bir CW)


Yukarıda Moshe'ye katılıyorum. Iframe'lerin diğer tek kullanımı, modern CSS'yi desteklemeyen eski web istemcileri veya bazı tescilli ortamlar içindir.
Boris Hamanov

Bu günlerde maalesef her tarayıcının bir uyumluluk sorunu var! standart değiller! div etiketinde bir sorun var, tablo etiketinde bir sorun var ve benzeri ...% 100 uyumlu bir web sitesi tasarlamak için zamanımızı kaybedecekler. Bazen bir web sitesini IE7 ile uyumlu hale getirmenin son yolu. iframe kullanıyor. iframe her sorunu düzeltebilir: '(web sitemin durumunu kontrol ederseniz,
IE7'den

Yanıtlar:


102

İnsanların AJAX yerine iframe'leri kullanmaya devam etmelerinin (şu anda) 2 nedeni olduğunu düşünüyorum:

1) Iframe'ler, alanlar arası kaynak politikasını engeller (resimler, komut dosyaları ve stiller değildir). Bu, siteleri / içeriği diğer alan adlarından nispeten güvenli bir şekilde almak için yararlı olabilir. Temel olarak, bu, sınırsız erişimle (JSONP gibi bir şeyin yapabileceği gibi) sayfanızın her yerinde gezinmelerine izin vermeden diğer alanlardan verileri görsel olarak gösterebilme avantajına olanak tanır.

2) Yalnızca belirli mime türlerini değil, bir iframe içinden birden çok kaynak türü yükleyebilirsiniz (göreceli olarak application / javascript, application / x-javascript, text / css, text / xml, image / png, image ile sınırlısınız) / jpeg, komut dosyaları, XHR, resimler ve kaynaklar içeren resim / gif). Örneğin, size bir PDF göstermek istersem, bir iç çerçeve açabilir ve Adobe Reader eklentisinin size bu dosyayı göstermesine izin verebilirim. Ek olarak, aynı etki alanında, bir komut dosyası, stil ve görüntüyü hep birlikte boru hattına bağlamak istersem (sayfada satır içi, görüntünün veri URI'si olması gerekir), bunu bir iframe ile gerçekleştirebilirim (ve aynı etki alanı, bağlantı noktası ve protokol ona JavaScript ile de erişebilirim).

Gmail'in bir dizi iç çerçeve olduğunu biliyor muydunuz? Görünen kısım sadece akıllıca konumlandırmadır. Ek olarak, birçok OAuth uygulaması (Twitter, Facebook, Google, Yahoo!) genellikle kendi alanlarındaki bir kullanıcıyı başarılı bir kimlik doğrulama URL'si ile ilişkilendirmek için iframe'leri kullanır (kullanıcı oturum açtıktan sonra).


2
Re # 1, Ama HTTP başlığı iframe'i engelleyebilir .....
Pacerier

2
Re # 2, Ama bunu iframe olmadan da yapabilirsiniz, örneğin<embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
Pacerier

4
Tekrar # 3, Gmail iframe'ler olmadan yeniden yazılabilir. Öyleyse insanlar neden modern tarayıcılar için hala iframe kullanıyor? Soru cevapsız bırakıldı.
Pacerier

22

IFRAME'ler, üçüncü taraf içeriğini bir web sitesine yerleştirmek ve izole etmek için kullanılır.

Web reklamcılığı çözümlerinin çoğu iframe'lere dayalıdır - çünkü bunlar güvenlik (etki alanları arası politika) ve üçüncü taraf içeriği ve komut dosyası ile tamamen yönetilebilen ekranda izole dikdörtgen (yaygın kullanım durumu reklamlardır).

IFRAMES'in başka bir modern kullanımı, AJAX uygulamalarının geçmişinin (ortak geri düğmesi geçici çözümü) yönetimidir.

FRAME'ler, IFRAMES'ın zayıf sürümüdür. Kullanımları azalıyor.


1
Bu çok daha basit ve iyi reklam örneği :)
oneworld

15

Bir kullanıcı javascript'i devre dışı bıraktıysa, ajax çalışmadığında iframe'ler çalışacaktır. İnsanların NoScript gibi şeyler kullandığı düşünüldüğünde, bu söz konusu değil .


4
Bu doğrudur, ancak iframe'i değiştirmek / eklemek / işlemek çoğu durumda JavaScript gerektirir (aklıma gelen 2 dışında, hedeflere bağlantı ve hedeflere <form>gönderme).
Dan Işın

Sağ; öyle olsa bile, iframe'in JS kullanımına işaret ettiği şeyi değiştirmek, daha karmaşık olmasının aksine genellikle bir satır gerektirir XMLHttpRequest.
Reinderien

7

Sayfayı yeniden yüklemeden dosya yüklemem gerektiğinde bunları ajax web sitelerinde kullanıyorum.


@Mwizak Ajax, açısal dahil olmak üzere her türlü javascript'i kapsamalıdır.
CodeReaper

3

Hala, kimliği doğrulanmış kullanıcı hakkında üstbilgi bilgilerinin enjekte edildiği ve daha sonra bir iframe aracılığıyla gerçek uygulamalara iletilen tek bir işaret sağladıkları büyük şirketlerde kullanılan iframe'leri görüyorum. İframe'i çevreleyen "portal", tüm belirli kimlik doğrulama ayrıntılarını işlediğinden, arkasındaki uygulamaların her birinin kendisi için bir uygulamaya sahip olması gerekmez, bu da geliştirme ekibi için işleri kolaylaştırır ve kimlik doğrulama ayrıntılarını izlemek ve ayarlamak için tek bir yere sahip olmak kullanıcıların.


Etki alanı, protokol ve bağlantı noktaları eşleşmediği sürece neden XMLHttpRequest ( w3.org/TR/XMLHttpRequest/#the-setrequestheader-method ) ile başlık ekleyemeyeceğinizi anlamayın (bu, başlıklar)?
Dan Işın

Mesele şu ki 2 farklı uygulama, genellikle 2 tamamen farklı teknoloji. Biri kimlik doğrulamayı yönetir ve diğeri kimlik doğrulama bileti için enjekte edilen başlıkları alır (veya gerektiğinde oluşturur).
Kris van der Mast

3

Bunları kullanmak için pek çok teknik neden vardır (özellikle Dan Beam tarafından bahsedilen güvenlik sorunu).

Yapmamanız gereken şey, "çerçeveler gibi" iframe'ler kullanmak, yalnızca iframe'i güncelleyerek yeni sayfalarda gezinmektir. Sizin de söylediğiniz gibi, bu, navigasyonun yer imi koyulabilir / bağlanabilir olmasını, normal gezinme düğmelerine yanıt vermesini ve yeni sekmede aç gibi yararlı bağlantı olanakları sağlamasını engeller.

Ancak bu, iframe'lere özgü değildir. İle yeni içerik XMLHttpRequestalıp ana içerik div'lerine yazarak gezinmenin yapıldığı daha fazla sayfa görebilirsiniz innerHTML. Genellikle bu, jQuery load()ve zekice hazırlanmış kayan animasyonlarla yapılır. Bu, gezinmeyi çerçeve olarak kullanılan iframe veya aslında eski okul çerçeve kümeleri kadar kötü bir şekilde bozar. Pek çok web yazarının bu taktiği süper modern bir web tasarım metodolojisi olduğuna inanması utanç verici, ama dünün küçümsenen çerçeve kümelerinde yeni bir görünüm iken.

Her iki durumda da bunun etrafında çalışabilirsiniz, ancak bu, #parça tanımlayıcı bölümünde bir görünüm durumu depolamanız ve önemsiz olmayan uygun karma gezinmeyi desteklemeniz gerektiği anlamına gelir . O zaman bile, arama motorları gibi JS olmayan aracılarla hala sorunlarınız var; her ikisini de desteklemek için paralel ?tabanlı ve #tabanlı bir navigasyona sahip olmak zorunda kalırsınız . Bu bir acı ve çoğu zahmet etmiyor.


HTML5'teki Geçmiş API'sini bekleyin. Bu API, içeriğin yeniden yüklenmeden veya geri / ileri düğmesini kırmadan getirilmesine olanak tanır.
Lie Ryan

2

Çerçeve kümeleri HTML 5 itibariyle geçerliliğini yitirmiştir ve bazen bir site içinde başka bir siteyle bir çerçeveye sahip olmanız gerekir. Ayrıca AJAX yalnızca bu kadarını yapabilir. Bir dosyayı iframe olmadan https üzerinden başka bir alandaki bir siteye yüklemeyi deneyin. AJAX size yardımcı olmayacak.


2

Diğer nedenlere ek olarak, iframeuygulamamda belirli bir kullanımım var . Ne yazık ki, benim durumumdaki hedef tarayıcı Internet Explorer 6. Web sayfalarımda düzeltilmiş bir altbilgi ve başlığa ihtiyacım var. Bu sayfanın ana kısmı kaydırılabilir.

Ancak, IE6'da CSS özelliğini kullanan öğelerin divüstünde bir öğe görüntüleyemediğim bir hata var . Bu nedenle, bu sorunu önlemek için hack olarak kullanılacak bir tane oluşturmam gerekiyor .selectz-indexiframe

Elbette, bu gerçekten özel bir kullanım iframeve tek endişe IE6...



1

Bir sosyal ağ oluşturuyordum ve iç çerçevelerin diğer kişilerin web sitesine mini bir profil gibi gösterilmesi veya uzaktaki bir sunucudaki içerikle entegre olması için yararlı olduğunu görüyorum. Bunu inşa etmenin en basit yolu gibi görünüyor. Bazı widget'ların JavaScript kullandığını biliyorum. Ayrıca iframe yöntemi ile oturum, siteyi normal şekilde ziyaret etmekle aynıdır, bu nedenle benzer düğmeler için harikadır.


0

Birçok Biçimlendirilmiş Metin Düzenleyicisi (ör. TinyMCE, HTMLArea) iframe olarak uygulanır.


Bunun nedeni FireFox IIRC'dir.
alex

0

iFrame'ler, X alanı istekleri gibi bazı durumlarda veya parametreler aracılığıyla bir kaynağa veri gönderirken uygundur. Ancak farklı alanlardaki verilere erişmek istediğimde, CSS dosyalarını kullanmayı tercih ederim - parametreleri kabul edebilir, tanımlama bilgileri ayarlayabilir, sayfaya içerik ekleyebilir (: önce &: sonra) ve görsel bir geri bildirim verebilirler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.