2008-08-22 10 views
16

He estado haciendo un esfuerzo concertado para mejorar mis habilidades de JavaScript últimamente al leer 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 controlador de eventos en etiquetas de elementos HTML. ¿Cuál es el propósito de este prefijo? Básicamente, ¿hay alguna diferencia apreciable entre:¿Cuál es el propósito (si existe) de "javascript:" en las etiquetas del controlador de eventos?

onchange="javascript: myFunction(this)" 

y

onchange="myFunction(this)" 

?

Respuesta

18

Probablemente nada en su ejemplo. Según entiendo, javascript: es para etiquetas de ancla (en lugar de href). Lo usaría para que la secuencia de comandos se pueda ejecutar cuando el usuario haga clic en el enlace, pero sin iniciar una navegación de regreso a la página (lo que hará un href en blanco junto con un onclick).

Por ejemplo:

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

En lugar de:

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

soy ninguna autoridad en JavaScript, y tal vez más de un burro que el autor de la pregunta, pero que yo sepa, la diferencia es que el javascript: el prefijo es preferido/requerido en contextos de URI, donde el argumento puede ser también una URL de HTTP tradicional como un desencadenador 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 la javascript:, su navegador trataría de interpretar myFunction(this) como una dirección URL y trata de obtener la información de DNS, vaya a ese servidor, etc ...

1

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

4

Solo debe utilizarse en la etiqueta href.

Eso es ridículo.

La forma más aceptada es la siguiente:

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

Pero para responder a la OP, en general hay ninguna razón para utilizar 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 algo purista, creo :-D

12

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. Por lo tanto, 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, éste le envía a Google Reader para ver los canales 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 añadir fácilmente este bookmarklet, que le 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> 
1

Javascript : en el 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 usar, 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 haciendo por costumbre hacerlo a continuación.

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

Example:

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

@mercutio

Eso es ridículo.

No, no es ridícula, javascript: es un protocolo de pseudo única que puede de hecho ser utilizado como el tema de un enlace, por lo que es del todo correcto. 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.

0

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

Suponiendo que quería decir href="javascript: myFunction(this)", sí existe, especialmente cuando se carga de contenido utilizando 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.

1

Los orígenes de javascript: en un controlador de eventos son en realidad solo algo específico de IE, por lo que puede especificar el idioma además del manejador. Esto se debe a que vbscript también es un lenguaje de scripting del lado del cliente compatible en IE. Aquí hay un ejemplo de "vbscript:".

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

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

0

Flubba:

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

No es "incorrecto", pero si desea que su sitio sea difícil de navegar ...

Cuestiones relacionadas