Perché le persone usano ancora gli iframe? [chiuso]


89

Per me gli iframe sono puro male (beh, forse non così puro). Sembra che creino molti guai. Sì, l'intero sito verrà caricato una volta e poi potrai caricare solo una singola pagina. Ma le persone hanno inventato AJAX per questo scopo.

Uno dei maggiori problemi che ho riscontrato è iframestato l'impossibilità di incollare un collegamento a una delle sottopagine, perché l'URL non è mai cambiato (sì, so che c'è una soluzione alternativa per questo). In secondo luogo, i motori di ricerca web potrebbero avere problemi a indicizzare correttamente quei siti.

A volte l'accessibilità di questi siti è peggiore e alcuni browser possono persino visualizzarli in modo improprio.

Esistono modi migliori per progettare il layout senza (i) frame. Ogni giorno posso vedere qualcuno che fa domande a SO, come "Come accedere a iframe con jQuery?".

Quindi quali sono i vantaggi degli iframe? Che motivo può esserci per usarli ancora? Vorrei solo sapere perché :)

(poiché non è una vera domanda, è un CW)


Sono d'accordo con Moshe sopra. L'unico altro utilizzo degli Iframe è per: client Web antichi che non supportano CSS moderni o in qualche ambiente proprietario.
Boris Hamanov

in questi giorni, purtroppo, ogni browser ha un problema di compatibilità! non sono standard! il tag div ha un problema, il tag table ha un problema e così via ... perderanno il nostro tempo per progettare un sito web compatibile al 100%. a volte l'ultimo modo per rendere un sito compatibile anche con IE7. sta utilizzando un iframe. iframe può correggere ogni problema: '(se controlli lo stato del mio sito web, vedrai molte visite da IE7. molte persone usano vecchi browser anche nel 2016 !!!
Mahdi Jazini

Risposte:


102

Posso pensare a 2 ragioni (al momento) per cui le persone utilizzerebbero ancora iframe invece di AJAX:

1) Gli iframe aggirano la politica dell'origine interdominio (immagini, script e stili non lo fanno). Questo può essere utile per estrarre siti / contenuti da altri nomi di dominio in modo relativamente sicuro. Fondamentalmente, questo offre il vantaggio di poter mostrare visivamente i dati da altri domini senza lasciarli calpestare tutta la tua pagina con accesso illimitato (come qualcosa come JSONP sarebbe in grado di fare).

2) Puoi caricare più tipi di risorse da un iframe, non solo alcuni tipi MIME (sei relativamente limitato a application / javascript, application / x-javascript, text / css, text / xml, image / png, image / jpeg, immagine / gif con script, XHR, immagini e sorgenti). Ad esempio, se voglio mostrarti un PDF, posso aprire un iframe e lasciare che il plugin Adobe Reader ti mostri quel file. Inoltre, nello stesso dominio, se voglio pipeline uno script, uno stile e un'immagine tutti insieme (inline nella pagina, l'immagine dovrebbe essere l'URI dei dati), posso farlo con un iframe (e se è nello stesso dominio, porta e protocollo posso accedervi anche con JavaScript).

Sapevi che Gmail è un insieme di iframe? La parte visibile è solo un posizionamento intelligente. Inoltre, molte implementazioni OAuth (Twitter, Facebook, Google, Yahoo!) di solito utilizzano iframe per associare un utente nel proprio dominio a un URL di autenticazione riuscito (per dopo che l'utente ha effettuato l'accesso).


2
Ri # 1, ma l'intestazione HTTP può bloccare iframe .....
Pacerier

2
Ri # 2, ma puoi farlo senza iframe, ad esempio<embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
Pacerier

4
Re # 3, Gmail può essere riscritto senza iframe. Allora perché le persone usano ancora iframe per i browser moderni? La domanda rimane senza risposta.
Pacerier

22

Gli IFRAME vengono utilizzati per incorporare e isolare contenuti di terze parti in un sito web.

La maggior parte delle soluzioni di pubblicità web si basa su iframe, perché forniscono sicurezza (policy interdominio) e un rettangolo isolato sullo schermo che può essere completamente gestito da contenuti e script di terze parti (un caso d'uso comune sono gli annunci pubblicitari).

Un altro uso moderno di IFRAMES è la gestione della cronologia (soluzione alternativa comune al pulsante Indietro) delle applicazioni AJAX.

I FRAME sono una versione scadente degli IFRAMES. Il loro uso sta diminuendo.


1
Questo è molto più semplice e un buon esempio di annunci :)
oneworld

15

Se un utente ha javascript disabilitato, gli iframe funzioneranno quando ajax no. Questo non è escluso, considerando che le persone usano cose come NoScript .


4
Questo è vero, ma la modifica / aggiunta / manipolazione dell'iframe richiede JavaScript nella maggior parte dei casi (ad eccezione di 2 a cui posso pensare, collegamento a target e <form>pubblicazione su target).
Dan Beam

Destra; anche così, cambiare ciò che l'iframe punta all'uso di JS richiede in genere una riga, al contrario della maggiore complessità di XMLHttpRequest.
Reinderien

7

Li uso sui siti web ajax, quando ho bisogno di caricare file senza ricaricare la pagina.


@Mwizak Ajax dovrebbe afaik coprire tutti i tipi di javascript incluso angular.
CodeReaper

3

Vedo ancora iframe utilizzati nelle grandi aziende in cui forniscono un unico segno su cui inietta le informazioni di intestazione sull'utente autenticato che vengono quindi passate, tramite un iframe, alle applicazioni effettive. Dal momento che il "portale" che circonda l'iframe gestisce tutti i dettagli di autenticazione specifici, quelle applicazioni dietro di esso non hanno bisogno di avere ciascuna un'implementazione per esso, rendendo le cose più facili da fare per il team di sviluppo e avendo un unico posto per monitorare e regolare i dettagli di autenticazione degli utenti.


Non vedo perché non puoi aggiungere intestazioni con XMLHttpRequest ( w3.org/TR/XMLHttpRequest/#the-setrequestheader-method ) a meno che il dominio, il protocollo e le porte non corrispondano (il che significa che hai un problema diverso da intestazioni)?
Dan Beam

Il punto è che si tratta di 2 applicazioni diverse, di solito anche 2 tecnologie completamente diverse. Uno gestisce l'autenticazione e l'altro acquisisce le intestazioni iniettate per il ticket di autenticazione (o lo costruisce quando necessario).
Kris van der Mast,

3

Ci sono molte ragioni tecniche per usarli (specialmente il problema di sicurezza menzionato da Dan Beam).

Quello che non dovresti fare è usare iframe "come i frame", facendo la navigazione a nuove pagine aggiornando solo l'iframe. Come dici tu, questo impedisce alla navigazione di essere segnalibro / collegabile, rispondere ai normali pulsanti di navigazione e fornire utili offerte di collegamento come open-in-new-tab.

Ma non è peculiare degli iframe. Puoi vedere sempre più pagine in cui viene eseguita la navigazione recuperando nuovi contenuti con XMLHttpRequeste scrivendoli nei div dei contenuti principali innerHTML. Spesso questo viene fatto con jQuery load()e animazioni slidey intelligenti. Questo interrompe la navigazione tanto quanto i frameset iframe-used-as-frame o della vecchia scuola. È un peccato che così tanti autori web utilizzino questa tattica credendo che sia una metodologia di web design super moderna, quando in realtà è solo una nuova pelle sui frame disprezzati di ieri.

Puoi aggirarlo in entrambi i casi, ma significa che devi memorizzare un viewstate nella #parte dell'identificatore di frammento e supportare una corretta navigazione hash, che non è banale. Anche allora hai ancora problemi con agenti non JS come i motori di ricerca; si finisce per dover disporre di una navigazione parallela ?e #basata su entrambi per supportare entrambi. È un dolore e la maggior parte non si preoccupa.


Attendo con ansia l'API Cronologia in HTML5, che consentirà il recupero dei contenuti senza ricaricare o rompere il pulsante Indietro / Avanti.
Lie Ryan,

2

I set di frame sono obsoleti a partire da HTML 5 e talvolta è necessario disporre di un frame con un altro sito all'interno di un sito. Anche AJAX può fare solo così tanto. Prova a caricare un file su un sito su un altro dominio tramite https senza un iframe. AJAX non ti aiuterà in questo.


2

Oltre ad altri motivi, ho un utilizzo specifico di iframenella mia applicazione. Sfortunatamente, il browser di destinazione nel mio caso è Internet Explorer 6. Ho bisogno di un piè di pagina e di un'intestazione fissati nelle mie pagine web. La parte principale di questa pagina è scorrevole.

Tuttavia, c'è un bug in IE6 in cui non è possibile visualizzare un divelemento sopra gli selectelementi utilizzando la z-indexproprietà CSS. Quindi, ho bisogno di creare un iframeche verrà utilizzato come hack per evitare questo problema.

Ovviamente, questo è un uso davvero specifico iframee unica preoccupazione IE6...



1

Stavo costruendo un social network e vedo che gli iframe sono utili per i widget da mettere sul sito web di altre persone per mostrarli come un mini profilo o integrarli con il contenuto su un server remoto. Sembra il modo più semplice per costruirlo. So che alcuni widget utilizzano JavaScript. Anche con il metodo iframe la sessione è la stessa che visitare il sito normalmente, quindi ottimo per i pulsanti simili.


0

Molti editor di testo formattato (ad esempio TinyMCE, HTMLArea) sono implementati come iframe.


Ciò è dovuto a FireFox IIRC.
alex

0

Gli iFrame vanno bene per alcuni casi, come richieste di dominio X o invio di dati a una fonte tramite parametri. Ma quando voglio accedere ai dati attraverso i domini, preferisco usare i file CSS: possono accettare parametri, impostare cookie, aggiungere contenuti alla pagina (: prima e: dopo) e fornire un feedback visivo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.