2012-10-27 15 views
12

Stary idiom uzyskania bardzo starych przeglądarek zignorować bloki JavaScript na stronach HTML jest owinąć zawartość elementu <script> w komentarzach HTML:HTML Komentarz do otwierania jest prawidłowy JavaScript?

<script> 
    <!-- 
     alert("Your browser supports JavaScript"); 
    //--> 
</script> 

Uzasadnieniem jest to, że stare przeglądarki JavaScriptless odda jako tekst treść elementu <script>, więc umieszczenie kodu JavaScript w komentarzu HTML powoduje, że przeglądarka nie ma nic do renderowania. Z drugiej strony nowoczesna przeglądarka zobaczy element <script> i przeanalizuje jego zawartość jako JavaScript. W związku z tym komentarze muszą być poprawne JavaScript. Końcowy komentarz HTML (-->) jest ignorowany przez analizator składni JavaScript, ponieważ jest poprzedzony komentarzem wiersza JavaScript (//).

Moje pytanie brzmi: w jaki sposób otwierający komentarz HTML (<!--) nie powoduje, że parser JavaScript zawiedzie? Słyszałem od różnych osób, że początkowy komentarz HTML to poprawny JavaScript. Jeśli to prawda, że ​​komentarz otwierający jest oceniany jako JavaScript, co robi po uruchomieniu?

+0

Jest ważny, po prostu włóż go do konsoli. Ale chciałbym wiedzieć, dlaczego. – kapa

+1

po wykonaniu zwraca niezdefiniowany i działa jak zwykły komentarz '//'. wygląda jak zakodowany magiczny ciąg? ciekawy znać także odpowiedź. – c69

+0

Przyjemne miejsce :) Zaczniemy od teraz, tak jak teraz, odczytywać liniowe komentarze tylko po to, aby grać z umysłem osób: D – clentfort

Odpowiedz

7

Wydawało się, że jest to coś ekscytującego, wyrażenie, które może mieć specjalne znaczenie (<, ! i -- są wszystkie operatory w JavaScript), ale bez operandów nie ma sensu.

Turns out że <!-- jest po prostu równoznaczne z // w JavaScript, służy do komentowania jednej linii.

Jest to funkcja językowa, która nie wydaje się być dobrze udokumentowana i mogła zostać dodana z tego prostego powodu, aby wspierać ten "hack". A teraz musimy z tym żyć, aby nie łamać wstecznej kompatybilności.

Nie trzeba dodawać, że choć zabawne jest to, że tego typu komentarze nie powinny być używane w prawdziwym kodzie, z którym inni mogą się zapoznać i pracować.

"Hack" jest również przestarzały, ponieważ teraz każda przeglądarka rozumie znacznik <script> i nie wyświetla jego zawartości (nawet jeśli Javascript jest wyłączony). Osobiście, w większości przypadków staram się unikać pisania Javascript bezpośrednio w HTML i zawsze ładuję moją JavaScript jako zewnętrzny zasób w celu oddzielenia kodu HTML i JavaScript.

+0

To fajne, nie wiedziałem o tym! – Jim

3

W innym pytanie StackOverflow, @MathiasBynens dał co wierzę jest odpowiedź:

Why is the HTML comment open block valid JavaScript?

W skrócie, jak widać, jest to niestandardowy dodatek do silników JS oparciu o przeglądarkę internetową pozwala to na używanie tych <!-- i --> jako jednoliniowych znaczników komentarza, takich jak // w standardowym JS.

+0

Nie zdawałem sobie sprawy, że komentarz zamykający (HTML) jest również rozpoznawany jako komentarz JavaScript. Sprawdza się (przy użyciu konsoli JS w przeglądarce Firefox), ale zastanawiam się, dlaczego ludzie nadal używają '// ->'. Może '->' jest dopiero ostatnio interpretowane jako komentarz JS? – Daniel

Powiązane problemy