Вам нужен текст / javascript, указанный в ваших тегах <script>?


157

Я где - то читал , что вы больше не нужны вещи , как type="text/javascript"и странно , CDATAи <!--вещи в теги сценария. Итак, вместо:

<script type="text/javascript">
//<![CDATA[
<!--

    //your script here

-->
//]]>
</script>

Вы бы просто сделали:

<script>
    //your script here
</script>

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


Для новых браузеров, но в более старых (если такие еще существуют) требуется <! - ->. О типе в некоторых приложениях, если не опущен, нужен правильный.
Бакудан

1
Хорошее чтение о CDATA: stackoverflow.com/questions/66837/…
kapa

1
Каждый раз, когда я открываю файл с text/javascriptуказанным, я удаляю его. Это шум.
The Muffin Man

Очень родственный пост здесь имеющий последнюю актуальную информацию о руководящих принципах HTML5 в общепринятом ответ.
RBT

Ответы:


135

См. Описание Крокфорда на <script>теге , в частности:

Не используйте <!-- //-->взломать со скриптами. Он был предназначен для предотвращения отображения скриптов в виде текста в браузерах первого поколения Netscape 1 и Mosaic. Это не было необходимо в течение многих лет. <!-- //-->должен сигнализировать комментарий HTML. Комментарии должны игнорироваться, не компилироваться и не выполняться. Кроме того, HTML-комментарии не должны быть включены --, поэтому сценарий, который уменьшает значение, имеет ошибку HTML.

...

type="text/javascript"

Этот атрибут не является обязательным. Начиная с Netscape 2, языком программирования по умолчанию во всех браузерах был JavaScript. В XHTML этот атрибут является обязательным и ненужным. В HTML лучше не указывать. Браузер знает, что делать.


75
Требуется и не нужно? Я что-то упускаю?
Изката

17
@Izkata, требуется для проверки, но не имеет никакого эффекта.
bdukes

14
«Браузер знает, что делать» ... пока. Как насчет следующей недели, когда RubyScript (я придумал это в качестве примера) популяризируется, и все берут свои штаны, чтобы принять его? Это тот же вид недальновидного мышления, который заставляет людей называть свои файлы "_new" и смущает других людей годами. Это "_new"? Или "_new_new"? Или "_newer"? ИМО это недальновидно.
Слобаум

18
@Slobaum, спецификация HTML5 гласит, что по умолчанию используется JavaScript . Если есть новые типы сценариев, они будут реализованы только в новых версиях браузера, которые поддерживают это значение по умолчанию из спецификации.
bdukes

8
если RubyScriptстанет популярным, он закончится .rbscriptи браузер будет действовать соответственно.
Кирк Стробек

45

Это рекомендация Крокфорда . Я знаю, что видел, что это отражено в другом месте (возможно, ppk?). Спецификация HTML5 не требует этого.

Как ни странно, использование атрибута «type» для обозначения блоков, которые вы не хотите оценивать , стало довольно смелым :<script>

<script type='text/html-template'>
  <div> this is a template </div>
</script>

Предоставляя странный тип, отличный от JavaScript, вы получаете способ вставлять необработанный текст на страницу для использования другим кодом JavaScript (который предположительно находится в блоке сценария, который можно оценить).


я не могу понять полностью. пожалуйста, объясните, что type="text/html"значит вообще, а что text/javascriptзначит .. спасибо
T.Todua

4
@tazotodua не очень важно, что означает «text / html»; важно то, что это не «текст / javascript», браузеры будут полностью игнорировать содержимое <script>блока. Тем не менее, <script> он станет частью DOM, поэтому другой код JavaScript может найти их и извлечь их содержимое.
Заостренный

Это интересный хак. Не уверен, что я использовал бы это, все же.
brennanyoung

2
w3schools : In HTML5, the type attribute is no longer required for JavaScript. The default value is "application/javascript".
Амин Сохейли,

19

HTML5 не нуждается в type="text/javascript"(это по умолчанию).

CDATA нужен только для страниц XHTML, если в скрипте есть какие-либо символы HTML (например, «<» и «>»).

<!-- нужно только для старых браузеров.


3

Что ж, я испытываю желание сказать, что никто больше не использует text/javascript, и что даже инструменты минимизации, вероятно, удалят его ... Действительно, документация Facebook SDK определяет просто<script> .

Тем не менее, документация Google SDK по- прежнему имеетtext/javascript .

Документация Amazon SDK по- прежнемуtext/javascript .

Документация по Linkedin API все ещеtext/javascript .

Instagram все еще использует text/javascript.


3

тип атрибута определяет язык сценариев кода , внедренного в элемент сценария или ссылаться с помощью атрибута SRC элемента. Это указано как тип MIME; примеры поддерживаемых типов MIME включают текст / javascript, текст / ecmascript, application / javascript и application / ecmascript.

Согласно спецификации HTML 4.01

Типа атрибут определяет язык сценариев содержимого элемента и переопределяет язык сценариев по умолчанию. Язык сценариев указывается в качестве типа контента (например, «text / javascript»). Авторы должны предоставить значение для этого атрибута. Для этого атрибута нет значения по умолчанию.

Но в HTML5 text/javascript это тип по умолчанию, поэтому вы можете опустить

Тип атрибута дает язык сценария или формат данных. Если атрибут присутствует, его значение должно быть допустимым типом MIME. Параметр charset не должен быть указан. По умолчанию, который используется, если атрибут отсутствует, это «text / javascript».


1
другими словами, его пропуск может вызвать ошибки в старых браузерах, которые не поддерживают HTML5
Серж,

2

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


1

scriptЯ полагаю, что браузер должен правильно интерпретировать блок на основе заголовков, а не typeатрибута. Поэтому, чтобы ответить на ваш вопрос, нет, это не требуется для современных браузеров (я говорю о IE7 +, FF, Webkit). Если вы поддерживаете старые браузеры, чем это ... мне вас жаль =)


2
Не забудьте Китай с 385 миллионами пользователей, многие из которых до сих пор используют IE6. netmarketshare.com/...
chainwork

3
зная строгую интернет-политику Китая, скорее всего, ваш сайт никогда их не достигнет = P
hellatan

Речь идет о встроенном скрипте, поэтому нет никаких других заголовков, кроме главной страницы (это будет некоторый тип содержимого HTML). В любом случае, у вас есть источник, указывающий, что браузеры учитывают заголовки (например, если у вас есть простой <script src = "что-то"> </ script> и вы обслуживали заголовок VBScript, есть ли браузер, который будет интерпретировать его как VBScript) ?
Мэтью Флэшен

1

Если вы помещаете тег SVG в SVG, вы должны указать атрибут type. И это должно быть, "text/ecmascript"а не "text/javascript".

Если ваш сценарий встроенный (не связанный), вам нужно будет также обернуть тело сценария в декларацию CDATA. Таким образом, шаблон встроенного скрипта для SVG (и других вариантов XML)

<script type="text/ecmascript">
<![CDATA[
// your javascript code goes here
]]>
</script>

Это могут быть особые случаи «в дикой природе», но они достаточно реальны, и использование SVG растет, поэтому неверно для кого-либо другого утверждать, что атрибут type и CDATA полностью устарели в современных браузерах. Варианты использования узкие, да, но не неслыханные.

«Измени окружение на противоположное, и каждый кусочек мудрости станет худшим из глупостей». - Эшби


1
Хороший звонок. Просто работал над каким-то сложным SVG, и это действительно так!
Дэйв Эверитт

1

Specification Спецификация HTML5 призывает авторов не указывать атрибут, а не предоставлять избыточный тип MIME. MDN

Стандарт MIME Sniffing позволяет JavaScript обслуживаться с использованием любого типа MIME ( многоцелевых расширений почты Интернета ), который соответствует следующему:

<script type="application/javascript"></script>
<script type="application/ecmascript"></script>

<script type="text/javascript"></script>
<script type="text/ecmascript"></script>

0

Ну, я продолжаю видеть больше примеров без текста / javascript, но по какой-то причине мои скрипты не будут работать в FF, когда я это делаю. Я бы порекомендовал сохранить текст / декларацию JavaScript. Тег CDATA предотвращает показ javascript в виде обычного текста на вашем веб-сайте, если в вашем браузере отключен javascript. Лично я больше не использую эти теги, не думаю, что есть много пользователей без них, и если они там, они могут захотеть вырастить немного мозгов: P


Ни атрибут type, ни старая вещь CDATA не нужны, если вы действительно не хотите ориентироваться на действительно антикварные браузеры. Однако они не должны причинять вреда, пока вы действительно используете правильный тип.
Заостренный

Я использую самую последнюю стабильную версию FF, и, кажется, возникают проблемы с синтаксическим анализом без объявления text / javascript, я использую jQuery, но это не должно иметь значения.
Майкл

Ну, я запускаю все мое веб-приложение с простыми тегами сценариев <script>, без «языка» и «типа», и они отлично работают во всех браузерах. (Ну, все разумные: FF, Chrome, Safari, IE, Opera.)
Pointy

1
@pointy кажется, что FatherStorm только что опубликовал ответ, почему это происходит. поэтому ваши комментарии кажутся неверными.
Майкл

@ Майкл, возможно, если вы допустили ошибку при переходе на XHTML / Strict, у вас могут возникнуть проблемы, но даже тогда я сомневаюсь в этом. Среди светил мира JavaScript есть общее согласие, что атрибут «тип» не нужен, и на самом деле, поскольку неправильный «тип» сломает скрипт, это просто источник ошибок.
Заостренный

0

type="text/javascript" : Требуется в HTML 4 и XHTML, но необязательно в HTML5.

CDATA Требуется в XHTML.

<!--: Используется, чтобы скрыть JavaScript от очень старых браузеров. Например: Netscape 1 и Internet Explorer 2, которые никто больше не использует.

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