tiempo - ¿Cuál es el propósito(si existe) de "javascript:" en las etiquetas del controlador de eventos?
ejemplo codigo angular (10)
Últimamente he estado haciendo un esfuerzo conjunto para mejorar mis habilidades de JavaScript leyendo todo el código de JavaScript que puedo. Al hacer esto, a veces he visto el prefijo javascript:
agregado al frente de los atributos del manejador de eventos en etiquetas de elementos HTML. ¿Cuál es el propósito de este prefijo? Básicamente, ¿hay alguna diferencia apreciable entre:
onchange="javascript: myFunction(this)"
y
onchange="myFunction(this)"
?
Básicamente, ¿hay alguna diferencia apreciable entre:
onchange="javascript: myFunction(this)"
yonchange="myFunction(this)"
?
Suponiendo que haya querido decir href="javascript: myFunction(this)"
, sí, especialmente cuando carga contenido usando el javascript. El uso del javascript: pseudo protocolo hace que el contenido sea inaccesible para 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 disponible en el cliente particular.
No debe usarse en controladores de eventos (aunque la mayoría de los navegadores funcionan de forma defensiva y no lo castigarán). También argumentaría que no debería usarse en el atributo href de un ancla. Si un navegador admite javascript, usará el controlador de eventos correctamente definido. Si un navegador no lo hace, un enlace javascript: aparecerá roto. OMI, es mejor señalarles 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 :. Bookmarklets. 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, debe formatearlo de la siguiente manera:
<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>
javascript: en código JS (como en un atributo onclick) es solo una etiqueta para usar con las declaraciones de etiqueta continue / goto que pueden o no ser compatibles con el navegador (probablemente no en cualquier parte). Podría ser zipzambam: en su lugar. Incluso si la etiqueta no se puede utilizar, los navegadores aún la aceptan, por lo que no causa un error.
Esto significa que si alguien arroja una etiqueta inútil en un atributo onclick, probablemente no sepa lo que está haciendo y solo esté copiando y pegando o lo hace por hábito haciendo lo siguiente.
javascript: en el atributo href significa un URI de JavaScript.
Ejemplo :
javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B
Solo 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:
más. De hecho, debe adjuntar el evento javascript de su secuencia de comandos, y no en línea en el marcado. Pero, eso es una cosa purista, creo :-D
Flubba:
Uso de javascript:
en HREF
rompe "Abrir en una ventana nueva" y "Abrir en una pestaña nueva" en Firefox y otros navegadores.
No es "incorrecto", pero si desea que su sitio sea difícil de navegar ...
Los orígenes de javascript:
en un controlador de eventos es en realidad solo un elemento específico de IE para que pueda especificar el idioma además del controlador. Esto se debe a que vbscript
también es un lenguaje de scripts compatible con el cliente en IE. Aquí hay 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 usar en enlaces para ejecutar código de JavaScript como señala DannySmurf.
No sé si el prefijo javascript:
significa algo dentro de los atributos de onevent
pero sé que son molestos en las etiquetas de anclaje al intentar abrir el enlace en una nueva pestaña. El href
debe utilizar como un respaldo y nunca para adjuntar javascript a los enlaces.
No soy una autoridad en JavaScript, y tal vez más tonta que el asker, pero AFAIK, la diferencia es que el prefijo javascript:
es preferido / requerido en contextos URI, donde el argumento puede ser también una URL HTTP tradicional como Activador de JavaScript.
Por lo tanto, mi respuesta intuitiva sería que, dado que onChange
espera JavaScript, el prefijo javascript:
es redundante (si no francamente erróneo). Sin embargo, puede escribir javascript:myFunction(this)
en su barra de direcciones, y esa función se ejecutará. Sin javascript:
su navegador intentará interpretar myFunction(this)
como una URL e intentará buscar la información de DNS, navegar a ese servidor, etc.
Probablemente nada en tu ejemplo. Mi entendimiento es que javascript:
es para etiquetas de anclaje (en lugar de un href
real). Lo usaría para que la secuencia de comandos se pueda ejecutar cuando el usuario haga clic en el vínculo, pero sin iniciar una navegación de regreso a la página (lo que hará un href
blanco junto con un onclick
).
Por ejemplo:
<a href="javascript:someFunction();">Blah</a>
Más bien que:
<a href="" onclick="someFunction();">Blah</a>
Eso es ridículo.
No, no es ridículo, javascript: es un pseudo protocolo que solo puede usarse como sujeto de un enlace, por lo que tiene toda la razón. Su sugerencia es de hecho mejor, pero la mejor manera de hacerlo es utilizar técnicas de JavaScript discretas para iterar sobre elementos HTML y agregar comportamiento mediante programación, tal como se usa en bibliotecas como jQuery.