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

Зачем писать <script type = "text/javascript" >, когда тип mime задается сервером?

Я понимаю, что типы mime задаются веб-сервером. Почему мы добавляем атрибут type="text/javascript или type="text/css"? Разве это не бесполезный и игнорируемый атрибут?

4b9b3361

Ответ 1

Дуглас Крокфорд говорит:

type="text/javascript"

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

Он также говорит:

W3C не принял languageатрибут, предпочитая вместо этого typeатрибут, который принимает тип MIME. К сожалению, тип MIME не был стандартизован, поэтому иногда "text/javascript" или "application/ecmascript" или что-то остальное. К счастью, все браузеры будут всегда выбирайте JavaScript как по умолчанию, так что это всегда лучше просто написать <script>. Он наименьший, и он работает на большинство браузеров.

Только для развлекательных целей я опробовал следующие пять сценариев

  <script type="application/ecmascript">alert("1");</script>
  <script type="text/javascript">alert("2");</script>
  <script type="baloney">alert("3");</script>
  <script type="">alert("4");</script>
  <script >alert("5");</script>

В Chrome работает все, кроме script 3 (type="baloney"). IE8 не запускал script 1 (type="application/ecmascript") или script 3. Основываясь на моей неэкстенсивной выборке из двух браузеров, похоже, что вы можете спокойно игнорировать атрибут type, но вы его используете лучше использовать юридическое (зависимое от браузера) значение.

Ответ 2

Поскольку, по крайней мере, в HTML 4.01 и XHTML 1 (.1) атрибут type для <script> элементов требуется.

В HTML 5, type больше не требуется.

Фактически, хотя вы должны использовать text/javascript в своем HTML-источнике, многие серверы отправят файл с Content-type: application/javascript. Подробнее об этих типах MIME читайте в RFC 4329.

Обратите внимание на разницу между RFC 4329, которая отмечена text/javascript как устаревшая, и рекомендует использовать application/javascript, и реальность, в которой некоторые браузеры выходят из строя на элементах <script>, содержащих type="application/javascript" (в источнике HTML, а не заголовок HTTP Content-type файла, который отправляет). Недавно было опубликовано сообщение о списке рассылки WHATWG об этом расхождении (HTML 5 type по умолчанию - text/javascript), прочитайте эти сообщения с темой Считаете ли вы о RFC 4329?

Ответ 3

Борис Збарский (Mozilla), который, вероятно, знает больше о внутренностях Гекко, чем кто-либо другой, при условии http://lists.w3.org/Archives/Public/public-html/2009Apr/0195.html псевдокод, повторенный ниже для описания того, что делают браузеры на базе Gecko:

if (@type not set or empty) {
   if (@language not set or empty) {
     // Treat as default script language; what this is depends on the
     // content-script-type HTTP header or equivalent META tag
   } else {
     if (@language is one of "javascript", "livescript", "mocha",
                             "javascript1.0", "javascript1.1",
                             "javascript1.2", "javascript1.3",
                             "javascript1.4", "javascript1.5",
                             "javascript1.6", "javascript1.7",
                             "javascript1.8") {
       // Treat as javascript
     } else {
       // Treat as unknown script language; do not execute
     }
   }
} else {
   if (@type is one of "text/javascript", "text/ecmascript",
                       "application/javascript",
                       "application/ecmascript",
                       "application/x-javascript") {
     // Treat as javascript
   } else {
     // Treat as specified (e.g. if pyxpcom is installed and
     // python script is allowed in this context and the type
     // is one that the python runtime claims to handle, use that).
     // If we don't have a runtime for this type, do not execute.
   }
}

Ответ 4

Он позволяет браузерам определять, могут ли они обрабатывать язык сценариев/стиль перед тем, как сделать запрос для script или таблицы стилей (или, в случае встроенного script/style, указать, какой язык используется).

Это было бы гораздо более важным, если бы в среде браузеров было больше конкуренции между языками, но VBScript никогда не делал его выше IE, и PerlScript никогда не делал его за пределами специального плагина IE, в то время как JSSS был довольно мусорным для начала.

Проект HTML5 делает атрибут необязательным.