2014-12-18 12 views
13

Su Firefox e Safari, il seguente codice visualizza solo il primo iframePerché un tag iframe a chiusura automatica impedisce la visualizzazione di ulteriori elementi DOM?

<iframe src="http://www.bing.com"/> 
<iframe src="http://www.tsr.ch"/> 

, mentre l'aggiunta del tag di chiusura risolve il problema

<iframe src="http://www.bing.com"></iframe> 
<iframe src="http://www.tsr.ch"></iframe> 

Non capisco il motivo per cui non funziona. Quando si analizza il secondo esempio con DOMParser, comunque esegue la trasformazione in iframe a chiusura automatica.

violino qui: http://jsfiddle.net/hLcukz6p/

+0

Gli IFrame non si chiudono automaticamente. Il comportamento è di progettazione. Se DOMParser lo fa in modo diverso, non sta seguendo gli standard –

+0

iframes e gli script non supportano il formato di chiusura automatica. Fastidioso, lo so. Questo è l'HTML per te :( – oriadam

risposta

22

Poiché l'elemento iframe non è un elemento a chiusura automatica. Le versioni di Firefox e Safari che stai utilizzando stanno trattando il /> alla fine come solo > e assumendo tutto dopo che è contenuto all'interno dello iframe.

Se tentiamo di passare il codice che hai dato attraverso W3C's validator vedremo i seguenti errori:

Error: Self-closing syntax (/>) used on a non-void HTML element. Ignoring the slash and treating as a start tag.

<iframe src="http://www.bing.com"/> 

Error: End of file seen when expecting text or an end tag.

</html> 

Error: Unclosed element iframe .

<iframe src="http://www.bing.com"/> 

Se si controlla il documento con Element Inspector del browser, vedrete che cosa sta succedendo .

Chrome, che sto utilizzando, converte l'invalido <iframe ... />-<iframe ...></iframe>:

Chrome Example

+1

Il browser non ignora il '>'. Questo segna ancora la fine del tag iniziale – Quentin

+0

@Quentin buon punto! Modificato. –

+0

Grazie per la tua risposta. un tag di chiusura corretto.Che cosa succede è che memorizzo questo codice HTML in un database e, una volta recuperato, utilizzo DOMParser.PROPerser trasforma il codice valido nel formato non valido, sfortunatamente .. – Barth

6

Non c'è cosa come un "iframe a chiusura automatica" in HTML (o, se è per questo, qualsiasi altro tipo di tag a chiusura automatica, ci sono solo alcuni elementi in cui il tag finale può o deve essere omesso e iframe non è uno di questi).

Si dispone di un tag iframe con un valore non valido / alla fine.

Tutto ciò che segue è un nodo figlio dell'iframe, quindi è considerato come contenuto alternativo per i browser che non supportano iframe.


XHTML supporta i tag a chiusura automatica, e ogni elemento può essere aggiunto utilizzando uno (se non si è compatibile HTML).

HTML 5 consente un / alla fine di un tag di inizio per un elemento quando il tag di fine viene omesso, ma non ha alcun effetto oltre a soddisfare la dipendenza XML e gli evidenziatori di sintassi errata.

Problemi correlati