¿Cuál es el propósito (si lo hay) de "javascript:" en las etiquetas del controlador de eventos?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

Últimamente he estado haciendo un esfuerzo concertado para mejorar mis habilidades con JavaScript leyendo todo el código JavaScript que pueda.Al hacer esto, a veces he visto el javascript: prefijo agregado al frente de los atributos del controlador de eventos en las etiquetas de elementos HTML.¿Cuál es el propósito de este prefijo?Básicamente, ¿existe alguna diferencia apreciable entre:

onchange="javascript: myFunction(this)"

y

onchange="myFunction(this)"

?

¿Fue útil?

Solución

Probablemente nada en tu ejemplo.Mi entendimiento es que javascript: es para etiquetas de anclaje (en lugar de una etiqueta real href).Lo usaría para que su secuencia de comandos pueda ejecutarse cuando el usuario haga clic en el enlace, pero sin iniciar una navegación de regreso a la página (que aparece en blanco). href junto con un onclick servirá).

Por ejemplo:

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

En vez de:

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

Otros consejos

No debe usarse en controladores de eventos (aunque la mayoría de los navegadores funcionan a la defensiva y no lo castigarán).También diría que no debería usarse en el atributo href de un ancla.Si un navegador admite javascript, utilizará el controlador de eventos definido correctamente.Si un navegador no lo hace, un javascript:El enlace aparecerá roto.En mi opinión, es mejor indicarles una página que explique que necesitan habilitar JavaScript para usar esa funcionalidad, o mejor aún, una versión de la funcionalidad que no requiera JavaScript.Entonces, algo como:

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

Editar:Pensé en una buena razón para usar javascript:.Marcadores.Por ejemplo, este te envía a Google Reader para ver los feeds RSS de una 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 un usuario agregue fácilmente este Bookmarklet, deberá formatearlo así:

<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>

Sólo debe usarse en la etiqueta href.

Eso es ridículo.

La forma aceptada es esta:

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

Pero para responder al OP, generalmente no hay razón para usar javascript: ya no.De hecho, debe adjuntar el evento de JavaScript desde su secuencia de comandos y no incluirlo en el marcado.Pero creo que eso es algo purista :-D

Los orígenes de javascript: en un controlador de eventos es en realidad algo específico de IE, por lo que puede especificar el idioma además del controlador.Esto es porque vbscript También es un lenguaje de secuencias de comandos del lado del cliente compatible con IE.He aquí un ejemplo de "vbscript:".

En otros navegadores (como ha dicho Shadow2531) javascript: es solo una etiqueta y básicamente se ignora.

href="javascript:..." se puede utilizar en enlaces para ejecutar código javascript como señala DannySmurf.

javascript:en el código JS (como en un atributo onclick) es solo una etiqueta para usar con declaraciones de etiqueta continuar/ir a que pueden o no ser compatibles con el navegador (probablemente no en ningún otro lugar).Podría ser zipzambam:en cambio.Incluso si la etiqueta no se puede utilizar, los navegadores la aceptan para que no cause un error.

Esto significa que si alguien coloca una etiqueta inútil en un atributo onclick, probablemente no sepa lo que está haciendo y simplemente esté copiando y pegando o haciéndolo por costumbre de lo siguiente.

javascript:en el atributo href significa un URI de Javascript.

Ejemplo:

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

No soy una autoridad en JavaScript, y quizás sea más tonto que el autor de la pregunta, pero AFAIK, la diferencia es que el javascript: El prefijo es preferido/obligatorio en contextos URI, donde el argumento puede ser tanto una URL HTTP tradicional como un activador de JavaScript.

Entonces, mi respuesta intuitiva sería que, dado que onChange espera JavaScript, el javascript: El prefijo es redundante (si no completamente erróneo).Sin embargo, puedes escribir javascript:myFunction(this) en su barra de direcciones, y esa función se ejecuta.Sin el javascript:, su navegador intentará interpretar myFunction(this) como URL e intenta obtener la información DNS, navegar hasta ese servidor, etc.

@mercucio

Eso es ridículo.

No, no es ridículo, javascript:es un pseudoprotocolo que de hecho sólo puede usarse como sujeto de un enlace, por lo que tiene toda la razón.Su sugerencia es realmente mejor, pero la mejor manera de todas es utilizar técnicas de JavaScript discretas para iterar sobre elementos HTML y agregar comportamiento mediante programación, como se usa en bibliotecas como jQuery.

Básicamente, ¿existe alguna diferencia apreciable entre: onchange="javascript: myFunction(this)" y onchange="myFunction(this)" ?

Suponiendo que quisiste decir href="javascript: myFunction(this)", sí lo hay, especialmente cuando se carga contenido usando javascript.Usando javascript:El pseudoprotocolo hace que el contenido sea inaccesible para algunos humanos y todos los motores de búsqueda, mientras que usar un href real y luego cambiar el comportamiento del enlace usando javascript hace que el contenido sea accesible si javascript está desactivado o no está disponible en el cliente en particular.

Fluba:

Uso de javascript: en HREF rompe "Abrir en una ventana nueva" y "Abrir en una pestaña nueva" en Firefox y otros navegadores.

No está "mal", pero si desea que su sitio sea difícil de navegar...

No sé si el javascript: prefijo significa cualquier cosa dentro del onevent atributos, pero sé que son molestos en las etiquetas de anclaje cuando intento abrir el enlace en una nueva pestaña.El href debe usarse como respaldo y nunca para adjuntar javascript a los enlaces.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top