Quirksmode ha pubblicato un post su questo .
Poiché la pagina ora è rotta e accessibile solo tramite archive.org, l'ho riprodotta qui:
IFrame
In questa pagina fornisco una breve panoramica dell'accesso agli iframe dalla pagina in cui si trovano. Non sorprende, ci sono alcune considerazioni sul browser.
Un iframe è un frame inline, un frame che, pur contenendo una pagina completamente separata con il proprio URL, viene comunque inserito in un'altra pagina HTML. Questo offre ottime possibilità nel web design. Il problema è accedere all'iframe, ad esempio per caricare una nuova pagina al suo interno. Questa pagina spiega come farlo.
Cornice o oggetto?
La domanda fondamentale è se l'iframe è visto come una cornice o come un oggetto.
- Come spiegato nelle pagine Introduzione ai frame , se si utilizzano i frame il browser crea una gerarchia di frame per l'utente (
top.frames[1].frames[2]
e simili). L'iframe si adatta a questa gerarchia di frame?
- Oppure il browser vede un iframe come un altro oggetto, un oggetto che ha una proprietà src? In tal caso, dobbiamo usare una chiamata DOM standard (come
document.getElementById('theiframe'))
per accedervi. In generale, i browser consentono entrambe le visualizzazioni su iframe "reali" (codificati), ma gli iframe generati non sono accessibili come frame.
Attributo NAME
La regola più importante è dare qualsiasi iframe che crei un name
attributo, anche se usi anche un id
.
<iframe src="iframe_page1.html"
id="testiframe"
name="testiframe"></iframe>
La maggior parte dei browser necessita name
dell'attributo per rendere l'iframe parte della gerarchia dei frame. Alcuni browser (in particolare Mozilla) hanno bisogno id
di rendere accessibile l'iframe come oggetto. Assegnando entrambi gli attributi all'iframe tieni aperte le tue opzioni. Ma name
è molto più importante di id
.
Accesso
O accedete all'iframe come oggetto e lo modificate src
oppure accedete all'iframe come cornice e cambiate il suo location.href
.
document.getElementById ('iframe_id'). src = 'newpage.html'; frames ['iframe_name']. location.href = 'newpage.html'; La sintassi della cornice è leggermente preferibile perché Opera 6 la supporta ma non la sintassi dell'oggetto.
Accesso all'iframe
Quindi, per un'esperienza completa tra browser, dovresti dare un nome all'iframe e usare il
frames['testiframe'].location.href
sintassi. Per quanto ne so, funziona sempre.
Accesso al documento
L'accesso al documento all'interno dell'iframe è abbastanza semplice, a condizione che tu utilizzi l' name
attributo. Per contare il numero di collegamenti nel documento nell'iframe, fare
frames['testiframe'].document.links.length
.
Iframe generati
Quando si genera un iframe tramite il DOM W3C, iframe non viene immediatamente immesso frames
nell'array eframes['testiframe'].location.href
sintassi non funzionerà immediatamente. Il browser richiede un po 'di tempo prima che l'iframe compaia nell'array, tempo durante il quale non può essere eseguito alcuno script.
Il document.getElementById('testiframe').src
sintassi funziona bene in tutte le circostanze.
L' target
attributo di un collegamento non funziona neanche con iframe generati, tranne in Opera, anche se ho dato al mio iframe generato sia a name
che aid
.
La mancanza di target
supporto significa che è necessario utilizzare JavaScript per modificare il contenuto di un iframe generato, ma poiché è necessario JavaScript in ogni caso per generarlo in primo luogo, non vedo questo problema.
Dimensione del testo in iframe
Un curioso bug di Explorer 6:
Quando si modificano le dimensioni del testo tramite il menu Visualizza, le dimensioni del testo negli iframe vengono modificate correttamente. Tuttavia, questo browser non modifica le interruzioni di riga nel testo originale, pertanto una parte del testo potrebbe diventare invisibile oppure potrebbero verificarsi interruzioni di riga mentre la riga potrebbe contenere ancora un'altra parola.