2010-10-12 17 views
12

Kilka lat temu, uczono mnie, że bloki kodu JavaScript osadzone wewnątrz HTML powinien być zawsze obudowane wewnątrz komentarze HTML w następujący sposób:Czy mogę używać komentarzy HTML do zamykania bloków kodu JavaScript?

<script type="text/javascript"> 
<!-- 
var hello = "world"; 
--> 
</script> 

powiedziano mi, aby to zrobić, ale nigdy rodzaj pełni zorientowali się, dlaczego. To niby wydaje się hacky używać komentarzy HTML, więc dzisiaj zacząłem używając pisania mojego kodu JavaScript wewnątrz bloku skryptu bez komentarzach HTML:

<script type="text/javascript"> 
var hello = "world"; 
</script> 

Więc moje pytanie brzmi: czy mogę używać komentarzy HTML capsulate kodu JavaScript Bloki? Czy można bezpiecznie pisać scenariusz bez komentarzy? Chodzi mi o to, że ryzykuję coś, gdy pomijam tagi komentarza?

Odpowiedz

11

Komentarz HTML miał na celu ukrycie kodu JavaScript ze starszych przeglądarek, które nie zrozumiały elementu <script>, a zamiast tego renderowanie jego zawartości na stronie. Tak było w połowie lat 90., Iirc. Obecnie można bezpiecznie założyć, że przeglądarki z tej ery nie są już obecne w sieci i pomijają komentarze.

Niektóre miła historia na które można znaleźć here:

Ogólna zasada dotycząca tagów HTML, które przeglądarek nie rozumieją, że przeglądarka powinna ignorować tag całkowicie i traktować zawartość strony, jak gdyby tego tagu tam nie było. Oznacza to, że kiedy Netscape 2 po raz pierwszy wprowadził JavaScript (lub LiveScript, jak to się wówczas nazywało), konieczne było umieszczenie komentarza HTML wokół rzeczywistego skryptu, aby ukryć kod przed innymi przeglądarkami, które nie zrozumiały tagu skryptu, a które dlatego wyświetliłby kod zamiast go uruchamiać.

Język JavaScript został specjalnie napisany, aby zaakceptować początek komentarza HTML jako pierwszą rzecz w skrypcie i zignorować go, aby można było użyć komentarza HTML do ukrycia skryptu przed osobami używającymi Netscape 1, Mozaic , Internet Explorer 1, Internet Explorer 2 i inne przeglądarki podobnego rocznika, z których nikt już nie korzysta. To właśnie te prehistoryczne przeglądarki (w języku JavaScript) mają na myśli, gdy widzisz odnośniki w przestarzałych samouczkach JavaScript, aby zawinąć twój JavaScript w komentarzu HTML, aby ukryć go przed "starszymi" przeglądarkami.

W programie Internet Explorer 3 firma Microsoft wprowadziła własny odpowiednik języka JavaScript, który nazywa się JScript. Od tego czasu wszystkie przeglądarki rozpoznają przynajmniej znacznik skryptu i bardziej nowoczesne przeglądarki (Netscape 2+, IE3 + itd.). Komentarz HTML nie jest już potrzebny. Tak więc, gdy wszyscy użytkownicy uaktualnili system do Netscape 2, Internet Explorer 3 lub nowsza przeglądarka niż którykolwiek z tych dwóch komentarzy w skrypcie staje się zbędnym kodem.

+0

Dzięki! To też było moje przeczucie. Nie spotkałem ani jednego klienta, który miał problemy ze stroną z blokiem JavaScript bez komentarza. Czy zdajesz sobie sprawę z tego, w jakich konkretnych przeglądarkach wystąpi to niechciane zachowanie? – jsalonen

+0

@jsalonen: patrz edytuj – Joey

+0

Tak naprawdę jest to starożytne wymaganie. Sprawa zamknięta. Dzięki! – jsalonen

6

Prosto z the source

18.3.2 danych skryptów ukrywając z agentów użytkownika

klienckie, które nie uznają elementu SCRIPT prawdopodobnie uczyni zawartość tego pierwiastka w postaci tekstu. Niektóre silniki skryptowe, w tym te dla języków JavaScript, VBScript i Tcl pozwalają na dołączanie instrukcji skryptu do komentarza SGML. Programy użytkownika, które nie rozpoznają elementu SCRIPT, zignorują ten komentarz, podczas gdy inteligentne silniki skryptowe zrozumieją, że skrypt w komentarzach powinien zostać wykonany.

Innym rozwiązaniem problemu jest przechowywanie skryptów w zewnętrznych dokumentach i odwoływanie się do nich za pomocą atrybutu src.

Komentując skrypty w JavaScript Silnik JavaScript pozwala ciąg „<!--”, aby wystąpić na początku elementu SCRIPT i ignorował kolejne znaki do końca linii. JavaScript interpretuje "//" jako rozpoczynający komentarz rozciągający się do końca bieżącej linii. Jest to konieczne, aby ukryć ciąg "-->" w analizatorze składni JavaScript.

<SCRIPT type="text/javascript"> 
<!-- to hide script contents from old browsers 
    function square(i) { 
    document.write("The call passed ", i ," to the function.","<BR>") 
    return i * i 
    } 
    document.write("The function returned ",square(5),".") 
// end hiding contents from old browsers --> 
</SCRIPT> 

Ponadto, jeśli naprawdę chcesz, aby zrozumieć, co to wszystko oznacza, przeczytaj ten excellent article. Jest długi, , ale warto go.

+1

Czy możesz podać nieco więcej: jak realne jest to ryzyko? Czy znasz niektóre przeglądarki, które zachowują się w ten sposób? – jsalonen

+0

Żadna przeglądarka obsługująca półnową wersję HTML nie wyświetli treści elementu '