Co jest lepsze: <script type = “text / javascript”>… </script> lub <script>… </script>

97

Który jest lepszy lub wygodniejszy w użyciu:

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

lub

<script>...</script>
ołówekCake
źródło
7
Jeśli używasz javascript jako języka, to oczywiście pierwszy jest lepszy
Chinmayee G
Zgaduję, że wzrost wydajności, jaki można uzyskać, zadeklarowanie skryptu jako skryptu java, jest nieznaczny, ale świetne pytanie!
The_Butcher
10
Czy „poprawna” odpowiedź różni się, jeśli jest w HTML v4 i Html v5?
Dimitrios Mistriotis
Nie chodzi o to, który z nich jest lepszy, ale kiedy użyć czego; podczas korzystania z deklaracji HTML5 <!doctype html>nie ma potrzeby używania wskazówki typu MIME type="text/javascript"na <script>tagu, ponieważ jest ona stosowana domyślnie. Z drugiej strony (inne niż HTML5) jest to zalecane i zalecane (w odniesieniu do podpowiedzi typu MIME type="text/javascript").
nyedidikeke

Odpowiedzi:

138

Czy w ogóle potrzebujesz atrybutu typu? Jeśli używasz HTML5, nie. W przeciwnym razie tak. HTML 4.01 i XHTML 1.0 określają typeatrybut zgodnie z wymaganiami, podczas gdy HTML5 ma go jako opcjonalny, domyślnie text/javascript. HTML5 jest obecnie powszechnie wdrażany, więc jeśli używasz typu dokumentu HTML5, <script>...</script>jest prawidłowy i jest dobrym wyborem.

Jeśli chodzi o to, co powinno znajdować się w atrybucie typu, typ MIME application/javascriptzarejestrowany w 2006 roku ma zastąpić text/javascripti jest obsługiwany przez aktualne wersje wszystkich głównych przeglądarek (w tym Internet Explorer 9). Cytat z odpowiedniego RFC :

Ten dokument definiuje zatem text / javascript i text / ecmascript, ale oznacza je jako „przestarzałe”. Odradza się używanie eksperymentalnych i niezarejestrowanych typów mediów, wymienionych w części powyżej. Rodzaje mediów,

  * application/javascript
  * application/ecmascript

które są również zdefiniowane w tym dokumencie, są przeznaczone do powszechnego użytku i powinny być używane zamiast nich.

Jednak IE do wersji 8 włącznie nie wykonuje skryptu wewnątrz <script>elementu z typeatrybutem albo application/javascriptlub application/ecmascript, więc jeśli potrzebujesz obsługiwać stary IE, utkniesz z text/javascript.

Tim Down
źródło
3
Nie potrzebujesz tego typeatrybutu. Weryfikacja w oparciu o HTML4.01 lub XHTML 1.0 nie jest już tym, co powinieneś już robić, a wszystkie przeglądarki będą obsługiwać twój tag beztext/javascript
Ian Storm Taylor
9
@Ian: W momencie pisania tego tekstu specyfikacja HTML5 była roboczą wersją roboczą i nie zmieniła się jeszcze w swój obecny status wiecznie poruszającego się celu. Implementacje HTML5 w przeglądarkach były znacznie opóźnione w stosunku do obecnego. Biorąc to pod uwagę, myślę, że HTML5 w tamtym czasie nie nadawał się do użytku w ogólnej sieci, a moja odpowiedź była absolutnie uczciwa i zawsze zawierała zastrzeżenie „jeśli chcesz, aby Twój HTML był prawidłowy” . Zgodziłbym się, że od tego czasu sprawy się potoczyły i ta odpowiedź mogłaby zrobić z poprawkami, ale nie zgadzam się, że pisanie stron internetowych w HTML 4.01 jest teraz zawsze niewłaściwą rzeczą.
Tim Down
1
+1, właśnie odkryłem to pytanie od oszusta. Przypomina mi to kilka postów na blogu Anne Van Kesteren, w tym typu JavaScript MIME , gdzie omawia to. Nie mogę go znaleźć, ale byłem pewien, że był post, w którym zalecił w ogóle nie używać, typeponieważ działa we wszystkich przeglądarkach. Może to był ktoś inny.
Andy E
1
Chciałem tylko powiedzieć „dziękuję”, próbując dowiedzieć się, dlaczego plik JS „aplikacji / javascript” nie jest wykonywany w IE8 i niższych!
andrewtweber
a co z: "text / javascript; version = 1.8"?
SparK
10

Oba będą działać, ale standard xhtml wymaga określenia typerównież:

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

<!ELEMENT SCRIPT - - %Script;          -- script statements -->
<!ATTLIST SCRIPT
  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
  type        %ContentType;  #REQUIRED -- content type of script language --
  src         %URI;          #IMPLIED  -- URI for an external script --
  defer       (defer)        #IMPLIED  -- UA may defer execution of script --
  >

type = content-type [CI] Ten atrybut określa język skryptowy zawartoś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.

Zauważa powyższe podkreślenie.

http://www.w3.org/TR/html4/interact/scripts.html

Uwaga: od HTML5 (daleko) typeatrybut nie jest wymagany i jest domyślny.

Sarfraz
źródło
9

Musisz użyć, <script type="text/javascript"> </script>chyba że używasz HTML5. W takim przypadku zachęcamy do preferowania <script> ... </script>(ponieważ atrybut typu jest domyślnie określony na tę wartość)


źródło
5

To wszystko, czego potrzeba:

<!doctype html>
<script src="/path.js"></script>
chovy
źródło
3

<script type="text/javascript"></script> ponieważ jest to właściwy sposób i kompatybilny ze wszystkimi przeglądarkami

pooja
źródło
-2

W najnowszym Firefoksie muszę używać:

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

W przeciwnym razie skrypt może nie działać poprawnie.

Stephen Elliott
źródło