validator online code javascript correctness

online - ¿Cuándo debo especificar el protocolo de JavaScript?



jslint npm (5)

Como han mencionado otras respuestas, evite el uso de enlaces javascript: href, y es completamente innecesario en los atributos del controlador de eventos. Sin embargo, dado que las etiquetas A veces son semánticamente correctas, tendrá que poner algo en el atributo href si desea que su :link y :hover CSS styles se apliquen al elemento en Internet Explorer. En este caso, use:

<a href="#" onclick="doSomething(); return false;">Link</a>

O

<a href="javascript://" onclick="doSomething();">Link</a>

Hay un error (algo oscuro) con el protocolo javascript : en Internet Explorer *, pensará que está saliendo de la página cuando haga clic en el enlace. Si está usando window.onbeforeunload , su mensaje de navegación aparecerá en este momento. Solo por esta razón, hemos dejado de usar completamente el protocolo javascript , por lo que no tenemos este error porque nos olvidamos de verificarlo cuando agregamos un mensaje de navegación a alguna página.

* Probablemente debería haber especificado la versión cuando escribí esto por primera vez. No lo recuerdo para nada, pero solo en caso de que el error esté presente solo en un navegador que ya no funciona, como IE 6 o 7, probablemente sea mejor que lo pruebes tú mismo.

Tenía la impresión de que solo tenía que especificar el "protocolo" al usar JavaScript en los atributos de URL, como en hrefs. ¿Es este el único contexto "útil" para javascript: :?

Sensato:

<a href="javascript:alert(''Hello'')">World!</a>

Tonto:

<form onsubmit="javascript:alert(''oops!'')">

¿Es esto correcto? ¿O hay algún caso de error / uso oscuro que debo tener en cuenta?


Deberías echar un vistazo a http://bytes.com/topic/javascript/answers/504856-javascript-pseudo-protocol-event-handlers Especialmente la publicación de "Lasse Reichstein Nielsen", porque la mayoría de las respuestas están aquí son incorrectas de alguna manera .

¡También recuerde que la etiqueta de anclaje no requiere un href en absoluto! Eso es <a>hi</a> es válido xhtml. El problema al utilizar href="#" es que puede desplazarse hacia la parte superior de la página ... simplemente no es necesario. Por último, si no desea realmente el comportamiento de la etiqueta de anclaje, no debería usarla. Puede simular un ancla utilizando css ( cursor:pointer ) y eventos como mouseenter y mouseleave (que es más trabajo, pero no "rompe" el comportamiento esperado de una etiqueta de anclaje).


El javascript: pseudo-protocolo en los controladores de eventos solo se ignorará, no lo necesita, el motor de JavaScript interpretará javascript: como una declaración de etiqueta .

Una etiqueta simplemente proporciona un identificador a una declaración y le permite consultarla en otro lugar de su programa.

En mi humilde opinión, este pseudo protocolo solo es útil para bookmarklets ...

Artículo recomendado:


En la práctica, tienes razón.

Debe hacer esto en cualquier instancia donde se espere algo que no sea script. En teoría, puedes pegar javascript:whatever que javascript:whatever donde javascript:whatever que puedas usar una URL, pero esto nunca fue admitido y ahora se recomienda oficialmente que no se use.

Sin embargo , realmente no deberías usar javascript: en absoluto. Para enlaces, puede usar el atributo onclick . Lo que está sucediendo hoy en día es que el motor JavaScript identifica javascript: como una etiqueta, que es la razón por la que se ejecuta el código.


No lo especifique en absoluto, nunca. Está mal hacerlo en las etiquetas <a> , que en cambio deberían codificarse así:

<a href=''#'' onclick=''alert("Hello")''>World</a>

Es un remanente de días pasados. La única vez que puedo pensar en dónde se usa sería en la barra de direcciones del navegador (y marcadores bookmarklet). Manténgalo fuera de sus páginas.