Warum benutzen die Leute immer noch Iframes? [geschlossen]


87

Für mich sind Iframes rein böse (na ja, vielleicht nicht so rein). Sie scheinen viele Probleme zu machen. Ja, Ihre gesamte Site wird einmal geladen, und dann können Sie nur eine einzelne Seite laden. Aber die Leute haben AJAX zu diesem Zweck erfunden.

Eines der größten Probleme, das ich festgestellt habe, iframewar, dass ich keinen Link zu einer der Unterseiten einfügen konnte, da sich die URL nie geändert hat (ja, ich weiß, dass es dafür eine Problemumgehung gibt). Zweitens können Websuchmaschinen Probleme haben, diese Websites korrekt zu indizieren.

Manchmal ist die Zugänglichkeit dieser Websites schlechter und einige Browser können sie sogar falsch anzeigen.

Es gibt bessere Möglichkeiten, ein Layout ohne (i) Rahmen zu entwerfen. Jeden Tag kann ich jemanden sehen, der bei SO Fragen stellt, wie "Wie greife ich mit jQuery auf iframe zu?".

Was sind die Vorteile von iframes? Welchen Grund kann es sein, sie noch zu benutzen? Ich möchte nur wissen warum :)

(Da es keine echte Frage ist, ist es ein CW)


Ich stimme Moshe oben zu. Die einzige andere Verwendung von Iframes ist für: alte Web-Clients, die modernes CSS nicht unterstützen, oder in einer proprietären Umgebung.
Boris Hamanov

Heutzutage hat leider jeder Browser ein Kompatibilitätsproblem! Sie sind nicht Standard! div tag hat ein Problem, table tag hat ein Problem und so weiter ... sie verlieren unsere Zeit, um eine 100% kompatible Website zu entwerfen. Manchmal ist dies der letzte Weg, um eine Website auch mit IE7 kompatibel zu machen. verwendet einen Iframe. iframe kann jedes Problem beheben: '(Wenn Sie den Status meiner Website überprüfen, werden Sie viele Besuche von IE7 sehen. Viele Leute verwenden sogar 2016 alte Browser !!!
Mahdi Jazini

Antworten:


101

Ich kann mir (im Moment) zwei Gründe vorstellen, warum Leute immer noch iframes anstelle von AJAX verwenden würden:

1) Iframes umgehen die domänenübergreifende Ursprungsrichtlinie (Bilder, Skripte und Stile nicht). Dies kann nützlich sein, um Websites / Inhalte von anderen Domainnamen relativ sicher abzurufen. Grundsätzlich bietet dies den Vorteil, dass Daten aus anderen Domänen visuell angezeigt werden können, ohne dass sie mit unbegrenztem Zugriff auf Ihrer gesamten Seite herumstampfen (wie dies bei JSONP möglich wäre).

2) Sie können mehrere Arten von Ressourcen aus einem Iframe laden, nicht nur bestimmte MIME-Typen (Sie sind relativ beschränkt auf Anwendung / Javascript, Anwendung / X-Javascript, Text / CSS, Text / XML, Bild / PNG, Bild / jpeg, image / gif mit Skripten, XHR, Bildern und Quellen). Wenn ich Ihnen beispielsweise ein PDF anzeigen möchte, kann ich einen Iframe öffnen und das Adobe Reader-Plugin diese Datei anzeigen lassen. Wenn ich in derselben Domäne ein Skript, einen Stil und ein Bild zusammen leiten möchte (Inline auf der Seite, Bild müsste Daten-URI sein), kann ich dies mit einem Iframe erreichen (und wenn es sich in derselben befindet) Domäne, Port und Protokoll Ich kann auch mit JavaScript darauf zugreifen.

Wussten Sie, dass Google Mail eine Reihe von Iframes ist? Der sichtbare Teil ist nur eine clevere Positionierung. Darüber hinaus verwenden viele OAuth-Implementierungen (Twitter, Facebook, Google, Yahoo!) normalerweise Iframes, um einen Benutzer in seiner Domain mit einer erfolgreichen Authentifizierungs-URL zu verknüpfen (nachdem sich der Benutzer angemeldet hat).


2
Zu # 1, aber der HTTP-Header kann
Iframe

2
Zu # 2, aber Sie können es ohne <embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
Iframe

4
Zu # 3 kann Google Mail ohne Iframes umgeschrieben werden. Warum verwenden die Leute immer noch Iframes für moderne Browser? Die Frage bleibt unbeantwortet.
Pacerier

21

IFRAMEs werden verwendet, um Inhalte von Drittanbietern in eine Website einzubetten und zu isolieren.

Die meisten Web-Werbelösungen basieren auf Iframes, da sie Sicherheit (domänenübergreifende Richtlinien) und isolierte Rechtecke auf dem Bildschirm bieten, die vollständig durch Inhalte und Skripte von Drittanbietern verwaltet werden können (ein häufiger Anwendungsfall sind Werbung).

Eine weitere moderne Verwendung von IFRAMES ist die Verwaltung des Verlaufs (allgemeine Problemumgehung für Zurück-Schaltflächen) von AJAX-Anwendungen.

FRAMEs sind eine schlechte Version von IFRAMES. Ihre Verwendung nimmt ab.


1
Dies ist viel einfacher und ein gutes Beispiel für Anzeigen :)
oneworld

15

Wenn ein Benutzer Javascript deaktiviert hat, funktionieren iframes, wenn Ajax dies nicht tut. Dies kommt nicht in Frage, wenn man bedenkt, dass Leute Dinge wie NoScript verwenden .


4
Dies ist wahr, aber das Ändern / Hinzufügen / Bearbeiten des Iframes erfordert in den meisten Fällen JavaScript (mit Ausnahme von 2, die ich mir vorstellen kann, das Verknüpfen mit Zielen und das <form>Posten auf Zielen).
Dan Beam

Richtig; Trotzdem erfordert das Ändern dessen, was der Iframe auf die Verwendung von JS verweist, normalerweise eine Zeile, im Gegensatz zu der größeren Komplexität von XMLHttpRequest.
Reinderien

7

Ich verwende sie auf Ajax-Websites, wenn ich Dateien hochladen muss, ohne die Seite neu zu laden.


@Mwizak Ajax sollte afaik alle Arten von Javascript abdecken, einschließlich eckiger.
CodeReaper

3

Ich sehe immer noch, dass Iframes in großen Unternehmen verwendet werden, wo sie ein einzelnes Zeichen bereitstellen, auf dem Header-Informationen über den authentifizierten Benutzer eingefügt werden, die dann über einen Iframe an die eigentliche (n) Anwendung (en) übergeben werden. Da das den iframe umgebende "Portal" alle spezifischen Authentifizierungsdetails verarbeitet, muss für die dahinter stehenden Anwendungen nicht jeweils eine Implementierung vorhanden sein, was die Entwicklung für das Entwicklungsteam vereinfacht und einen einzigen Ort zum Überwachen und Anpassen von Authentifizierungsdetails bietet von Benutzern.


Sie können nicht verstehen, warum Sie mit XMLHttpRequest ( w3.org/TR/XMLHttpRequest/#the-setrequestheader-method ) keine Header hinzufügen können, es sei denn, Domäne, Protokoll und Ports stimmen nicht überein (was bedeutet, dass Sie ein anderes Problem haben als Header)?
Dan Beam

Der Punkt ist, dass es 2 verschiedene Anwendungen sind, normalerweise sogar 2 völlig verschiedene Technologien. Der eine übernimmt die Authentifizierung und der andere greift nach den injizierten Headern für das Authentifizierungsticket (oder baut es bei Bedarf auf).
Kris van der Mast

3

Es gibt viele technische Gründe, sie zu verwenden (insbesondere das von Dan Beam erwähnte Sicherheitsproblem).

Was Sie nicht tun sollten, ist, Iframes "wie Frames" zu verwenden und zu neuen Seiten zu navigieren, indem Sie nur den Iframe aktualisieren. Wie Sie sagen, verhindert dies, dass die Navigation mit Lesezeichen / Links versehen werden kann, auf die normalen Navigationsschaltflächen reagiert und nützliche Link-Vorteile wie das Öffnen neuer Registerkarten bietet.

Aber das ist Iframes nicht eigen. Sie können immer mehr Seiten sehen, auf denen die Navigation erfolgt, indem Sie neuen Inhalt mit abrufen XMLHttpRequestund in die Hauptinhaltsbereiche schreiben innerHTML. Oft geschieht dies mit jQuery load()und clever-cleveren Slidey-Animationen. Dies unterbricht die Navigation genauso stark wie iframe-using-as-Frame oder Framesets der alten Schule. Es ist eine Schande, dass so viele Webautoren diese Taktik anwenden, weil sie glauben, dass es sich um eine hochmoderne Webdesign-Methode handelt, wenn es sich bei den verachteten Framesets von gestern wirklich nur um einen neuen Skin handelt.

Sie können es in beiden Fällen umgehen, aber es bedeutet, dass Sie einen Ansichtsstatus im #Fragment- ID- Teil speichern und eine ordnungsgemäße Hash-Navigation unterstützen müssen, was nicht trivial ist. Selbst dann haben Sie immer noch Probleme mit Nicht-JS-Agenten wie Suchmaschinen. Sie müssen am Ende eine parallele ?und haben# basierte Navigation haben, um beide zu unterstützen. Es ist ein Schmerz und die meisten stören sich nicht.


Freuen Sie sich auf die Verlaufs-API in HTML5, mit der Inhalte abgerufen werden können, ohne dass die Schaltfläche "Zurück / Vorwärts" neu geladen oder unterbrochen werden muss.
Lie Ryan

2

Framesets sind ab HTML 5 veraltet, und manchmal benötigen Sie einen Frame mit einer anderen Site innerhalb einer Site. Auch AJAX kann nur so viel. Versuchen Sie, eine Datei über https ohne Iframe auf eine Site in einer anderen Domain hochzuladen. AJAX wird Ihnen dort nicht helfen.


2

Neben anderen Gründen habe ich eine bestimmte Verwendung iframein meiner Anwendung. Leider ist der Zielbrowser in meinem FallInternet Explorer 6 . Ich brauche eine Fußzeile und eine Kopfzeile, die auf meinen Webseiten festgelegt sind. Der Hauptteil dieser Seite ist scrollbar.

Es gibt jedoch einen Fehler in IE6, bei dem ich mit der CSS-Eigenschaft kein divElement über selectElementen anzeigen kann z-index. Daher muss ich eine erstelleniframe , der als Hack verwendet wird, um dieses Problem zu vermeiden.

Natürlich ist dies eine wirklich spezifische Verwendung iframeund betrifft nur IE6...



1

Ich habe ein soziales Netzwerk aufgebaut und sehe, dass Iframes für Widgets nützlich sind, um sie auf der Website anderer Leute zu platzieren, um sie wie ein Mini-Profil anzuzeigen oder in den Inhalt eines Remote-Servers zu integrieren. Scheint der einfachste Weg zu sein, dies zu bauen. Ich weiß, dass einige Widgets JavaScript verwenden. Auch mit der iframe-Methode entspricht die Sitzung dem normalen Besuch der Site, daher ideal für ähnliche Schaltflächen.


0

Viele formatierte Texteditoren (z. B. TinyMCE, HTMLArea) sind als Iframe implementiert.


Dies liegt an FireFox IIRC.
alex

0

iFrames sind in einigen Fällen in Ordnung, beispielsweise als X-Domain-Anforderungen oder zum Posten von Daten an eine Quelle über Parameter. Wenn ich jedoch domänenübergreifend auf Daten zugreifen möchte, bevorzuge ich die Verwendung von CSS-Dateien - sie können Parameter akzeptieren, Cookies setzen, Inhalte zur Seite hinzufügen (: vorher &: nachher) und ein visuelles Feedback geben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.