HTML-открытие-комментарий действителен JavaScript?
Старая идиома для получения очень старых браузеров для игнорирования блоков JavaScript в HTML-страницах заключается в том, чтобы обернуть содержимое элемента <script>
в комментариях HTML:
<script>
<!--
alert("Your browser supports JavaScript");
//-->
</script>
Обоснование заключается в том, что старые браузеры без JavaScript будут отображать как текст содержимое элемента <script>
, поэтому включение JavaScript в комментарий HTML заставляет браузер ничего не показывать.
Современный браузер, с другой стороны, увидит элемент <script>
и проанализирует его содержимое как JavaScript. Следовательно, комментарии должны быть действительными JavaScript. Закрывающий комментарий HTML (-->
) игнорируется парсером JavaScript, потому что ему предшествует комментарий линии JavaScript (//
).
Мой вопрос: как открытие HTML-комментария (<!--
) не приводит к сбою парсера JavaScript? Я слышал от разных людей, что открытый HTML-комментарий действителен JavaScript. Если верно, что комментарий открытия оценивается как JavaScript, что он делает, когда он выполняется?
Ответы
Ответ 1
Казалось, что это что-то захватывающее, выражение, которое может иметь особое значение (<
, !
и --
- все операторы в Javascript), но без операндов это не имеет смысла.
Выключает, что <!--
просто эквивалентен //
в Javascript, он используется для комментирования одной строки.
Это языковая функция, которая, похоже, не документирована, и, возможно, была добавлена по той простой причине, что она поддерживает этот "взлом". И теперь нам нужно жить с ним, чтобы не нарушить совместимость.
Излишне говорить, что, хотя это забавная вещь, чтобы знать, этот тип комментариев не должен использоваться в реальном коде, который другие люди могли бы читать и работать.
"hack" также устарел, потому что теперь каждый браузер понимает тег <script>
и не отображает его содержимое (даже если Javascript отключен). Лично я в большинстве случаев стараюсь не писать Javascript прямо в HTML в любом случае и всегда загружать свой Javascript в качестве внешнего ресурса для разделения HTML и Javascript.
Ответ 2
В другом вопросе StackOverflow @MathiasBynens дал то, что я считаю :
Почему открытый HTML-комментарий блокирует действительный JavaScript?
Короче говоря, это, по-видимому, нестандартное дополнение к браузерам JS-движков, которые позволяют этим <!--
и -->
как однострочные маркеры комментариев, такие как //
в стандартном JS.