Чи є коментарі HTML в тегах сценарію найкращою практикою? [зачинено]


97

Наступна практика є досить звичною для вбудованого JavaScript, з яким я маю працювати:

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

Я знаю, що суть полягає в тому, щоб заборонити браузерам, несумісним із JavaScript, не надавати джерело, але це все-таки найкраща практика сьогодні? Переважна більшість браузерів, які використовуються сьогодні, можуть інтерпретувати JavaScript; навіть сучасні мобільні пристрої зазвичай не мають проблем.

Щодо "чому ні?" питання: Нещодавно мені довелося витратити кілька годин на налагодження проблеми, коли хтось залишив "//" перед a - - "в кінці тега скрипту, закопаного вглиб деяких сторінок, і це викликало таємничий JavaScript помилки.

Що ти робиш? Це все ще вважається "найкращою практикою"?


Відповіді:


118

Важливим є те, що нині певний браузер підтримує JavaScript чи ні, це не має значення (очевидно, що це робить більшість) - це не має значення, оскільки майже всі розуміють блоки сценаріїв, а це означає, що вони знають ігнорувати JavaScript, навіть якщо не можуть. інтерпретувати його.

Метт Крус надає трохи детальніше пояснення на своєму веб-сайті JavaScript, чому конкретно не використовувати коментарі HTML у блоках скриптів.

Цитується на цій сторінці:


Не використовуйте коментарі HTML у блоках сценаріїв

У стародавні часи javascript (1995) деякі браузери, такі як Netscape 1.0, не мали жодної підтримки та знань про тег скрипту. Тож коли вперше був випущений JavaScript, потрібна була техніка для приховування коду від старих браузерів, щоб вони не відображали його як текст на сторінці. "Злом" полягав у використанні коментарів HTML у блоці сценарію, щоб приховати код.

Використання HTML-коментарів у сценарії погано

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

Жоден із загальноприйнятих браузерів сьогодні не знає тегу <script>, тому приховування джерела JavaScript більше не потрібно. Насправді це може вважатися шкідливим з наступних причин:

  • У XHTML-документах джерело буде фактично приховано від усіх браузерів і видається непотрібним
  • - не дозволено в коментарях HTML, тому будь-які операції зменшення в скрипті недійсні

1
+1. Я знав, що хтось мав багато інформації на цю тему з моїх днів comp.lang.javascript, я переглядав архіви груп новин, коли з’явилася ваша відповідь, цитуючи Метта.
Грант Вагнер

1
У XHTML ви можете використовувати CDATA замість коментаря HTML: <script ...> // <! [CDATA [... //]]> </script>
Concrete Gannet

Варто додати, що цей "хак" видає помилку в Internet Explorer 9 (Клієнт скаржився на сторінку, яка не працює належним чином, і це було причиною)
lordscales91,

24

Я перестав це робити. У якийсь момент вам просто доведеться відпустити свою мозаїку NCSA.


7
Іншими словами, немає жодної причини, чому ОП повинна припинити це робити. Ви пропонуєте йому припинити це робити, оскільки ви це зробили, що не є достатньою підставою для відповіді на ІМО.
Лоуренс Айелло

1
@LawrenceAiello: Що за фраза "найкраща практика" змушує думати про "факти", а не про "думки"?
хаос

5
добре в цьому криється кінцева вина у всьому цьому пості. Це мало бути закритим, оскільки це дискусійне питання.
Лоуренс Айелло

1
Можливо, коли це було опубліковано шість років тому, це було кваліфіковано як відповідь, однак сьогодні, за стандартами сайту, це не так.
j08691

1
Ця відповідь обговорюється в Meta SO
CubeJockey

10

Відповідно до рекомендації W3C корисно було приховати дані сценарію від АГЕНТІВ КОРИСТУВАЧА.

Цитується на сторінці W3c :

Коментування сценаріїв в JavaScript JavaScript-механізм дозволяє рядку "<!--"виникати на початку елемента SCRIPT і ігнорує подальші символи до кінця рядка. JavaScript трактує "//" як започаткування коментаря, що поширюється на кінець поточного рядка. Це потрібно для приховування рядка "->" з аналізатора 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>

2
Якщо використовується HTML 4.x. Зовсім інша історія з XHTML.
Квентін

8

Ні, це похмілля з обхідного рішення, яке було використано під час першого введення елемента сценарію. Жоден браузер не може зрозуміти елемент сценарію (навіть якщо він розуміє його як "Сценарій, який слід ігнорувати, оскільки сценарій вимкнено або не підтримується").

У XHTML вони активно шкідливі.

Я щось писав про його історію .


3

Перестала використовувати це деякий час назад. Також, за словами Дугласа Крокфорда , ви можете скинути атрибут типу з тегів сценарію, оскільки єдиною мовою сценаріїв, доступною у більшості браузерів, є JavaScript.


1
Більшість веб-переглядачів все одно працюватимуть, але це порушує специфікацію HTML, тому я б не радив.
Квентін

4
ви ніколи не знаєте, коли IE прийме сценарій VB як тип за замовчуванням ..
Френсіс

1

Якщо ви вводите вручну, я пропоную вам завжди використовувати зовнішні файли js, які б дуже допомогли.

Що стосується вашого занепокоєння: більшість браузерів сьогодні безпечні для JavaScript. Однак іноді люди можуть писати прості парсери, щоб отримати HTML безпосередньо - і, треба сказати, безпечна цитата дуже корисна для цих клієнтів. Також деякі клієнти, що не є JS, як-от старий Lynx, отримали б користь від цього.


1

Якщо ви не включаєте буквальний текст між тегами скрипту, тобто якщо ви завантажуєте скрипти з файлів src, ви можете забути про коментарі.



0

Я перестав це робити століттями тому. Вам це дійсно не потрібно в цей день і вік.


@Yvette Яка ваша мотивація розмістити цей коментар через шість років після того, як я опублікував свою відповідь?
Джон Топлі

@Yvette Без правопорушень, я був просто цікавий. І звичайно ти маєш рацію; сьогодні я б розмістив це як коментар.
Джон Топлі

-1

Я цього не роблю, але днями я пішов перевірити свій захищений паролем сайт на w3c. Тому мені довелося використовувати їх метод прямого введення. Він скаржився на мій JavaScript, тому я поставив коментарі назад, все було добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.