Насколько я понимаю, типы mime устанавливаются веб-сервером. Почему мы добавляем атрибут type="text/javascript
или type="text/css"
? Разве это не бесполезный и игнорируемый атрибут?
Зачем писать ‹script type = text / javascript›, если тип mime установлен сервером?
Ответы (4)
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 работали все, кроме скрипта 3 (type="baloney"
). IE8 не запускал скрипт 1 (type="application/ecmascript"
) или скрипт 3. Судя по моему не обширному образцу двух браузеров, похоже, что вы можете спокойно игнорировать атрибут type
, но если вы его используете, вам лучше использовать законный (зависит от браузера) ценность.
type="text/javascript"
, хотя многие серверы отправят файл с Content-type: application/javascript
.
- person Marcel Korpel; 25.04.2010
type
) будет работать в этом браузере. Это потому, что в большинстве браузеров есть резервные настройки на случай, если документ не соответствует стандартам; это не повод подавать нестандартные блюда или даже помечать суп.
- person Marcel Korpel; 25.04.2010
text/javascript
и text/ecmascript
, но отмечает их как устаревшие
- person brainjam; 25.04.2010
application/javascript
в пользу text/javascript
, но первый просто не будет работать в некоторых браузерах (по крайней мере, в IE). Недавно в списке рассылки WHATWG обсуждалось значение по умолчанию type
в HTML 5 по сравнению с RFC 4329: lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-April/ (также прочтите оставшуюся часть обсуждения).
- person Marcel Korpel; 25.04.2010
type=baloney
работал :)
- person Daniel Vassallo; 25.04.2010
<!--[if IE 6]><script type=baloney>/* some evil crash code */</script><![endif]-->
на своих страницах. en.wiktionary.org/wiki/
- person Marcel Korpel; 25.04.2010
type="text/javascript"
в HTML?
- person Kyle Vassella; 06.09.2017
Поскольку, по крайней мере, в 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?
Борис Збарский (Mozilla), который, вероятно, знает о внутренностях Gecko больше, чем кто-либо другой, предоставлено на 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.
}
}
language
устарело: w3.org/TR/html401/interact/scripts.html#adef-language
- person Marcel Korpel; 25.04.2010
Он позволяет браузерам определять, могут ли они обрабатывать язык сценариев / стилей, прежде чем делать запрос на сценарий или таблицу стилей (или, в случае встроенного сценария / стиля, определять, какой язык используется).
Это было бы намного важнее, если бы между языками в пространстве браузеров была большая конкуренция, но VBScript никогда не выходил за рамки IE, а PerlScript никогда не выходил за рамки конкретного плагина IE, в то время как JSSS был довольно мусором с самого начала.
Черновик HTML5 делает атрибут необязательным.