Quanto è sbagliato posizionare il tag script dopo il tag di chiusura del corpo ( </body>). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Quanto è sbagliato posizionare il tag script dopo il tag di chiusura del corpo ( </body>). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Risposte:
Non verrà convalidato al di fuori dei tag <body>o <head>. Inoltre, non farà molta differenza - a meno che tu non stia facendo manipolazioni DOM che potrebbero interrompere IE prima che l'elemento body sia completamente caricato - per metterlo appena prima della chiusura </body>.
<html>
....
<body>
....
<script type="text/javascript" src="theJs.js"></script>
</body>
</html>
<script src="..." defer>, che funziona in tutti i principali browser (anche se con un bug potenzialmente dannoso in IE9 e inferiori).
Sì. Solo i commenti e il tag di fine per l'elemento html sono consentiti dopo il tag di fine per il corpo.
I browser possono eseguire il ripristino degli errori, ma non dovresti mai dipendere da questo.
Come ha detto Andy, il documento non sarà valido, ma la sceneggiatura verrà comunque interpretata. Vedi lo snippet di WebKit per esempio:
void HTMLParser::processCloseTag(Token* t)
{
// Support for really broken html.
// we never close the body tag, since some stupid web pages close it before
// the actual end of the doc.
// let's rely on the end() call to close things.
if (t->tagName == htmlTag || t->tagName == bodyTag
|| t->tagName == commentAtom)
return;
...
Internet Explorer non lo consente più (dalla versione 10, credo) e ignorerà tali script. FF e Chrome li tollerano ancora, ma ci sono possibilità che un giorno lascino cadere questo come non standard.
Inserire "script elemento" in modo procedurale dopo che "corpo dell'elemento" è "errore di analisi" mediante il processo consigliato da W3C . In "Struttura ad albero" crea un errore ed esegui "tokenize again" per elaborare quel contenuto. Quindi è come un ulteriore passaggio. Solo allora può essere eseguito "Script Execution" - vedere il processo di schema .
Qualsiasi altro "errore di analisi". Passare la "modalità di inserimento" su "nel corpo" e rielaborare il token.
Tecnicamente dal browser è un processo interno, come lo segnano e lo ottimizzano.
Spero di aver aiutato qualcuno.
Sì. Ma se aggiungi il codice al di fuori di esso molto probabilmente non sarà la fine del mondo poiché la maggior parte dei browser lo risolverà, ma è comunque una cattiva pratica entrare.
Google in realtà lo consiglia in merito a "Ottimizzazione CSS". Raccomandano di allineare gli stili above-fold critici e di rinviare il resto (file css).
Esempio:
<html>
<head>
<style>
.blue{color:blue;}
</style>
</head>
<body>
<div class="blue">
Hello, world!
</div>
</body>
</html>
<noscript><link rel="stylesheet" href="small.css"></noscript>
Vedi: https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery
bodydell'elemento. Quell'articolo di Google non consiglia a nessuno di fare una cosa del genere.
I browser moderni prenderanno i tag di script nel corpo in questo modo:
<body>
<script src="scripts/main.js"></script>
</body>
Fondamentalmente, significa che lo script verrà caricato una volta terminata la pagina, il che può essere utile in alcuni casi (vale a dire manipolazione DOM). Tuttavia, ti consiglio vivamente di prendere lo stesso script e inserirlo nel tag head con "differisci", in quanto darà lo stesso effetto.
<head>
<script src="scripts/main.js" defer></script>
</head>
scripttag avessero un eventattributo che potrebbe essere definito per determinare quando analizzare lo script. Quindi devi event="load" event="DOMContentLoaded"eseguire lo script dopo aver creato il DOM o nell'evento event="beforeunload"finestra beforeunload. Esempio, <script src="scripts/main.js" event="DOMContentLoaded"></script>.