Czy potrzebujesz tekstu / javascript określonego w tagach <script>?


157

Czytałem gdzieś, że nie ma już rzeczy muszą jak type="text/javascript"i dziwne CDATAi <!--rzeczy w tagach skryptu. Więc zamiast:

<script type="text/javascript">
//<![CDATA[
<!--

    //your script here

-->
//]]>
</script>

Po prostu zrobiłbyś:

<script>
    //your script here
</script>

Nie pamiętam jednak, gdzie to przeczytałem. Wydaje mi się, że pochodziło to od inżyniera Google lub Yahoo, który konkretnie wspomniał, które przeglądarki wymagają tych archaicznych konstrukcji i dlaczego. Czy ktoś wie, o jakim poście / artykule na blogu mówiono, lub ma dobre źródło, które mówi o tym?


Dla nowych przeglądarek, ale starszych (jeśli takie nadal istnieją) potrzebny jest <! - ->. O typie w niektórych aplikacjach, jeśli nie zostanie pominięty, potrzebuje właściwego.
Bakudan,

1
kapa

1
Za każdym razem, gdy otwieram plik z text/javascriptokreślonym, usuwam go. To hałas.
The Muffin Man

Bardzo Related Post tutaj mający up-to-aktualne informacje na temat wytycznych HTML5 w przyjętym odpowiedź.
RBT

Odpowiedzi:


135

Zobacz napis Crockforda na <script>etykiecie , w szczególności:

Nie używaj <!-- //-->hackowania ze skryptami. Miało to na celu zapobieganie wyświetlaniu skryptów jako tekstu w przeglądarkach pierwszej generacji, Netscape 1 i Mosaic. Nie było to konieczne od wielu lat. <!-- //-->ma zasygnalizować komentarz HTML. Komentarze powinny być ignorowane, a nie kompilowane i wykonywane. Ponadto komentarze HTML nie mogą być dołączane --, więc skrypt, który zmniejsza, ma błąd HTML.

...

type="text/javascript"

Ten atrybut jest opcjonalny. Od Netscape 2 domyślnym językiem programowania we wszystkich przeglądarkach jest JavaScript. W XHTML ten atrybut jest wymagany i niepotrzebny. W HTML lepiej to pominąć. Przeglądarka wie, co robić.


75
Wymagane i niepotrzebne? Czy coś mi brakuje?
Izkata

17
@Izkata, jest wymagana do walidacji, ale nie ma żadnego efektu.
bdukes

14
„Przeglądarka wie, co robić”… na razie. A co w przyszłym tygodniu, kiedy RubyScript (zmyśliłem to jako przykład) zostanie spopularyzowany i wszyscy będą grzebać w gacie, żeby go zaadaptować? Jest to ten sam rodzaj krótkowzrocznego myślenia, które sprawia, że ​​ludzie nazywają swoje pliki „_new” i przez lata dezorientują innych. Czy to „_new”? Lub „_new_new”? Lub nowsze"? IMO to krótkowzroczne.
Slobaum

18
@Slobaum, specyfikacja HTML5 stwierdza, że domyślnie jest to JavaScript . Jeśli pojawią się nowe typy skryptów, zostaną zaimplementowane tylko w nowych wersjach przeglądarek, które obsługują ten domyślny ze specyfikacji.
bdukes

8
jeśli stanie RubyScriptsię popularny, zakończy się, .rbscripta przeglądarka będzie działać odpowiednio.
Kirk Strobeck

45

To zalecenie Crockforda . Wiem, że widziałem to odbijające się echem w innym miejscu (może ppk?). Specyfikacja HTML5 tego nie wymaga.

Co dziwne, to się nieco au courant użyć atrybutu „Typ”, aby zaznaczyć <script>bloki, które nie chcą być oceniane:

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

Podając dziwny typ inny niż JavaScript, otrzymujesz sposób na umieszczenie surowego tekstu na stronie w celu użycia przez inny kod JavaScript (który prawdopodobnie znajduje się w bloku skryptu, który można ocenić).


nie mogę w pełni zrozumieć. proszę wyjaśnić, co type="text/html"to w ogóle oznacza, a co to text/javascriptznaczy… dzięki
T.Todua

4
@tazotodua nie jest bardzo ważne, co oznacza „tekst / html”; ważne jest to, że nie jest to „tekst / javascript”, przeglądarki całkowicie zignorują zawartość <script>bloku. Jednak <script> staną się częścią DOM, więc inny kod JavaScript będzie mógł je znaleźć i wyodrębnić ich zawartość.
Pointy

To interesujący hack. Nie jestem jednak pewien, do czego bym go użył.
brennanyoung

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

19

HTML5 nie potrzebuje type="text/javascript"(jest to ustawienie domyślne).

CDATA jest potrzebne tylko dla stron XHTML, jeśli skrypt zawiera znaki HTML (takie jak „<” i „>”).

<!-- powinno być potrzebne tylko w STARYCH przeglądarkach.



3

Typ atrybut określa język skryptowy kodu osadzonego w elemencie skryptu lub odwołanie przez atrybut src elementu. Jest to określone jako typ MIME; przykłady obsługiwanych typów MIME to: text / javascript, text / ecmascript, application / javascript i application / ecmascript.

Zgodnie ze specyfikacją HTML 4.01

Typ atrybut określa język skryptowy treści elementu i zastępuje domyślny język skryptowy. Język skryptowy jest określony jako typ treści (np. „Tekst / javascript”). Autorzy muszą podać wartość tego atrybutu. Nie ma wartości domyślnej dla tego atrybutu.

Ale w HTML5 text/javascript jest to typ domyślny, więc możesz go pominąć

Typ atrybut daje języka skryptu lub formatu danych. Jeśli atrybut jest obecny, jego wartość musi być poprawnym typem MIME. Nie można określać parametru charset. Wartość domyślna, która jest używana, jeśli atrybut jest nieobecny, to „text / javascript”.


1
innymi słowy, pominięcie go może spowodować błędy w starszych przeglądarkach, które nie obsługują HTML5
Serge

2

możesz myśleć o tym artykule tutaj z zależnością polegającą na tym, że skrypty domyślnie domyślnie używają tekstu / javascript w HTML5, podczas gdy przeglądarki inne niż HTML5 nadal oczekują, że zdefiniujesz typ specjalnie pod kątem specyfikacji, mimo że i tak prawie zawsze będą odgadywać tekst / javascript .


1

To od przeglądarki scriptzależy, czy poprawnie zinterpretuje blok na podstawie nagłówków, a nie typeatrybutu. Aby odpowiedzieć na Twoje pytanie, nie jest to wymagane w przypadku nowoczesnych przeglądarek (mówię o IE7 +, FF, Webkit). Jeśli wspierasz starsze przeglądarki niż ta ... Żal mi Ciebie =)


2
Nie zapomnij o Chinach, które mają ponad 385 milionów użytkowników, z których wielu nadal korzysta z IE6. netmarketshare.com/...
chainwork

3
znając surowe chińskie zasady dotyczące Internetu, istnieje prawdopodobieństwo, że Twoja witryna nigdy do nich nie dotrze = P
hellatan

Pytanie dotyczy skryptu wbudowanego, więc nie ma innych nagłówków poza stroną główną (która byłaby jakimś typem zawartości HTML). W każdym razie, czy masz źródło wskazujące, że przeglądarki biorą pod uwagę nagłówki (np. Jeśli masz zwykły <script src = "something"> </script> i obsłużyłeś nagłówek VBScript, czy jest jakaś przeglądarka, która zinterpretowałaby to jako VBScript) ?
Matthew Flaschen

1

Jeśli umieszczasz tag skryptu wewnątrz SVG , musisz określić atrybut type. I powinno być "text/ecmascript"raczej niż "text/javascript".

Jeśli twój skrypt jest wbudowany (nie jest połączony), będziesz musiał również opakować treść skryptu w deklarację CDATA. Tak więc wbudowany skrypt skryptowy dla SVG (i innych wariantów XML) to

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

Mogą to być specjalne przypadki „na wolności”, ale są one wystarczająco realne, a użycie SVG rośnie, więc nikt inny nie powinien sugerować, że atrybut type i CDATA są całkowicie przestarzałe w nowoczesnych przeglądarkach. Przypadki użycia są wąskie, tak, ale nie niespotykane.

„Zmień otoczenie na swoje przeciwieństwo, a każda mądrość stanie się najgorszą z głupoty”. - Ashby


1
Dobra decyzja. Właśnie pracowałem nad jakimś złożonym SVG i rzeczywiście tak jest!
Dave Everitt

1

👉🏻 Specyfikacja HTML5 zachęca autorów do pominięcia atrybutu zamiast dostarczania redundantnego typu MIME. MDN

Standard MIME Sniffing umożliwia obsługę JavaScript przy użyciu dowolnego typu MIME ( Multipurpose Internet Mail Extensions ), który spełnia następujące warunki:

<script type="application/javascript"></script>
<script type="application/ecmascript"></script>

<script type="text/javascript"></script>
<script type="text/ecmascript"></script>

0

Cóż, wciąż widzę więcej przykładów bez tekstu / javascript, ale z jakiegoś powodu moje skrypty nie będą działać w FF, kiedy to zrobię. Zalecałbym zachowanie deklaracji text / javascript. Znacznik CDATA zapobiega wyświetlaniu javascript jako zwykłego tekstu w Twojej witrynie, jeśli Twoja przeglądarka ma wyłączony javascript. Osobiście nie używam już tych tagów, nie sądzę, że jest wielu użytkowników bez, a jeśli tam są, mogą chcieć wyhodować trochę mózgów: P


Ani atrybut type, ani stara funkcja CDATA nie są konieczne, chyba że naprawdę chcesz kierować reklamy na naprawdę starodawne przeglądarki. Nie powinny jednak niczego ranić, o ile naprawdę używasz właściwego typu.
Pointy

Używam najnowszej stabilnej wersji FF i wydaje się, że mam problemy z analizowaniem bez deklaracji tekstu / javascript. Przy okazji używam jQuery, ale to nie powinno robić różnicy.
Michael,

Cóż, uruchamiam całą moją aplikację internetową ze znacznikami skryptów, które są po prostu proste <script>, bez „języka” i „typu”, i działają dobrze we wszystkich przeglądarkach. (Cóż, wszystkie rozsądne: FF, Chrome, Safari, IE, Opera.)
Pointy

1
@pointy wygląda na to, że FatherStorm właśnie opublikował odpowiedź, dlaczego tak się dzieje. więc twoje komentarze wydają się nieprawidłowe.
Michael,

@Michael może się zdarzyć, że jeśli popełniłeś błąd, wybierając XHTML / Strict, możesz mieć problem, ale nawet wtedy w to wątpię. Wśród luminarzy świata JavaScript istnieje ogólna zgoda, że ​​atrybut „type” jest niepotrzebny, a ponieważ zły „typ” zepsuje skrypt, jest to po prostu źródło błędów.
Pointy

0

type="text/javascript" : Wymagane w HTML 4 i XHTML, ale opcjonalne w HTML5.

CDATA : Wymagane w XHTML.

<!--: Używany do ukrywania JavaScript przed bardzo starymi przeglądarkami. Np .: Netscape 1 i Internet Explorer 2, z których nikt już nie korzysta.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.