Odpowiedzi:
Podobnie jak w przypadku wszystkich technologii, ma swoje wzloty i upadki. Jeśli używasz iframe do poruszania się po prawidłowo opracowanej stronie, to oczywiście zła praktyka. Jednak czasami iframe jest akceptowalny.
Jeden z głównych problemów z ramką iframe dotyczy zakładek i nawigacji. Jeśli używasz go do zwykłego osadzania strony w treści, myślę, że jest w porządku. Po to jest iframe.
Jednak widziałem również nadużycia iframe. Nigdy nie należy go używać jako integralnej części witryny, ale jako element zawartości witryny.
Zwykle, jeśli możesz to zrobić bez ramki iframe, jest to lepsza opcja. Jestem pewien, że inni tutaj mogą mieć więcej informacji lub bardziej konkretne przykłady, wszystko sprowadza się do problemu, który próbujesz rozwiązać.
To powiedziawszy, jeśli jesteś ograniczony do HTML i nie masz dostępu do backendu takiego jak PHP lub ASP.NET itp., Czasami iframe jest twoją jedyną opcją.
window.postMessage()
, na przykład w celu zaimplementowania automatycznego zmieniania rozmiaru iframe.
Nie są złą praktyką, są tylko kolejnym narzędziem i dodają elastyczności.
Do użytku jako standardowy element strony ... są dobre, ponieważ są prostym i niezawodnym sposobem na podzielenie treści na kilka stron. Zwłaszcza w przypadku treści generowanych przez użytkowników przydatne może być „piaskownica” stron wewnętrznych w iframe
taki sposób, aby zły kod nie wpływał na stronę główną. Minusem jest to, że jeśli wprowadzisz wiele warstw przewijania (jedna dla przeglądarki, jedna dla iframe
), użytkownicy będą sfrustrowani. Jak powiedział Adzm, nie chcesz używać iframe
do podstawowej nawigacji, ale pomyśl o nich jako o tekście / znaczniku równoważnym ze sposobem osadzania wideo lub innego pliku multimedialnego.
W przypadku skryptowych zdarzeń w tle wybór zasadniczo obejmuje ukrywanie iframe
i XmlHttpRequest
ładowanie treści dla bieżącej strony. Różnica polega na tym, że iframe
generuje ładowanie strony, więc w większości przeglądarek możesz przechodzić do przodu i do tyłu w pamięci podręcznej przeglądarki. Zwróć uwagę, że Google, który używa w XmlHttpRequest
dowolnym miejscu, używa również iframe
s w niektórych przypadkach, aby umożliwić użytkownikowi przejście do poprzedniej i następnej historii przeglądarki.
„Złą praktyką” jest używanie ich bez zrozumienia ich wad. Stanowisko Adzma bardzo dobrze je podsumowuje.
Z drugiej strony gmail intensywnie wykorzystuje ramki iFrame w tle do niektórych swoich fajniejszych funkcji (takich jak automatyczne przesyłanie plików). Jeśli zdajesz sobie sprawę z ograniczeń iFrame, nie sądzę, że powinieneś odczuwać jakiekolwiek komplikacje podczas ich używania.
Pracując z nimi w wielu okolicznościach, naprawdę pomyślałem, że iframe są programistycznym odpowiednikiem instrukcji goto. Oznacza to, że należy na ogół unikać. W obrębie witryny mogą być nieco przydatne. Jednak w przypadku wielu witryn są one prawie zawsze złym pomysłem na coś innego niż najprostszą treść.
Rozważ możliwości ... jeśli są używane do sparametryzowanej zawartości, stworzyli interfejs. A w profesjonalnej witrynie interfejs ten wymaga umowy SLA i zarządzania wersjami - które prawie zawsze są ignorowane w pośpiechu, aby przejść do trybu online.
W przypadku zawartości aktywnej - ramek obsługujących skrypt - istnieją (różne) ograniczenia skryptu między domenami. Niektóre mogą zostać zhakowane, ale rzadko konsekwentnie. A jeśli twoja treść w ramce musi być interaktywna, będzie miała trudności z zrobieniem tego poza ramką.
W przypadku korzystania z licencjonowanych treści strony uczestniczące są obciążone koniecznością przeniesienia informacji o uprawnieniach poza pasmo między hostami.
Tak więc, choć okazjonalnie przydatne w obrębie witryny, raczej nie nadają się do mashupów. O wiele lepiej patrzysz na prawdziwe portale i portlety. Co gorsza, są ulubieńcem każdego amatora sieci - wielu menedżerów technicznych uważa się za rozwiązanie wielu problemów. W rzeczywistości tworzą więcej.
Z mojego doświadczenia wynika, że pozytywną stroną iframe jest wywoływanie kodów stron trzecich, co może obejmować wywołanie javascript, który wywołuje a, ma Document.write();
polecenie. Jak zapewne wiesz, tych komend nie można wywoływać asynchronicznie ze względu na sposób ich analizy (DOM Parser itp.). Przykładem tego jest http://sourceforge.net/projects/phpadsnew/ Wykorzystałem iframe, aby przyspieszyć naszą stronę, ponieważ było wiele wywołań do phpadsnews, a strona czekała na odpowiedź, zanim zaczęła renderować inaczej części strony. dzięki ramce iframe mogłem pozwolić stronie na renderowanie innych części strony i nadal Document.write()
asynchronicznie wywoływać polecenie phpadów. Zapobieganie i blokowanie js.
Zdecydowanie istnieją zastosowania dla ludzi iframe. Jak inaczej umieściłbyś widżet sieci pogodowych na swojej stronie? Jedynym innym sposobem jest złapanie ich XML i parsowanie go, ale wtedy oczywiście potrzebujesz warunków, aby rzucić częstą grafikę pogodową ... naprawdę nie warto, ale o wiele czystsze, jeśli masz czas.
Oryginalny model zestawu ramek (Frameset i Frame-elements) był bardzo zły z punktu widzenia użyteczności. IFrame jest późniejszym wynalazkiem, który nie miał tylu problemów, co oryginalny model zestawu ramek, ale ma swoją wadę.
Jeśli zezwolisz użytkownikowi na poruszanie się w ramce IFrame, wówczas łącza i zakładki nie będą działać zgodnie z oczekiwaniami (ponieważ zakładka zawiera adres URL strony zewnętrznej, ale nie adres URL ramki iframe).
Gdy Twoja strona główna ładuje się w protokole HTTP, a części strony muszą działać w protokole HTTPS, iFrame może pokonać jsonp.
Zwłaszcza jeśli twój dataType nie jest natywnie jsonem i musi zostać przetłumaczony na serwerze na json i przetłumaczony na kliencie np. Na złożony HTML.
Więc nie - iFrame nie jest zły.
Nie są złe, ale w rzeczywistości są pomocne. Jakiś czas temu miałem ogromny problem, kiedy musiałem osadzić mój kanał Twittera i po prostu nie pozwoliłbym md zrobić tego na tej samej stronie, więc ustawiłem go na innej stronie i umieściłem jako iframe.
Są również dobre, ponieważ obsługują je wszystkie przeglądarki (i przeglądarki telefonu). Nie można ich uważać za złą praktykę, o ile prawidłowo się ich używa.
Warto zauważyć, że iframe, niezależnie od szybkości połączenia internetowego użytkowników lub zawartości iframe, spowodują niewielkie (około 0,3 s), ale zauważalne spowolnienie szybkości pobierania strony. Nie jest to coś, co zobaczysz podczas testowania go lokalnie. W rzeczywistości dotyczy to każdego elementu dodanego do strony, ale ramki iframe wydają się gorsze.
Widziałem, że IFRAME stosowane były z powodzeniem jako prosty sposób na tworzenie dynamicznych menu kontekstowych, ale docelową grupą docelową tej aplikacji internetowej byli tylko użytkownicy Internet Explorera.
Powiedziałbym, że wszystko zależy od twoich wymagań. Jeśli chcesz mieć pewność, że strona działa równie dobrze w każdej przeglądarce, unikaj ramek IFRAME. Jeśli kierujesz reklamy do wąskiej i dobrze znanej publiczności (np. W lokalnym intranecie) i widzisz korzyści z używania ramek IFRAME, powiedziałbym, że jest to w porządku.