Использование тега комментария HTML <! - -> по-прежнему актуально для кода JavaScript?


80

Актуально ли по-прежнему использовать тег комментариев HTML вокруг кода JavaScript?

я имею в виду

<html>
    <body>
        <script type="text/javascript">
            //<!--
            document.write("Hello World!");
            //-->
        </script>
    </body>
</html>

Учтите, что помимо браузеров используется JavaScript. Также исключите очень старые браузеры.
rajakvk 02

Ответы:


108

Комментарии HTML, т.е. <!-- -->, больше не нужны. Они были предназначены для того, чтобы браузеры, которые не понимали <script>тег, могли корректно деградировать. Эти браузеры, например. Netscape 1.x больше не встречается в дикой природе. Так что больше нет смысла помещать HTML-комментарии в теги скрипта.

Если вы хотите, чтобы ваш HTML проверялся как XHTML или XML, вы, вероятно, захотите использовать закомментированный тег CDATA.


<script type="text/javascript">
//<![CDATA[
document.write("Hello World!");
//]]>
</script>

Причиной этого является то, так что ваши <, >, &, "и 'которые являются частью кода яваскрипта не должны быть закодированы как &lt;, &gt;, &amp;, &quot;и &apos;соответственно.


3
Что вы делаете, когда хотите включить ']]>' как часть строки?
dreamlax

6
@dreamlax: Тебе придется разбить его на части. У людей есть та же проблема, с </script>которой они обычно разбиваются на </scrи ipt>.
Асаф

6
На самом деле, может быть смысл использовать html-комментарии к js-коду и сегодня. Робот Googlebot просканирует любую строку, найденную в js-коде, которая «выглядит как URL-адрес» (по каким критериям я не знаю), как если бы это была ссылка. Я знаю, что это совершенно безумно, но это так. Во многих случаях у вас могут быть строки, которые выглядят как URL-адреса, но не являются действительными URL-адресами, поэтому вы не хотите, чтобы поисковый робот Google раздражал ваш сервер бессмысленными запросами. Какой-то парень, который, кажется, знает, что он говорит, гарантирует, что робот Google не будет сканировать строки js с похожими URL, если код js заключен в комментарии html. goo.gl/ZRW1Y havnt tho
matteo

2
@dreamlax ]]>]]<![CDATA[>
IllidanS4 поддерживает Монику

1
Если цель состоит в том, чтобы убедить валидаторов HTML / XML (в настоящее время многие <script>правильно понимают этот материал), то я не вижу значительного преимущества CDATAблока над традиционным комментарием. Единственная разница в том, есть ли у них <script>официальный контент или нет - а что касается поисковых систем, мы можем захотеть, чтобы в них не было контента ...
BurninLeo

23

Не совсем, если вы не ориентируетесь на браузеры 20-летней давности.


6
Нет, Internet Explorer 2. Netscape поддерживает Javascript начиная с версии 2.0
MarkR

1
@kangax: Хуже того - Netscape Navigator 2, если я правильно помню.
Чак

14

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


8
Иногда наличие всех ваших JavaScript в .jsфайлах , а не в HTML, делает его труднее для обновления , так как .jsфайлы могут быть в кэше.
Асаф,

11
Я связываю свои файлы javascript из папки, в названии которой указана текущая версия моего веб-приложения.
herzmeister

3
Другой распространенной тактикой многих веб-сайтов и фреймворков, таких как wordpress, является добавление строки запроса к URI js файла, чтобы принудительно перезагружать файл при изменении строки запроса. например:<script type="text/javascript" src="http://example.com/path/to/file.js?v1.0"></script>
Уилл Б.

5

Не так, как вы это делаете, нет.

<! - обрабатывается так же, как // в javascript, поэтому ваш код должен выглядеть так:

<script type="text/javascript">
<!--
document.write("Hello World!");
//-->
</script>

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

Вот дополнительная информация об этом здесь, если вам интересно: http://www.javascripter.net/faq/comments.htm

Однако, в конце концов, даже очень непонятные браузеры, которые не поддерживают javascript по умолчанию (например, HTMLLayout browse или Netsurf), знают, что лучше не отображать текст между тегами скрипта, поэтому нет, он больше не актуален ни в коем случае. Однако все браузеры, которые могут вас заинтересовать, понимают синтаксис <! -, поэтому нет никакой реальной необходимости безумно беспокоиться об удалении его из того, что у вас уже есть, потому что это действительный js, просто не забудьте не добавлять его в следующий раз.


0

Даже в современных браузерах это может быть полезно. Сегодня я столкнулся с этой проблемой именно потому, что хотел избежать встраивания javascript в свой html.

У меня есть html-страница, на http://host/variable_app_name/pagenameкоторой variable_app_nameможет быть много значений (ну, переменная). Если он хочет получить доступ к статическим файлам, он должен использовать URL-адрес, например http://host/static/variable_app_name/filename, поэтому я не могу указать местоположение статического файла без предварительного просмотра местоположения браузера, чтобы найти значение variable_app_name.

Чтобы связать с основным файлом javascript, я делаю следующее:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></script>\n');
</script>

Приведенный выше код взорвется даже в последней версии Chrome, потому что тег скрипта будет завершен в середине строки javascript, а оставшаяся часть строки будет интерпретироваться как html, например:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js">
</script>
\n');
</script>

Есть много способов исправить это, но мне нравится использовать html-комментарий.

С комментарием html:

<script type="text/javascript" >
<!--
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></script>\n');
-->
</script>

Разрыв строки javascript:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   document.write('<script type="text/javascript" src="/static/'+variable_app_name+'/pagename.js"></scr'+'ipt>\n');
</script>

Создайте и добавьте тег скрипта вместо использования document.write:

<script type="text/javascript" >
   var variable_app_name = window.location.pathname.split('/')[1];
   var script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = '/static/'+variable_app_name+'/pagename.js';
   document.head.appendChild(script);
</script>

Мне нравится использовать html-комментарий, потому что это краткое изменение, и его не нужно копировать или продумывать для каждого связанного файла.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.