Czy komentarze HTML wewnątrz tagów skryptów to najlepsza praktyka? [Zamknięte]

97

Następująca praktyka jest dość powszechna w wbudowanym JavaScript, z którym muszę pracować:

<script type="text/javascript">
   <!--
       // Code goes here
   //-->
</script>

Wiem, że chodzi o to, aby przeglądarki, które są niezgodne z JavaScriptem, nie renderowały źródła, ale czy nadal jest to najlepsza praktyka? Zdecydowana większość używanych obecnie przeglądarek potrafi interpretować JavaScript; nawet nowoczesne urządzenia mobilne zwykle nie mają problemów.

A jeśli chodzi o pytanie „dlaczego nie?” pytanie: Ostatnio musiałem spędzić kilka godzin na debugowaniu problemu polegającego na tym, że ktoś zostawił znak „//” przed znakiem „->” na końcu tagu skryptu ukryty głęboko w niektórych stronach, co powodowało tajemniczy JavaScript błędy.

Co robisz? Czy jest to nadal uważane za „najlepszą praktykę”?

AndreiM
źródło

Odpowiedzi:

118

Ważne jest to, że w dzisiejszych czasach to, czy dana przeglądarka obsługuje JavaScript, czy nie, nie ma znaczenia (najwyraźniej zdecydowana większość to robi) - nie ma znaczenia, ponieważ prawie wszyscy rozumieją bloki skryptów, co oznacza, że ​​wiedzą, że ignorują JavaScript, nawet jeśli nie mogą zinterpretować to.

Matt Kruse podaje nieco bardziej szczegółowe wyjaśnienie w swojej witrynie JavaScript Toolbox, dlaczego nie należy używać komentarzy HTML w blokach skryptów.

Cytat z tej strony:


Nie używaj komentarzy HTML w blokach skryptów

W starożytności javascript (1995) niektóre przeglądarki, takie jak Netscape 1.0, nie miały żadnego wsparcia ani wiedzy na temat tagu skryptu. Kiedy więc javascript został wydany po raz pierwszy, potrzebna była technika, aby ukryć kod przed starszymi przeglądarkami, aby nie wyświetlały go jako tekst na stronie. „Hack” polegał na użyciu komentarzy HTML w bloku skryptu, aby ukryć kod.

Używanie komentarzy HTML w skrypcie jest złe

// DON'T do this! Code is just representative on how things were done
<script language="javascript">
<!--
   // code here
//-->
</script>

Żadna z powszechnie używanych obecnie przeglądarek nie ignoruje tagu <script>, więc ukrywanie źródła javascript nie jest już konieczne. W rzeczywistości można go uznać za szkodliwy z następujących powodów:

  • W dokumentach XHTML źródło będzie faktycznie ukryte przed wszystkimi przeglądarkami i stanie się bezużyteczne
  • - nie jest dozwolone w komentarzach HTML, więc wszelkie operacje zmniejszania wartości w skrypcie są nieprawidłowe
Noldorin
źródło
1
+1. Wiedziałem, że był ktoś, kto miał wiele informacji na ten temat z moich dni comp.lang.javascript. Przeglądałem archiwa grup dyskusyjnych, kiedy pojawiła się twoja odpowiedź, cytując Matta.
Grant Wagner
1
W XHTML można użyć CDATA zamiast komentarza HTML: <script ...> // <! [CDATA [... //]]> </script>
Concrete Gannet
Powinienem dodać, że ten
``
24

Przestałem to robić. W pewnym momencie musisz po prostu puścić swoją mozaikę NCSA.

chaos
źródło
7
Innymi słowy, nie ma powodu, dla którego PO miałby przestać to robić. Sugerujesz, aby przestał to robić, ponieważ to zrobiłeś, co nie jest wystarczającym powodem, aby być odpowiedzią IMO.
Lawrence Aiello
1
@LawrenceAiello: A co z wyrażeniem „najlepsza praktyka” kojarzy się z „faktami”, a nie „opiniami”?
chaos
5
cóż, na tym polega ostateczna wada całego tego postu. Powinien zostać zamknięty, ponieważ jest to pytanie do dyskusji.
Lawrence Aiello
1
Być może kiedy to zostało opublikowane sześć lat temu, zakwalifikowano to jako odpowiedź, jednak według standardów witryny tak nie jest.
j08691
1
Ta odpowiedź jest omawiana w Meta SO
CubeJockey
10

Zgodnie z zaleceniem W3C przydatne było głównie ukrycie danych skryptu przed USER AGENTS.

Cytat z W3c :

Komentowanie skryptów w JavaScript Silnik JavaScript zezwala na "<!--"występowanie ciągu znaków na początku elementu SCRIPT i ignoruje dalsze znaki aż do końca linii. JavaScript interpretuje „//” jako początek komentarza, który kończy się na końcu bieżącego wiersza. Jest to konieczne, aby ukryć ciąg „->” przed parserem 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>
Webrsk
źródło
2
Jeśli używany jest HTML 4.x. Z XHTML wygląda to zupełnie inaczej.
Quentin
8

Nie, to kac po obejściu zastosowanym przy pierwszym wprowadzeniu elementu script. Żadna przeglądarka nie jest obecnie w stanie zrozumieć elementu skryptu (nawet jeśli rozumie go jako „Skrypt, który należy zignorować, ponieważ skrypty są wyłączone lub nie są obsługiwane”).

W XHTML są aktywnie szkodliwe.

Jakiś czas temu napisałem coś o jego historii .

Quentin
źródło
3

Przestałem używać tego jakiś czas temu. Ponadto, według Douglasa Crockforda , możesz usunąć atrybut type z tagów skryptu, ponieważ jedynym językiem skryptowym dostępnym w większości przeglądarek jest JavaScript.

Jake McGraw
źródło
1
Większość przeglądarek nadal będzie działać, jednak narusza to specyfikację HTML, więc nie radziłbym tego.
Quentin
4
nigdy nie wiadomo, kiedy IE przyjmie skrypt VB jako domyślny typ ..
Francis
1

Jeśli piszesz ręcznie, radzę zawsze używać zewnętrznych plików js, które bardzo by pomogły.

Jeśli chodzi o Twoje obawy: większość przeglądarek obsługuje obecnie JavaScript. Jednak czasami ludzie mogą pisać proste parsery, aby bezpośrednio pobierać HTML - i muszę powiedzieć, że bezpieczny cytat jest naprawdę pomocny dla tych klientów. Również niektórzy klienci nie-JS, tacy jak stary Lynx, odnieśliby z tego korzyści.

Francis
źródło
1

Jeśli nie umieścisz literału między tagami skryptów - to znaczy, jeśli ładujesz skrypty z plików src, możesz zapomnieć o komentarzach.

kennebec
źródło
0

Przestałem to robić wieki temu. Naprawdę nie potrzebujesz tego w dzisiejszych czasach.

John Topley
źródło
@Yvette Jaka jest Twoja motywacja do opublikowania tego komentarza sześć lat po opublikowaniu przeze mnie odpowiedzi?
John Topley,
@Yvette Bez obrazy, byłem po prostu zaciekawiony. I oczywiście masz rację; obecnie opublikowałbym to jako komentarz.
John Topley,
-1

Nie robię tego, ale pewnego dnia poszedłem sprawdzić moją witrynę chronioną hasłem w w3c. Musiałem więc użyć ich metody bezpośredniego wprowadzania. Narzekał na mój javascript, więc umieściłem komentarze z powrotem we wszystkim, co było w porządku.

JoshBerke
źródło