Porquê escrever quando o tipo mime é definido pelo servidor?

O meu entendimento é que os tipos mime são definidos pelo servidor web. Por que adicionamos o atributo type="text/javascript ou type="text/css"? Não é um atributo inútil e ignorado?

Author: Deduplicator, 2010-04-25

4 answers

Douglas Crockford diz:

type="text/javascript"

Este atributo é facultativo. Desde Netscape 2, a programação predefinida a linguagem em todos os navegadores tem sido Forum. Em XHTML, este atributo é necessário e desnecessário. Em HTML, é melhor deixar de fora. O o browser sabe o que fazer.

Ele também diz:

W3C não adoptou o language atributo, favorecendo em vez de a type atributo que tem um tipo Mimo. Infelizmente, o tipo MIME não era padronizado, por isso é às vezes "text/javascript" ou Ou algo assim. mais. Felizmente, todos os navegadores Irão escolher sempre o JavaScript como o linguagem de programação padrão, então é é sempre melhor simplesmente escrever <script>. É menor, e funciona no a maioria dos navegadores.

Apenas para fins de entretenimento, eu experimentei os seguintes cinco guiões

  <script type="application/ecmascript">alert("1");</script>
  <script type="text/javascript">alert("2");</script>
  <script type="baloney">alert("3");</script>
  <script type="">alert("4");</script>
  <script >alert("5");</script>

No cromado, tudo menos o script 3 (type="baloney") funcionou. IE8 fez não executar o programa 1 (type="application/ecmascript") ou o programa 3. Com base na minha amostra não extensa de dois navegadores, parece que você pode ignorar com segurança o atributo type, mas que ele você o USA é melhor usar um valor legal (dependente do navegador).

 62
Author: brainjam, 2010-04-24 22:34:44

Porque, pelo menos no HTML 4.01 e XHTML 1(.1), o atributo type para <script> elementos é necessário.

In HTML 5, type já não é necessário.

Na verdade, enquanto você deve usar text/javascript na sua fonte HTML, muitos servidores irão enviar o ficheiro com Content-type: application/javascript. Leia mais sobre estes tipos MIME em RFC 4329 .

Repare na diferença entre a RFC 4329, que marcou text/javascript como obsoleto e recomendou a utilização de application/javascript, e a realidade. no qual alguns navegadores se passam em <script> elementos que contêm type="application/javascript" (no código HTML, não no cabeçalho do tipo de conteúdo HTTP do ficheiro que é enviado). Recentemente, houve uma discussão na lista de discussão do WHATWG sobre esta discrepância (HTML 5's {[[0]}} defaults to text/javascript), leia estas mensagens com o assunto irá considerar sobre o RFC 4329?

 27
Author: Marcel Korpel, 2010-04-25 00:32:30

Boris Zbarsky (Mozilla), que provavelmente sabe mais sobre as entranhas do Gecko do que qualquer outra pessoa, desde que em http://lists.w3.org/Archives/Public/public-html/2009Apr/0195.html o pseudocódigo repetido abaixo para descrever o que os navegadores baseados no Gecko fazer:

if (@type not set or empty) {
   if (@language not set or empty) {
     // Treat as default script language; what this is depends on the
     // content-script-type HTTP header or equivalent META tag
   } else {
     if (@language is one of "javascript", "livescript", "mocha",
                             "javascript1.0", "javascript1.1",
                             "javascript1.2", "javascript1.3",
                             "javascript1.4", "javascript1.5",
                             "javascript1.6", "javascript1.7",
                             "javascript1.8") {
       // Treat as javascript
     } else {
       // Treat as unknown script language; do not execute
     }
   }
} else {
   if (@type is one of "text/javascript", "text/ecmascript",
                       "application/javascript",
                       "application/ecmascript",
                       "application/x-javascript") {
     // Treat as javascript
   } else {
     // Treat as specified (e.g. if pyxpcom is installed and
     // python script is allowed in this context and the type
     // is one that the python runtime claims to handle, use that).
     // If we don't have a runtime for this type, do not execute.
   }
}
 12
Author: Alohci, 2010-04-24 23:44:25

Permite aos navegadores determinar se conseguem lidar com a linguagem de Script/Estilo antes de fazer um pedido para o script ou stylesheet (ou, no caso do script/estilo incorporado, identificar qual a língua que está a ser usada).

Esta seria muito mais importante, se houvesse mais concorrência entre as línguas no navegador de espaço, mas VBScript nunca fez isso além do IE e PerlScript nunca fez isso, para além de um IE plugin específico, enquanto JSSS foi muito lixo, para começar.

A o rascunho do HTML5 torna o atributo opcional.

 5
Author: Quentin, 2010-04-24 23:26:28