В чем разница между атрибутами "lang" и "type" в теге сценария?
За <script>
HTML-теги, в чем техническая разница между lang=Javascript
а также type=text/javascript
?
Я обычно использую оба, потому что я всегда предполагал, что более старые браузеры нуждаются в одном или другом.
7 ответов
Согласно спецификации HTML 4.01:
type: Этот атрибут указывает язык сценариев содержимого элемента и переопределяет язык сценариев по умолчанию. Язык сценариев указывается в качестве типа контента (например, "text/javascript"). Авторы должны предоставить значение для этого атрибута. Для этого атрибута нет значения по умолчанию.
Язык: устарел. Этот атрибут определяет язык сценариев содержимого этого элемента. Его значение является идентификатором языка, но поскольку эти идентификаторы не являются стандартными, этот атрибут устарел в пользу типа.
В ОП специально сказано "lang", а не "language". Гораздо более старый "языковой" тег был бы Javascript или VBScript.
Но текущий и, казалось бы, действительный тег "lang" на самом деле написан на таких языках, как английский, испанский, японский. Microsoft Visual Studio предоставляет выпадающий список для значений "lang", и все они похожи на en-us, fr, ja и т. Д. Для английского США, французского, японского и т. Д.
Я думаю, что могут быть веские причины для использования этого тега, если у вас сложная многоязычная настройка - может быть, есть система управления контентом, которая может это поддержать и затем доставить надлежащий файл javascript - например, ресурсы управления jQuery?
<script language="">
может быть использован для обслуживания VBScript и различных версий Javascript.
Если вам не нужна конкретная версия Javascript, не используйте атрибут языка, без него ваш код будет работать как обычно.
Даже если вам нужна конкретная версия Javascript для некоторой части кода, попробуйте проверить, существует ли эта функция, с помощью проверки (typeof window.blah.feature!= "Undefined").
Вот пример использования атрибута языка: http://bclary.com/2004/08/27/javascript-version-incompatibilities
Атрибут языка устарел из-за этого слабо определенного или неопределенного поведения.
Атрибут type совершенно другой. Он сообщает браузеру, какой тип MIME сценарий, и всегда должен быть указан в теге сценария.
Язык - старый атрибут, тип - новый. Вы должны будете использовать переходный (не положительный, но вполне уверенный) тип документа, чтобы по закону использовать оба атрибута.
В принципе, ни один атрибут не является необходимым. Единственная причина их использования - валидация, и в HTML5 это стало недействительным.
Тип является более общим и относится к кодированию MIME блока скрипта. Насколько я знаю, вам нужен только один, и обычно блок будет работать без атрибутов type или lag.
Я склонен использовать тип.
lang - это язык скрипта, а type - это тип MIME содержимого тега скрипта.