Використовуючи тег коментаря HTML <! - -> все ще актуальний навколо коду JavaScript?


80

Чи все ще доречно використовувати тег коментаря HTML навколо коду JavaScript?

я маю на увазі

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

Зверніть увагу на JavaScript, який використовується поруч із браузерами. Також виключіть дуже старі браузери.
rajakvk

Відповіді:


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 дратував ваш сервер безглуздими запитами. Деякий хлопець, який, здається, знає, що він говорить, гарантує, що Googlebot не скануватиме js-рядків, схожих на url, якщо код js укладений у коментарі html. goo.gl/ZRW1Y havnt намагався Тхо
Маттео

2
@dreamlax ]]>]]<![CDATA[>
IllidanS4 підтримує Моніку

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

23

Не зовсім так, якщо ви не націлюєтеся на 20-річні браузери.


6
Ні, Internet Explorer. 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може мати багато значень (y'know, змінна). Якщо він хоче отримати доступ до статичних файлів, він повинен використовувати 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.