Подтвердить что ты не робот

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, что он делает, когда он выполняется?

4b9b3361

Ответ 1

Казалось, что это что-то захватывающее, выражение, которое может иметь особое значение (<, ! и -- - все операторы в Javascript), но без операндов это не имеет смысла.

Выключает, что <!-- просто эквивалентен // в Javascript, он используется для комментирования одной строки.

Это языковая функция, которая, похоже, не документирована, и, возможно, была добавлена ​​по той простой причине, что она поддерживает этот "взлом". И теперь нам нужно жить с ним, чтобы не нарушить совместимость.

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

"hack" также устарел, потому что теперь каждый браузер понимает тег <script> и не отображает его содержимое (даже если Javascript отключен). Лично я в большинстве случаев стараюсь не писать Javascript прямо в HTML в любом случае и всегда загружать свой Javascript в качестве внешнего ресурса для разделения HTML и Javascript.

Ответ 2

В другом вопросе StackOverflow @MathiasBynens дал то, что я считаю :

Почему открытый HTML-комментарий блокирует действительный JavaScript?

Короче говоря, это, по-видимому, нестандартное дополнение к браузерам JS-движков, которые позволяют этим <!-- и --> как однострочные маркеры комментариев, такие как // в стандартном JS.