Quando preciso especificar o protocolo JavaScript?
-
22-09-2019 - |
Pergunta
Eu estava sob a impressão de que eu só precisa especificar o "protocolo" quando utilizar JavaScript em URL atributos, tais como em hrefs.Este é o único "útil" de contexto para javascript:
?
Sensível:
<a href="javascript:alert('Hello')">World!</a>
Bobo:
<form onsubmit="javascript:alert('oops!')">
Isso é correto?Ou existe algum obscuro bug/caso de uso eu preciso estar ciente?
Solução
o javascript:
O pseudo-protocolo nos manipuladores de eventos será ignorado apenas, você não precisa dele, o mecanismo JavaScript interpretará javascript:
como um Declaração de etiqueta.
Um rótulo simplesmente fornece um identificador para uma declaração e permite que você se refira a ele em outro lugar do seu programa.
IMHO, este pseudo-protocolo é útil apenas para marcadores de marcadores ...
Artigo recomendado:
Outras dicas
Como outras respostas já mencionados, evitar o uso de javascript:
href links, e é totalmente desnecessária no manipulador de eventos atributos.No entanto, desde A
tags são, por vezes, ainda semanticamente correto, você terá que colocar algo no href
atributo se você deseja que sua :link
e :hover
Os estilos CSS para ser aplicada ao elemento no Internet Explorer.Neste caso, use:
<a href="#" onclick="doSomething(); return false;">Link</a>
Ou
<a href="javascript://" onclick="doSomething();">Link</a>
Há um (um tanto obscuro) erro com o javascript protocolo - no Internet Explorer*, ele vai pensar que você sair da página quando você clica no link.Se você estiver usando o janela.onbeforeunload, e , em seguida, sua navegar fora mensagem será exibida no momento.Só por este motivo, nós parei de usar o javascript protocolo completamente então não temos esse bug mostrar até porque nós esqueceu-se de verificar para quando temos de adicionar uma navegar fora mensagem para alguns de página.
* Eu, provavelmente, deve ter especificada a versão quando eu escrevi isso.Eu não lembro de todos, mas apenas no caso de o erro está presente apenas em um agora-principalmente extinta navegador, como o internet explorer 6 ou 7, você está provavelmente melhor para testá-lo você mesmo.
Não especifique nada, nunca. É errado fazer isso em <a>
Tags, que devem ser codificadas assim:
<a href='#' onclick='alert("Hello")'>World</a>
É um remanescente dos dias passados. A única vez em que consigo pensar em onde é usada seria na barra de endereços do navegador (e marcadores de Bookmarklet). Mantenha -o fora de suas páginas.
Na prática, você está correto.
Você precisa fazer isso em qualquer caso em que algo diferente do script seja esperado. Em teoria, você pode ficar javascript:whatever
Em qualquer lugar que você possa usar um URL, mas isso nunca foi suportado e agora é oficialmente recomendado contra o uso.
No entanto, você realmente não deveria usar javascript:
de forma alguma. Para links, você pode usar o onclick
atributo. O que está realmente acontecendo hoje em dia é o mecanismo JavaScript está identificando javascript:
Como rótulo, e é por isso que o código é executado.
Todos vocês devem conferirhttp://bytes.com/topic/javascript/answers/504856-javascript-pseudo-protocol-event-handlersEspecialmente o post de "Lasse Reichstein Nielsen", porque a maioria das respostas aqui está incorreta de alguma maneira.
Lembre -se também de que a tag de âncora não requer um href! Aquilo é<a>hi</a>
é válido xhtml. O problema usando href="#"
é que ele pode rolar para o topo da página. Simplesmente não é necessário. Por fim, se você realmente não deseja o comportamento da tag de âncora, não deve usá -lo. Você pode simular uma âncora usando CSS (cursor:pointer
) e eventos como MouseEnter e Mouseleable (que são mais trabalhos, mas não "quebram" o comportamento esperado de uma etiqueta de âncora).