O que é melhor: <script type = “text / javascript”>… </script> ou <script>… </script>

97

Qual é melhor ou mais conveniente de usar:

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

ou

<script>...</script>
pencilCake
fonte
7
Se você estiver usando javascript como linguagem, então é claro que o primeiro é melhor
Chinmayee G
Acho que o ganho de desempenho que você obtém ao declarar o script como java-script é insignificante, mas ótima pergunta!
The_Butcher
10
A resposta "correta" difere se estivermos em Html v4 e Html v5?
Dimitrios Mistriotis
Não se trata de qual é o melhor, mas de quando usar o quê; ao usar a declaração HTML5 <!doctype html>, não há necessidade de usar a dica do tipo MIME type="text/javascript"em uma <script>tag, pois ela se aplica por padrão. Por outro lado (não HTML5), é aconselhável e recomendado (com referência à dica do tipo MIME type="text/javascript").
nyedidikeke

Respostas:

137

Você precisa de um atributo de tipo? Se você estiver usando HTML5, não. Caso contrário, sim. HTML 4.01 e XHTML 1.0 especifica o typeatributo como obrigatório, enquanto HTML5 o tem como opcional, assumindo como padrão text/javascript. O HTML5 agora está amplamente implementado, portanto, se você usar o doctype HTML5, <script>...</script>é válido e uma boa escolha.

Quanto ao que deve constar no atributo type, o tipo MIME application/javascriptregistrado em 2006 tem como objetivo substituir text/javascripte é compatível com as versões atuais de todos os principais navegadores (incluindo o Internet Explorer 9). Uma citação do RFC relevante :

Este documento, portanto, define text / javascript e text / ecmascript, mas os marca como "obsoletos". O uso de tipos de mídia experimentais e não registrados, conforme listado na parte acima, é desencorajado. Os tipos de mídia,

  * application/javascript
  * application/ecmascript

que também são definidos neste documento, destinam-se ao uso comum e devem ser usados ​​em seu lugar.

No entanto, o IE até a versão 8, inclusive, não executa o script dentro de um <script>elemento com um typeatributo application/javascriptou application/ecmascript, portanto, se você precisar oferecer suporte ao IE antigo, não terá text/javascript.

Tim Down
fonte
3
Você não "precisa" do typeatributo. Validar em HTML4.01 ou XHTML 1.0 não é o que você deveria fazer mais de qualquer maneira, e todos os navegadores irão suportar sua tag semtext/javascript
Ian Storm Taylor
9
@Ian: No momento em que este livro foi escrito, a especificação HTML5 era um rascunho funcional e ainda não havia se transformado em seu status atual de alvo em constante movimento. As implementações de HTML5 em navegadores ficaram bem atrás de onde estão agora. Considerando isso, acho que o HTML5 na época não era viável para uso na web em geral e minha resposta foi absolutamente justa, e sempre trazia o aviso "se você quiser que seu HTML seja válido" . Eu concordaria que as coisas mudaram desde então e esta resposta poderia ter uma revisão, mas eu discordo que escrever páginas da web em HTML 4.01 agora é sempre a coisa errada a fazer.
Tim Down
1
1, acabei de descobrir esta pergunta de um idiota. Isso me lembra de vários posts no blog de Anne Van Kesteren, incluindo o tipo JavaScript MIME , onde ele discute isso. Não consigo encontrar, mas tinha certeza de que havia um post onde ele recomendava não usar de typejeito nenhum porque funciona em todos os navegadores. Talvez fosse outra pessoa.
Andy E
1
Só queria dizer "obrigado", pois estava tentando descobrir por que um arquivo JS "application / javascript" não estava sendo executado no IE8 e versões anteriores!
andrewtweber
e: "text / javascript; version = 1.8"?
SparK de
10

Ambos funcionarão, mas o padrão xhtml exige que você especifique o typetambém:

<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] Este atributo especifica a linguagem de script do conteúdo do elemento e substitui a linguagem de script padrão. A linguagem de script é especificada como um tipo de conteúdo (por exemplo, "text / javascript"). Os autores devem fornecer um valor para este atributo. Não há valor padrão para este atributo.

Observe a ênfase acima.

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

Nota: A partir do HTML5 (distante), o typeatributo não é obrigatório e é o padrão.

Sarfraz
fonte
9

Você precisa usar, a <script type="text/javascript"> </script>menos que esteja usando html5. Nesse caso, você é encorajado a preferir <script> ... </script>(porque o atributo type é especificado por padrão para esse valor)


fonte
5

Isso é tudo o que é necessário:

<!doctype html>
<script src="/path.js"></script>
chovy
fonte
3

<script type="text/javascript"></script> porque é o caminho certo e compatível com todos os navegadores

Pooja
fonte
-2

Com o Firefox mais recente, devo usar:

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

Ou então o script pode não funcionar corretamente.

Stephen Elliott
fonte