Qual é o propósito (se houver) de “javascript:” nas tags do manipulador de eventos?

StackOverflow https://stackoverflow.com/questions/23217

  •  09-06-2019
  •  | 
  •  

Pergunta

Ultimamente, tenho feito um esforço conjunto para melhorar minhas habilidades em javascript, lendo o máximo de código javascript que posso.Ao fazer isso, às vezes vejo o javascript: prefixo anexado à frente dos atributos do manipulador de eventos em tags de elementos HTML.Qual é o propósito deste prefixo?Basicamente, existe alguma diferença apreciável entre:

onchange="javascript: myFunction(this)"

e

onchange="myFunction(this)"

?

Foi útil?

Solução

Provavelmente nada no seu exemplo.Meu entendimento é que javascript: é para tags âncora (no lugar de um real href).Você o usaria para que seu script pudesse ser executado quando o usuário clicar no link, mas sem iniciar uma navegação de volta à página (que é um espaço em branco href juntamente com um onclick vai fazer).

Por exemplo:

<a href="javascript:someFunction();">Blah</a>

Em vez de:

<a href="" onclick="someFunction();">Blah</a>

Outras dicas

Não deve ser usado em manipuladores de eventos (embora a maioria dos navegadores trabalhe defensivamente e não irá puni-lo).Eu também argumentaria que não deveria ser usado no atributo href de uma âncora.Se um navegador suportar javascript, ele usará o manipulador de eventos definido corretamente.Se um navegador não funcionar, um javascript:o link aparecerá quebrado.IMO, é melhor encaminhá-los para uma página explicando que eles precisam habilitar o javascript para usar essa funcionalidade, ou melhor ainda, uma versão da funcionalidade necessária que não seja javascript.Então, algo como:

<a href="non-ajax.html" onclick="niftyAjax(); return false;">Ajax me</a>

Editar:Pensei em um bom motivo para usar javascript:.Marcadores.Por exemplo, este envia você ao Google Reader para visualizar os feeds RSS de uma página:

var b=document.body;
if(b&&!document.xmlVersion){
  void(z=document.createElement('script'));
  void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js');
  void(b.appendChild(z));
}else{
  location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href)
}

Para que um usuário adicione facilmente este Bookmarklet, você deve formatá-lo assim:

<a href="javascript:var%20b=document.body;if(b&&!document.xmlVersion){void(z=document.createElement('script'));void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js');void(b.appendChild(z));}else{location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href)}">Drag this to your bookmarks, or right click and bookmark it!</a>

Deve ser usado apenas na tag href.

Isso é ridículo.

A forma aceita é esta:

<a href="/non-js-version/" onclick="someFunction(); return false">Blah</a>

Mas para responder ao OP, geralmente não há razão para usar javascript: não mais.Na verdade, você deve anexar o evento javascript do seu script, e não inline na marcação.Mas isso é uma coisa purista, eu acho :-D

As origens de javascript: em um manipulador de eventos é, na verdade, apenas uma coisa específica do IE, para que você possa especificar o idioma além do manipulador.Isto é porque vbscript também é uma linguagem de script do lado do cliente suportada no IE.Aqui está um exemplo de "vbscript:".

Em outros navegadores (como foi dito por Shadow2531) javascript: é apenas um rótulo e é basicamente ignorado.

href="javascript:..." pode ser usado em links para executar código javascript, como aponta DannySmurf.

javascript:no código JS (como em um atributo onclick) é apenas um rótulo para uso com instruções de rótulo continue/goto que podem ou não ser suportadas pelo navegador (provavelmente em nenhum lugar).Poderia ser zipzambam:em vez de.Mesmo que o rótulo não possa ser usado, os navegadores ainda o aceitam, portanto não causa erro.

Isso significa que se alguém estiver jogando um rótulo inútil em um atributo onclick, provavelmente não sabe o que está fazendo e está apenas copiando e colando ou fazendo isso por hábito de fazer o que está abaixo.

javascript:no atributo href significa um URI Javascript.

Exemplo:

javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B

Não sou autoridade em JavaScript e talvez seja mais burro do que quem pergunta, mas AFAIK, a diferença é que o javascript: prefixo é preferido/obrigatório em contextos de URI, onde o argumento pode ser tanto uma URL HTTP tradicional quanto um gatilho JavaScript.

Então, minha resposta intuitiva seria que, já que onChange espera JavaScript, o javascript: prefixo é redundante (se não totalmente errôneo).Você pode, no entanto, escrever javascript:myFunction(this) na sua barra de endereço e essa função é executada.Sem o javascript:, seu navegador tentaria interpretar myFunction(this) como uma URL e tenta buscar as informações de DNS, navegar até esse servidor, etc.

@mercutio

Isso é ridículo.

Não, não é ridículo, javascript:é um pseudoprotocolo que só pode ser usado como objeto de um link, então ele está certo.Sua sugestão é realmente melhor, mas a melhor maneira de todas é usar técnicas de javascript discretas para iterar elementos HTML e adicionar comportamento programaticamente, conforme usado em bibliotecas como jQuery.

Basicamente, existe alguma diferença apreciável entre: onchange="javascript: myFunction(this)" e onchange="myFunction(this)" ?

Supondo que você quis dizer href="javascript: myFunction(this)", sim, existe, especialmente ao carregar conteúdo usando javascript.Usando o javascript:O pseudoprotocolo torna o conteúdo inacessível para alguns humanos e todos os mecanismos de pesquisa, enquanto usar um href real e depois alterar o comportamento do link usando javascript torna o conteúdo acessível se o javascript estiver desativado ou não disponível no cliente específico.

Flubba:

Uso de javascript: em HREF quebra "Abrir em nova janela" e "Abrir em nova guia" no Firefox e em outros navegadores.

Não é "errado", mas se você quiser dificultar a navegação no seu site...

Eu não sei se o javascript: prefixo significa qualquer coisa dentro do onevent atributos, mas sei que eles são irritantes nas tags âncora ao tentar abrir o link em uma nova guia.O href deve ser usado como uma alternativa e nunca para anexar javascript aos links.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top