Porquê escrever quando o tipo mime é definido pelo servidor?
type="text/javascript
ou type="text/css"
? Não é um atributo inútil e ignorado?
4 answers
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.
W3C não adoptou o
language
atributo, favorecendo em vez de atype
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).
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?
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.
}
}
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.