Por que os navegadores não geram um erro quando qualquer outra palavra é usada no lugar de 'javascript' no valor de onclick?

100

Herdei um site e acabei de descobrir esta curiosidade:

<a href="/delete"  onClick="jamoscript:return confirm('Do you really want to do that?');">Delete all</a>

Posso exibir a página que o contém e clicar no link para obter a caixa de diálogo de confirmação exatamente como faço quando mudo " jamoscript" para " javascript". Nenhum diagnóstico é exibido no console do Firebug, seja quando a página é carregada ou quando o link é clicado. O que é isso? Pesquisando por jamoscript não encontrou nada de interessante.

Alguém pode explicar esse comportamento?

fuligem
fonte

Respostas:

144

O valor da string de um atributo "onclick" é considerado um código JavaScript simples. JavaScript inclui provisões para instruções rotuladas , de modo que o código seja uma returninstrução com o rótulo "jamoscript". Em outras palavras, este:

jamoscript: return confirm("Do you really want to hurt me?");

é JavaScript perfeitamente legal. As etiquetas não são muito usadas, por isso não são familiares.

O único contexto em que o prefixo "javascript:" importa é quando um URL é esperado, como é o caso com o atributo "href" das <a>tags.

Pontudo
fonte
53
Esta questão está me fazendo realmente desejar que a linguagem se chamasse "JamoScript".
Pointy de
5
Isso me faz lembrar o famoso problema do que o seguinte faz: function foo(a) { x: 2 }.
80
Criei uma conta aqui, só para dizer que essa linha de código (? -Eu não sou programador) foi sem dúvida escrita por um grego, ou pelo menos "jamoscirpt" foi proposta por um grego. "Jamo" é como alguém tentaria usar os sons das letras inglesas para produzir o som que a palavra "f --- ing" tem na língua grega. Portanto, se você tentar ler "jamoscript" em voz alta, uma pessoa grega que conheça a palavra "script" entenderá "script de merda". O efeito pretendido seria mais certo se em vez de "j" a letra "g" fosse usada, mas eu acho que era a intenção de jogar com "j-ava".
Alecos Papadopoulos
6
@AlecosPapadopoulos uau, isso é demais. Na verdade, isso me faz desejar ainda mais que a linguagem fosse realmente chamada de "JamoScript" :)
Pointy
6
@asawyer Agradeço a informação (+1), mas, por favor, não me tente a abandonar minha humilde persona online e voltar à minha verdadeira ...
Alecos Papadopoulos