Являются ли комментарии HTML внутри тегов сценария наилучшей практикой? [закрыто]


97

Следующая практика довольно распространена во встроенном JavaScript, с которым мне приходится работать:

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

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

Что касается вопроса «почему бы и нет?» вопрос: мне недавно пришлось потратить несколько часов на отладку проблемы, когда кто-то остановился на '//' перед '->' в конце тега скрипта, скрытого глубоко в некоторых страницах, и это вызывало загадочный JavaScript ошибки.

Чем ты занимаешься? Это все еще считается «лучшей практикой»?


Ответы:


118

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

Мэтт Круз дает немного более подробное объяснение на своем сайте JavaScript Toolbox, почему конкретно не использовать 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 Mosaic.


7
Другими словами, нет причины, почему OP должен прекратить это делать. Вы предлагаете, чтобы он прекратил это делать, потому что это сделали вы, что не является достаточной причиной, чтобы отвечать ИМО.
Лоуренс Айелло,

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

Некоторое время назад перестал этим пользоваться. Кроме того, по словам Дугласа Крокфорда , вы можете удалить атрибут type из своих тегов сценария, поскольку единственный язык сценариев, доступный в большинстве браузеров, - это 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.