Você sempre precisa especificar 'javascript:' em um onclick?
-
21-08-2019 - |
Pergunta
AFAIK, você nunca precisa especificar o protocolo em um onclick:
onclick="javascript:myFunction()"
Bad
onclick="myFunction()"
Bom
Hoje eu notei em este artigo no Google Anallytics que que estão usando-o:
<a href="http://www.example.com" onClick="javascript: pageTracker._trackPageview('/outgoing/example.com');">
É este exemplo apenas errado liso, ou há sempre uma razão para especificar javascript:
em outra coisa senão um href
?
Solução
Algumas das respostas aqui afirmar que o "javascript:" prefixo é um "restos dos velhos tempos", o que implica que é intencionalmente, especialmente manipulados pelos navegadores para compatibilidade com versões anteriores. Existe evidência sólida de que este é o caso (ninguém tem verificado código fonte)? ??
<span onclick="javascript:alert(42)">Test</span>
Para mim, isso apenas lê como:
javascript:
alert(42);
Ou seja, que "javascript:" é apenas um rótulo e não tem efeito. Isso funciona, também:
<span onclick="foobar:alert(42)">Test</span>
Update:
Eu fiz uma pequena experiência e verifica-se que, sim, "javascript:" é tratado especialmente pelo IE, mas definitivamente não por isso, Firefox, Safari, Opera ou Chrome:
<span onclick="javascript:while (true) { alert('once'); break javascript; }">Test</span>
Em não-IE, isso vai apenas alerta "uma vez", uma vez e, em seguida, sair do loop. No IE, eu recebo um erro de "etiqueta não encontrado". A seguir funciona bem em todos os navegadores:
<span onclick="foo:while (true) { alert('once'); break foo; }">Test</span>
Update 2:
Eu só percebi o link http: //crisp.tweakblogs .net / blog / the-inútil-javascript-pseudo-protocol.html em uma das respostas acima praticamente fala sobre a mesma coisa.
Outras dicas
Nunca necessário em âncoras e nunca é uma boa prática. Uma âncora é somente para navegação. Um artigo sobre este tema é O inútil JavaScript: pseudo -protocol .
No começo, você também pode usar VBScript no Internet Explorer em vez de JavaScript, por isso, especificando "javascript: ..." era padrão
.Hoje, bem, não faz mal ... Há sempre poderia haver alguma outra linguagem de script navegador wannabe no futuro.
Veja Especificando a linguagem de script (em 18.2.2 no HTML 4.01 Specification , Scripts ).
Eu sempre acreditei que era mau uso baseado no fato de que você pode chamar JavaScript dentro de um URL com o prefixo javascript:
:
<a href="javascript:void(alert('really bad usage!'))">
( Web Forms , alguém?)
e só ignorantes desenvolvedores web que nunca percebi a diferença entre um evento de declaração e a href-declaração-lo usado.
Eu diria que até mesmo eventos-atributos são má prática na maioria dos casos hoje em dia, e a forma preferida de Atach um evento é usando .attachEvent (Internet Explorer) e addEventListener (o resto dos navegadores, como de costume).
E finalmente ... Google nem sempre é Deus Todo-Poderoso. Eles tendem a ser mais preocupante que a coisa funciona em vez de seguir padrões o tempo todo.
Eu acho que o "javascript:". Prefixo é uma sobra dos dias do olde, quando ainda havia a vaga possibilidade de que qualquer outra coisa do que JavaScript pode ser manipular o evento
Hoje é opcional e mantido por razões de compatibilidade para trás. Mas eu não diria que é mau , como tal, é apenas desnecessário.
No Internet Explorer, é possível definir o conjunto de idioma padrão para VBScript para uma página. Nos primeiros dias havia sempre a ideia de que uma outra língua pode ser usado para scripting em um navegador. Como já acabou, não esse tipo de linguagem se materializou em forma substancial.
eu não me incomodo com essa linguagem me prefixo.
É uma boa prática para o seu programador de manutenção. O compilador sabe a diferença, mas que o jovem, recém-out-of-faculdade desenvolvedor web pode não ser.