Я понимаю, что типы mime задаются веб-сервером. Почему мы добавляем атрибут type="text/javascript
или type="text/css"
? Разве это не бесполезный и игнорируемый атрибут?
Зачем писать <script type = "text/javascript" >, когда тип mime задается сервером?
Ответ 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 делает атрибут необязательным.