javascript - Är det fel att placera <script>-taggen efter </body>-taggen?
Hur fel är det att placera script-taggen efter stängningstaggen för body (</body>)?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Svar #1
Det kommer inte att validera utanför <body> eller <head> taggarna. Det kommer heller inte att göra så stor skillnad — om du inte utför DOM-manipulationer som kan krascha IE innan body-elementet är fullständigt laddat — att placera det precis före avslutande </body>.
<html>
....
<body>
....
<script type="text/javascript" src="theJs.js"></script>
</body>
</html>
Svar #2
Endast kommentarer och sluttaggen för html-elementet är tillåtna efter sluttaggen för body.
Du kan bekräfta detta med specifikationen eller en validator.
Webbläsare kan utföra felåterställning, och HTML-specifikationen beskriver till och med hur man återställer i den situationen, men du bör aldrig förlita dig på det.
Det är också värt att notera att den vanliga anledningen till att placera skriptelementet i slutet är att säkerställa att de element som skriptet kan försöka komma åt via DOM existerar innan skriptet körs.
Med ankomsten av defer-attributet kan vi placera script i head och ändå få den fördelen samtidigt som JS laddas ner av webbläsaren parallellt med HTML för bättre prestanda.
Svar #3
Som Andy sa, dokumentet kommer inte att vara giltigt, men ändå kommer skriptet fortfarande att tolkas. Se utdraget från WebKit till exempel:
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;
...
