Вам потрібен текст / 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, це потрібно для перевірки, але не має ніякого ефекту.
бдук

14
"Браузер знає, що робити" ... поки що. А як на наступному тижні, коли RubyScript (я придумав це як приклад) популяризується, і всі лають штани, щоб прийняти його? Це той самий вид недалекоглядного мислення, який змушує людей називати свої файли "_new" і плутає інших людей роками. Це "_new"? Або "_new_new"? Або "_новіше"? ІМО це недалекоглядне.
Слобаум

18
@Slobaum, специфікація HTML5 зазначає, що він за замовчуванням підтримує JavaScript . Якщо є нові типи сценаріїв, вони будуть реалізовані лише в нових версіях браузера, які підтримують цей стандарт за замовчуванням.
бдукс

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

45

Це рекомендація Crockford . Я знаю, що бачив, як це лунало в інших місцях (можливо, ppk?). Специфікація HTML5 цього не вимагає.

Як не дивно, це стало кілька а.о. Курант використовувати «типу» атрибут мітки <script>блоків , які ви НЕ хочете , щоб оцінити:

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

Надавши дивний тип не JavaScript, ви отримуєте спосіб вставити необроблений текст на сторінку для використання іншим кодом JavaScript (який, мабуть, є в блоці сценаріїв, який можна оцінити).


я не можу зрозуміти повністю. поясніть, будь ласка, що взагалі type="text/html"означає, а що text/javascriptозначає .. дякую
Т.Тодуа

4
@tazotodua - це не дуже важливо, що означає "текст / html"; важливо те, що це не "текст / javascript", браузери повністю ігнорують вміст <script>блоку. Однак <script> заповіт стане частиною DOM, тому інший код JavaScript зможе їх знайти та витягнути їх вміст.
Pointy

Це цікавий хак. Не впевнений, для чого я б цим скористався.
brennanyoung

2
w3schools : In HTML5, the type attribute is no longer required for JavaScript. The default value is "application/javascript".
Amin Soheyli

19

HTML5 не потребує type="text/javascript"(це за замовчуванням).

CDATA потрібен лише для сторінок XHTML, якщо в скрипті є будь-які символи HTML (наприклад, '<' і '>').

<!-- повинні бути потрібні лише для OLD-браузерів.


3

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

Однак документація Google SDK все ще є text/javascript.

У документації Amazon SDK все ще є text/javascript.

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

Instagram все ще використовується text/javascript.


3

Атрибут type ідентифікує мову сценарію коду, вбудованого в елемент сценарію або посилання через атрибут src елемента. Це вказано як тип MIME; приклади підтримуваних типів MIME включають текст / javascript, текст / ecmascript, додаток / javascript та додаток / ecmascript.

Відповідно до специфікації HTML 4.01

Атрибут type визначає мову сценарію вмісту елемента і переосмислює мову сценаріїв за замовчуванням. Мова сценаріїв визначається як тип вмісту (наприклад, "текст / javascript"). Автори повинні надати значення для цього атрибута. Для цього атрибуту немає значення за замовчуванням.

Але в HTML5 text/javascript - тип за замовчуванням, тому ви можете опустити його

Атрибут типу дає мову сценарію або формату даних. Якщо атрибут присутній, його значення повинно бути дійсним типом MIME. Параметр charset не повинен вказуватися. За замовчуванням, який використовується, якщо атрибут відсутній, є "text / javascript".


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

2

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


1

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


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

3
знаючи сувору політику Китаю в Інтернеті, швидше за все, ваш сайт може ніколи не дійти до них = P
hellatan

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

1

Якщо ви розміщуєте тег сценарію всередині SVG, ви повинні вказати атрибут типу. І це має бути, "text/ecmascript"а не "text/javascript".

Якщо ваш сценарій вбудований (не пов'язаний), вам потрібно також загортати тіло сценарію в декларацію CDATA. Таким чином, вбудований сценарій кодування для SVG (та інших варіантів XML) є таким

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

Це можуть бути особливі випадки "в дикій природі", але вони досить реальні, і використання SVG зростає, тому хтось інший невірно припускати, що атрибут типу та CDATA повністю застаріли в сучасних браузерах. Так, випадки використання вузькі, але не нечувані.

"Змініть навколишнє середовище на протилежне, і кожна мудрість стає найгіршим глупотою". - Ешбі


1
Гарний дзвінок. Просто працюю над деяким складним SVG, і це справді так!
Дейв Еверітт

1

Speci Специфікація HTML5 закликає авторів опускати атрибут, а не надавати зайвий тип MIME. MDN

MIME Sniffing Standard дозволяє JavaScript обслуговуватися з використанням будь-якого типу MIME ( Multipurpose Internet Mail Extensions ) , який відповідає наступним чином :

<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


Ні атрибут типу, ні стара CDATA не потрібні, якщо ви дійсно не хочете орієнтуватися на справді антикварні браузери. Вони не повинні нічого шкодити, якщо ви дійсно використовуєте правильний тип.
Поні

Я використовую останній стабільний реліз FF, і, здається, виникають проблеми з розбором без оголошення тексту / JavaScript, я використовую jQuery btw, але це не повинно змінити значення.
Майкл

Ну я запускаю всю свою веб-програму з тегами скриптів, які є просто <script>, без "мови" та "типу", і вони добре працюють у всіх браузерах. (Ну, всі розумні: FF, Chrome, Safari, IE, Opera.)
Pointy

1
@pointy, схоже, отець просто відкрив відповідь, чому це відбувається. тому ваші коментарі здаються невірними.
Майкл

@Michael це може бути так, що якщо ви помилилися з XHTML / Strict, у вас може виникнути проблема, але навіть тоді я сумніваюся в цьому. Серед світилів світу JavaScript існує загальна згода, що атрибут "type" непотрібний, а оскільки поганий "type" порушить сценарій, це просто джерело помилок.
Поні

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.