Você precisa de texto / javascript especificado nas tags <script>?

157

Li em algum lugar que você não precisa mais de coisas como type="text/javascript"as coisas estranhas CDATAe <!--em suas tags de script. Então, em vez de:

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

    //your script here

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

Você faria apenas:

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

Não me lembro de onde li isso. Acho que era de um engenheiro do Google ou Yahoo, e eles mencionaram especificamente quais navegadores exigiam essas construções arcaicas e por quê. Alguém sabe sobre qual post / artigo do blog foi comentado ou tem um bom recurso falando sobre isso?

cmcculloh
fonte
Para novos navegadores, mas em versões mais antigas (se ainda existirem) <! - -> é necessário. Sobre o tipo em alguns aplicativos, se não for omitido, precisa do caminho certo.
21411 Bakudan
1
Boa leitura sobre o CDATA: stackoverflow.com/questions/66837/…
kapa
1
Sempre que abro um arquivo com o text/javascriptespecificado, removo-o. É barulho.
O homem de muffin
Uma postagem muito relacionada aqui com informações atualizadas sobre as diretrizes HTML5 na resposta aceita.
RBT

Respostas:

135

Veja o artigo de Crockford na <script>etiqueta , mais notavelmente:

Não use o <!-- //-->hack com scripts. O objetivo era impedir que scripts aparecessem como texto nos navegadores de primeira geração Netscape 1 e Mosaic. Não é necessário há muitos anos. <!-- //-->deve sinalizar um comentário HTML. Os comentários devem ser ignorados, não compilados e executados. Além disso, os comentários em HTML não devem ser incluídos --, portanto, um script que diminui possui um erro de HTML.

...

type="text/javascript"

Este atributo é opcional. Desde o Netscape 2, a linguagem de programação padrão em todos os navegadores é o JavaScript. No XHTML, esse atributo é necessário e desnecessário. Em HTML, é melhor deixar de fora. O navegador sabe o que fazer.

bdukes
fonte
75
Necessário e desnecessário? Estou esquecendo de algo?
Izkata
17
@ Izkata, é necessário para validação, mas não tem nenhum efeito.
bdukes
14
"O navegador sabe o que fazer" ... por enquanto. E na próxima semana, quando o RubyScript (que eu criei isso como exemplo) for popularizado e todo mundo enlouquecer para adotá-lo? Esse é o mesmo tipo de pensamento míope que faz as pessoas nomearem seus arquivos "_novo" e confunde outras pessoas por anos. É o "_novo"? Ou "_novo_novo"? Ou "_novo"? OMI é míope.
Slobaum
18
@Slobaum, a especificação HTML5 afirma que o padrão é JavaScript . Se houver novos tipos de script, eles serão implementados apenas em novas versões do navegador que suportem esse padrão nas especificações.
bdukes
8
se RubyScripttornar popular, terminará .rbscripte o navegador agirá de acordo.
Kirk Strobeck
45

É uma recomendação de Crockford . Eu sei que já vi isso ecoar em outro lugar (talvez ppk?). A especificação HTML5 não exige isso.

Estranhamente, tornou-se algo fácil de usar o atributo "type" para marcar <script>blocos que você não deseja avaliar:

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

Ao fornecer um tipo estranho não JavaScript, você pode inserir texto bruto na página para uso por outro código JavaScript (que provavelmente está no bloco de script que pode ser avaliado).

Pontudo
fonte
Eu não consigo entender completamente. explique, o que type="text/html"significa em tudo, e o que text/javascriptsignifica .. obrigado
T.Todua
4
@tazotodua não é realmente muito importante o que "text / html" significa; o importante é que ele é não "text / javascript", navegadores irão ignorar completamente o conteúdo do <script>bloco. No entanto, <script> ele se tornará parte do DOM, para que outro código JavaScript possa encontrá-los e extrair seu conteúdo.
Pointy
Esse é um truque interessante. Não tenho certeza do que eu usaria para isso, no entanto.
Brennanyoung #
2
w3schools : In HTML5, the type attribute is no longer required for JavaScript. The default value is "application/javascript".
Amin Soheyli 16/06/19
19

O HTML5 não precisa do type="text/javascript"(é o padrão).

CDATA só é necessário para páginas XHTML, se o script tiver caracteres HTML (como '<' e '>').

<!-- só deve ser necessário para navegadores OLD.

Foguete Hazmat
fonte
3

Bem, estou tentado a dizer que ninguém mais está usando text/javascript, e que mesmo as ferramentas de minificação provavelmente o removeriam ... De fato, a documentação do Facebook SDK especifica apenas <script>.

No entanto, a documentação do Google SDK ainda tem text/javascript.

A documentação do Amazon SDK ainda possui text/javascript.

A documentação da API do Linkedin ainda possui text/javascript.

O Instagram ainda está usando text/javascript.

osa
fonte
3

O atributo type identifica a linguagem de script do código incorporado em um elemento de script ou referenciado por meio do atributo src do elemento. Isso é especificado como um tipo MIME; exemplos de tipos MIME suportados incluem text / javascript, text / ecmascript, application / javascript e application / ecmascript.

De acordo com a especificação HTML 4.01

O atributo type 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, "texto / javascript"). Os autores devem fornecer um valor para este atributo. Não há valor padrão para este atributo.

Mas no HTML5 text/javascript é o tipo padrão, então você pode omitir

O atributo type fornece o idioma do script ou o formato dos dados. Se o atributo estiver presente, seu valor deverá ser um tipo MIME válido. O parâmetro charset não deve ser especificado. O padrão, usado se o atributo estiver ausente, é "text / javascript".

Mithun Sreedharan
fonte
1
em outras palavras, omitindo que poderia causar erros nos navegadores antigos que não suportam HTML5
Serge
2

você pode estar pensando neste artigo aqui, com a dependência de que os scripts padronizem automaticamente o texto / javascript no HTML5, enquanto os navegadores que não são HTML5 ainda esperam que você defina o tipo especificamente por especificação, mesmo que quase sempre adivinhem o texto / javascript de qualquer maneira. .

FatherStorm
fonte
1

cabe ao navegador interpretar o scriptbloco corretamente com base nos cabeçalhos, acredito, e não no typeatributo. Então, para responder sua pergunta, não, não é necessário para navegadores modernos (estou falando do IE7 +, FF, Webkit). Se você suporta navegadores mais antigos do que isso ... sinto muito por você =)

hellatan
fonte
2
Não se esqueça da China, com mais de 385 milhões de usuários, muitos dos quais ainda usam o IE6. netmarketshare.com/...
chainwork
3
sabendo estrita política de Internet da China, as chances são de seu site nunca pode alcançá-los = P
hellatan
A pergunta é sobre um script embutido, portanto, não há cabeçalhos além da página principal (que seria algum tipo de conteúdo HTML). De qualquer forma, você tem uma fonte indicando que os navegadores levam em consideração os cabeçalhos (por exemplo, se você tiver um <script src = "something"> </script> simples e tiver fornecido um cabeçalho VBScript, existe algum navegador que o interprete como VBScript) ?
Matthew Flaschen
1

Se você está colocando uma tag de script dentro SVG você deve especificar o atributo type. E deveria ser "text/ecmascript"melhor que "text/javascript".

Se o seu script estiver embutido (não vinculado), você precisará envolver o corpo do script em uma declaração CDATA também. O modelo de script em linha para SVG (e outras variantes XML) é, portanto,

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

Esses podem ser casos especiais 'in natura', mas são reais o suficiente e o uso do SVG está aumentando; portanto, é incorreto para qualquer outra pessoa sugerir que o atributo type e o CDATA sejam totalmente obsoletos nos navegadores modernos. Os casos de uso são limitados, sim, mas não são inéditos.

"Mude o ambiente ao contrário e cada sabedoria se torna a pior das loucuras." - Ashby

brennanyoung
fonte
1
Boa decisão. Acabei de trabalhar em algum SVG complexo e esse é realmente o caso!
Dave Everitt
1

The🏻 A especificação HTML5 solicita que os autores omitam o atributo em vez de fornecer um tipo MIME redundante. MDN

O MIME Sniffing Standard permite que o JavaScript seja veiculado usando qualquer tipo de MIME ( Multipurpose Internet Mail Extensions ) que corresponda ao seguinte:

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

<script type="text/javascript"></script>
<script type="text/ecmascript"></script>
Andy Young
fonte
0

Bem, continuo vendo mais exemplos sem o texto / javascript, mas por algum motivo meus scripts não funcionam no FF quando faço isso. Eu recomendaria manter a declaração de texto / javascript. A tag CDATA impede que o javascript seja mostrado como texto sem formatação no seu site se o navegador tiver o javascript desativado. Pessoalmente, eu não uso mais essas tags, acho que não há muitos usuários por aí e se eles estão por aí, eles podem querer crescer alguns cérebros: P

Michael
fonte
Nem o atributo type nem o CDATA antigo são necessários, a menos que você realmente queira direcionar navegadores realmente antigos. Eles não devem machucar nada, no entanto, desde que você realmente use o tipo certo.
Pointy
Estou usando a versão estável mais recente do FF e parece ter problemas para analisar sem a declaração de texto / javascript, eu uso o jQuery btw, mas isso não deve fazer a diferença.
Michael
Bem, eu corro meu aplicativo Web inteiro com tags de script simples <script>, sem "linguagem" e sem "tipo", e elas funcionam bem em todos os navegadores. (Bem, todos os razoáveis: FF, Chrome, Safari, IE, Opera.)
Pointy
1
@pointy parece que o FatherStorm acabou de postar uma resposta sobre o motivo disso estar acontecendo. portanto, seus comentários parecem incorretos.
Michael
@ Michael, pode ser que, se você cometeu o erro de usar o XHTML / Strict, possa ter um problema, mas mesmo assim duvido. Há um consenso geral entre os luminares do mundo JavaScript de que o atributo "type" é desnecessário e, na verdade, como um "type" ruim interrompe um script, é apenas uma fonte de bugs.
Pointy
0

type="text/javascript" : Obrigatório em HTML 4 e XHTML, mas opcional em HTML5.

CDATA : Obrigatório em XHTML.

<!--: Usado para ocultar o JavaScript de navegadores muito antigos. Por exemplo: Netscape 1 e Internet Explorer 2, dos quais ninguém mais usa.

Blesson Jose
fonte