Jak źle jest umieścić znacznik skryptu za znacznikiem zamykającym body ( </body>
). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Jak źle jest umieścić znacznik skryptu za znacznikiem zamykającym body ( </body>
). ?
<html>
....
<body>
....
</body>
<script type="text/javascript" src="theJs.js"></script>
</html>
Odpowiedzi:
Nie będzie sprawdzać poprawności poza tagami <body>
lub <head>
. Nie będzie to również miało większego znaczenia - chyba że wykonujesz manipulacje DOM, które mogłyby uszkodzić IE przed pełnym załadowaniem elementu body - do umieszczenia go tuż przed zamknięciem </body>
.
<html>
....
<body>
....
<script type="text/javascript" src="theJs.js"></script>
</body>
</html>
<script src="..." defer>
, który działa we wszystkich głównych przeglądarkach (choć z potencjalnie łamliwym błędem w IE9 i niższych).
Tak. Tylko komentarze i znacznik końcowy elementu html są dozwolone po znaczniku końcowym dla treści.
Przeglądarki mogą wykonywać odzyskiwanie po błędzie, ale nigdy nie powinieneś na tym polegać.
Jak powiedział Andy , dokument nie będzie ważny, ale mimo to skrypt nadal będzie interpretowany. Zobacz fragment kodu z WebKit na przykład:
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;
...
IE już na to nie pozwala (jak sądzę od wersji 10) i zignoruje takie skrypty. FF i Chrome nadal je tolerują, ale są szanse, że pewnego dnia odrzucą to jako niestandardowe.
Proceduralnie wstaw „skrypt skryptu” po „treści elementu” to „błąd analizy” według zalecanego procesu przez W3C . W „Konstrukcji drzewa” utwórz błąd i uruchom „ponownie tokenizuj”, aby przetworzyć tę zawartość. To jest jak dodatkowy krok. Tylko wtedy można uruchomić „Wykonanie skryptu” - patrz proces schematu .
Cokolwiek innego „błąd analizy”. Przełącz „tryb wstawiania” na „w treści” i ponownie przetworz token.
Technicznie przez przeglądarkę jest to proces wewnętrzny, jak go zaznaczają i optymalizują.
Mam nadzieję, że komuś pomogłem.
Tak. Ale jeśli dodasz kod poza nim, najprawdopodobniej nie będzie to koniec świata, ponieważ większość przeglądarek to naprawi, ale nadal jest to zła praktyka.
Google faktycznie zaleca to w odniesieniu do „Optymalizacji CSS”. Zalecają wstawianie krytycznych stylów z zakładaniem i odkładanie reszty (plik css).
Przykład:
<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>
Zobacz: https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery
body
elementem. Ten artykuł Google nie radzi nikomu robić takich rzeczy.
Nowoczesne przeglądarki przyjmują znaczniki skryptów w treści w następujący sposób:
<body>
<script src="scripts/main.js"></script>
</body>
Zasadniczo oznacza to, że skrypt zostanie załadowany po zakończeniu strony, co może być przydatne w niektórych przypadkach (a mianowicie manipulacji DOM). Jednak zdecydowanie zalecam wzięcie tego samego skryptu i umieszczenie go w tagu head z opcją „defer”, ponieważ da to ten sam efekt.
<head>
<script src="scripts/main.js" defer></script>
</head>
script
tagi miały event
atrybut, który można zdefiniować w celu ustalenia, kiedy należy przeanalizować skrypt. Musisz więc event="load" event="DOMContentLoaded"
uruchomić skrypt po utworzeniu DOM lub event="beforeunload"
w beforeunload
zdarzeniu okna . Przykładem <script src="scripts/main.js" event="DOMContentLoaded"></script>
.