Dlaczego ludzie nadal używają ramek iframe? [Zamknięte]

89

Dla mnie iframe to czyste zło (no może nie tak czyste). Wydaje się, że sprawiają wiele kłopotów. Tak, cała witryna zostanie załadowana raz, a następnie możesz załadować tylko pojedyncze strony. Ale ludzie wymyślili w tym celu AJAX.

Jednym z największych problemów, które znalazłem, iframebyło to, że nie mogłem wkleić linku do jednej z podstron, ponieważ adres URL nigdy się nie zmienił (tak, wiem, że jest na to obejście). Po drugie, wyszukiwarki internetowe mogą mieć problemy z poprawnym indeksowaniem tych witryn.

Czasami dostępność tych stron jest gorsza, a niektóre przeglądarki mogą nawet wyświetlać je nieprawidłowo.

Istnieją lepsze sposoby projektowania układu bez (i) ramek. Codziennie widzę, jak ktoś zadaje na SO pytania, na przykład „Jak uzyskać dostęp do iframe za pomocą jQuery?”.

Jakie są więc zalety ramek iframe? Jaki może być powód, aby nadal ich używać? Chciałbym tylko wiedzieć, dlaczego :)

(ponieważ to nie jest prawdziwe pytanie, to CW)

Ventus
źródło
Zgadzam się z Moshe powyżej. Jedyne inne zastosowanie ramek iframe to: starożytne klienty internetowe, które nie obsługują współczesnego CSS lub w jakimś zastrzeżonym środowisku.
Boris Hamanov
obecnie niestety w każdej przeglądarce występuje problem ze zgodnością! nie są standardowe! Tag div ma problem, tag tabeli ma problem i tak dalej ... stracą czas na zaprojektowanie w 100% kompatybilnej witryny. czasami ostateczny sposób na dostosowanie strony internetowej nawet do IE7. używa elementu iframe. iframe może załatać każdy problem: '(jeśli sprawdzisz status mojej strony internetowej, zobaczysz wiele wizyt z IE7. wiele osób używa starych przeglądarek nawet w 2016 roku !!!
Mahdi Jazini

Odpowiedzi:

102

Przychodzą mi do głowy 2 powody (w tej chwili), dla których ludzie nadal używaliby ramek iframe zamiast AJAX:

1) Ramki iframe omijają zasady dotyczące źródeł międzydomenowych (obrazy, skrypty i style nie). Może to być przydatne do względnie bezpiecznego pobierania witryn / treści z innych nazw domen. Zasadniczo daje to tę zaletę, że jest w stanie wizualnie wyświetlać dane z innych domen, nie pozwalając im tupać po całej stronie z nieograniczonym dostępem (tak jak byłoby to w stanie zrobić JSONP).

2) Możesz załadować wiele typów zasobów z elementu iframe, a nie tylko niektóre typy MIME (jesteś stosunkowo ograniczony do application / javascript, application / x-javascript, text / css, text / xml, image / png, image / jpeg, image / gif ze skryptami, XHR, obrazami i źródłami). Na przykład, jeśli chcę pokazać plik PDF, mogę otworzyć ramkę iframe i pozwolić wtyczce Adobe Reader pokazać ten plik. Ponadto w tej samej domenie, jeśli chcę potokować skrypt, styl i obraz razem (w wierszu na stronie, obraz musiałby być identyfikatorem URI danych), mogę to zrobić za pomocą elementu iframe (i jeśli jest w tym samym domena, port i protokół, do którego mam również dostęp za pomocą JavaScript).

Czy wiesz, że Gmail to zestaw ramek iframe? Widoczna część to po prostu sprytne ustawienie. Ponadto wiele implementacji protokołu OAuth (Twitter, Facebook, Google, Yahoo!) zwykle używa ramek iframe do kojarzenia użytkownika w swojej domenie z adresem URL pomyślnego uwierzytelnienia (po zalogowaniu się użytkownika).

Dan Beam
źródło
2
Do # 1, Ale nagłówek HTTP może blokować ramkę iframe .....
Pacerier
2
Ad # 2, Ale możesz to zrobić bez iframe, np.<embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
Pacerier
4
Re # 3, Gmail można przepisać bez ramek iframe. Dlaczego więc ludzie nadal używają ramek iframe w nowoczesnych przeglądarkach? Pytanie pozostaje bez odpowiedzi.
Pacerier
22

Ramki iFRAME służą do osadzania i izolowania zawartości stron trzecich w witrynie.

Większość rozwiązań reklamowych w sieci opiera się na elementach iframe - ponieważ zapewniają one bezpieczeństwo (politykę międzydomenową) i izolowany prostokąt na ekranie, którym można w pełni zarządzać za pomocą treści i skryptów stron trzecich (częstym przypadkiem użycia są reklamy).

Innym nowoczesnym zastosowaniem IFRAMES jest zarządzanie historią (wspólne obejście przycisku Wstecz) aplikacji AJAX.

RAMKI to kiepska wersja IFRAMES. Ich użycie spada.

gert
źródło
1
To jest dużo prostszy i dobry przykład reklam :)
oneworld
15

Jeśli użytkownik ma wyłączony javascript, ramki iframe będą działać, gdy Ajax nie. Nie jest to wykluczone, biorąc pod uwagę, że ludzie używają rzeczy takich jak NoScript .

Reinderien
źródło
4
To prawda, ale zmiana / dodanie / manipulowanie ramką iframe w większości przypadków wymaga JavaScript (z wyjątkiem 2, które przychodzą mi do głowy, linkowania do celów i <form>wysyłania do celów).
Dan Beam
Dobrze; Mimo to, zmiana tego, co wskazuje iframe na używanie JS, zwykle wymaga jednej linii, w przeciwieństwie do większej złożoności XMLHttpRequest.
Reinderien
7

Używam ich na stronach Ajax, kiedy potrzebuję załadować pliki bez przeładowywania strony.

CodeReaper
źródło
@Mwizak Ajax powinien afaik obejmować wszystkie rodzaje javascript, w tym angular.
CodeReaper,
3

Nadal widzę ramki iframe używane w dużych korporacjach, w których zapewniają one pojedynczy znak, który wstrzykuje informacje w nagłówku o uwierzytelnionym użytkowniku, które są następnie przekazywane za pośrednictwem elementu iframe do rzeczywistych aplikacji. Ponieważ „portal” otaczający element iframe obsługuje wszystkie określone szczegóły uwierzytelniania, te aplikacje za nim stojące nie muszą mieć implementacji dla każdego z nich, co ułatwia pracę zespołowi programistów i zapewnia jedno miejsce do monitorowania i dostosowywania szczegółów uwierzytelniania użytkowników.

Kris van der Mast
źródło
Nie rozumiem, dlaczego nie możesz dodawać nagłówków za pomocą XMLHttpRequest ( w3.org/TR/XMLHttpRequest/#the-setrequestheader-method ), chyba że domena, protokół i porty nie są zgodne (co oznacza, że ​​masz inny problem niż nagłówki)?
Dan Beam
Chodzi o to, że to 2 różne aplikacje, zwykle nawet 2 zupełnie różne technologie. Jeden obsługuje uwierzytelnianie, a drugi pobiera wstrzyknięte nagłówki dla biletu uwierzytelniania (lub tworzy go w razie potrzeby).
Kris van der Mast
3

Istnieje wiele technicznych powodów, aby z nich korzystać (szczególnie kwestia bezpieczeństwa, o której wspomniał Dan Beam).

Nie powinieneś używać ramek iframe „jak ramki”, nawigując do nowych stron, aktualizując tylko ramkę iframe. Jak mówisz, zapobiega to zakładaniu / łączeniu nawigacji z zakładkami, reagowaniu na zwykłe przyciski nawigacyjne i zapewnianiu przydatnych funkcji linków, takich jak otwieranie w nowej karcie.

Ale to nie jest charakterystyczne dla ramek iframe. Możesz zobaczyć coraz więcej stron, na których nawigacja odbywa się, pobierając nową zawartość XMLHttpRequesti zapisując ją w głównych elementach div zawartości innerHTML. Często odbywa się to za pomocą jQuery load()i sprytnych animacji slajdów. To psuje nawigację tak samo źle, jak ramka iframe-used-as-frame, czy nawet oldschoolowe zestawy ramek. Szkoda, że ​​wielu autorów stron internetowych stosuje tę taktykę, wierząc, że jest to supernowoczesna metodologia projektowania stron internetowych, podczas gdy tak naprawdę jest to tylko nowa skóra na pogardzanych wczoraj zestawach ramek.

Możesz to obejść w obu przypadkach, ale oznacza to, że musisz przechowywać stan widoku w #części z identyfikatorem fragmentu i obsługiwać właściwą nawigację hash, co nie jest trywialne. Nawet wtedy nadal masz problemy z agentami nie będącymi JS, takimi jak wyszukiwarki; w końcu musisz mieć równoległą ?i #opartą na nawigacji nawigację do obsługi obu. To ból i większość nie przejmuje się tym.

bobince
źródło
Oczekuj interfejsu API historii w HTML5, który pozwoli na pobieranie treści bez ponownego ładowania lub przerywania przycisku Wstecz / Dalej.
Lie Ryan
2

Zestawy ramek są nieaktualne od wersji HTML 5 i czasami trzeba mieć ramkę z inną witryną w witrynie. AJAX może zrobić tylko tyle. Spróbuj przesłać plik do witryny w innej domenie przez https bez elementu iframe. AJAX ci tam nie pomoże.

McTrafik
źródło
2

Oprócz innych powodów mam jedno szczególne użycie iframew mojej aplikacji. Niestety docelową przeglądarką w moim przypadku jest Internet Explorer 6. Muszę mieć stopkę i nagłówek, które są poprawione na moich stronach internetowych. Główną część tej strony można przewijać.

Jednak w IE6 jest błąd polegający na tym, że nie mogę wyświetlić divelementu na wierzchu selectelementów przy użyciu z-indexwłaściwości CSS. Dlatego muszę utworzyć plik, iframektóry posłuży jako hack, aby uniknąć tego problemu.

Oczywiście jest to naprawdę specyficzne zastosowanie iframei dotyczy tylko IE6...

romaintaz
źródło
1

Edytory Javascript WYSIWYG używają ramek iframe, ponieważ jest to najłatwiejszy i najlepszy sposób na zrobienie tego. Na przykład TinyMCE używa go:

http://tinymce.moxiecode.com/

Nowicjusz
źródło
1

Budowałem sieć społecznościową i widzę, że elementy iframe są przydatne w przypadku widżetów, które można umieszczać na stronach internetowych innych osób, aby wyświetlać się jak miniprofil lub integrować się z zawartością na zdalnym serwerze. Wydaje się, że to najprostszy sposób na zbudowanie tego. Wiem, że niektóre widżety używają JavaScript. Również w przypadku metody iframe sesja jest taka sama, jak normalne odwiedzanie witryny, więc świetnie nadaje się do podobnych przycisków.

Keverw
źródło
0

Wiele formatowanych edytorów tekstu (np. TinyMCE, HTMLArea) jest zaimplementowanych jako iframe.

Lie Ryan
źródło
Dzieje się tak z powodu FireFox IIRC.
Alex
0

Ramki iFrame są w porządku w niektórych przypadkach, jak żądania X-domain lub wysyłanie danych do źródła za pomocą parametrów. Ale kiedy chcę uzyskać dostęp do danych w różnych domenach, wolę używać plików CSS - mogą akceptować parametry, ustawiać pliki cookie, dodawać zawartość do strony (: przed i: po) i przekazywać wizualną informację zwrotną.

fb55
źródło