2010-06-14 12 views

Odpowiedz

153

Nie będzie validate poza <body> lub <head> tagów. Nie spowoduje to również znacznej różnicy w zakresie —, chyba że wykonujesz manipulacje DOM, które mogą break IE zanim element bryłowy zostanie w pełni załadowany — do umieszczenia go tuż przed zamknięciem </body>.

<html> 
    .... 
    <body> 
    .... 
    <script type="text/javascript" src="theJs.js"></script> 
    </body> 
</html> 
+0

Należy pamiętać, że aplikacje takie jak YSlow faktycznie zasugerują włączenie javascript na końcu strony. Może nie przyspieszyć całkowitego czasu ładowania, ale może najpierw załadować odpowiednią treść. Mimo wszystko najlepiej jest umieścić go wewnątrz tagu. –

+10

@epalla: jeśli umieścisz skrypt na końcu znacznika body, nie pozostawisz żadnej innej zawartości do czasu, gdy się tam dostanie, więc nie powinno być wielkiej różnicy między umieszczeniem go na zewnątrz lub wewnątrz. Następnie masz dodatkową zaletę, że Twoja strona wciąż waliduje, o co starałem się w mojej odpowiedzi. –

+1

Tak, zgodziłem się z tobą, ponieważ twoja odpowiedź jest dobra. Chciałem tylko dodać, że istnieje powód, by umieszczać JS na dole strony zamiast w głowie, tak jak robiliśmy to od dawna. –

69

Tak. Tylko komentarze i końcowy tag elementu html są dozwolone po tagu końcowym dla treści.

Przeglądarki mogą wykonywać odzyskiwanie po błędzie, ale nigdy nie należy na tym polegać.

+8

To jest lepsza odpowiedź. Istnieje zbyt wiele nowych przeglądarek z telefonami komórkowymi, aby ryzykować niewłaściwe działanie, gdy wystarczy przyciąć i wkleić pojedynczy znacznik zamykający. –

0

Tak. Ale jeśli dodasz kod na zewnątrz, najprawdopodobniej nie będzie końca świata, ponieważ większość przeglądarek go naprawi, ale nadal jest to złe podejście.

28

Jako że dokument Andy powiedział, że dokument będzie nieważny, ale mimo to skrypt będzie nadal interpretowany. Zobacz snippet 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; 
    ... 
+9

"Obsługa naprawdę zepsutego html." - Myślę, że to wszystko mówi. –

8

IE to nie pozwala już (od wersji 10, wierzę) i zignoruje takie skrypty. FF i Chrome nadal je tolerują, ale są szanse, że pewnego dnia upuści to jako niestandardowy.

+1

A jednak Google robi to w swoim przykładzie logowania do Google+, z "ostatnią aktualizacją 10 kwietnia 2014 r.". Dostałem go z wersji dla Javy na serwerze (https://developers.google.com/+/quickstart/java), ale prawdopodobnie jest to ten sam HTML + js dla wszystkich. – Tom

1

Google faktycznie zaleca to w odniesieniu do "Optymalizacji CSS". Zalecają wprowadzenie kluczowych stylów składania i odraczanie pozostałych (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> 

Patrz: https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery

+7

Nie powinno się wkładać rzeczy poza element 'body'. Ten artykuł Google nie zaleca nikomu, aby coś takiego zrobić. – ChaseMoskal

+1

Obawiam się, że strona google mówi właśnie to. – 10us

+2

Wygląda na to, że kiedyś strona * nie * polecała czegoś takiego, ale już nie. (Teraz jest trochę dynamicznego ładowania z javascript.) Wersja niemiecka nie jest aktualna i nadal zawiera stary przykład kodu. – bodo

Powiązane problemy