Certaines des réponses ici prétendent que le "javascript:" préfixe est un "vestige de l'ancien des jours", ce qui implique que c'est intentionnellement, spécialement traitées par les navigateurs pour des raisons de compatibilité ascendante. Est-il des preuves solides que c'est le cas (quelqu'un a vérifié le code source)?
<span onclick="javascript:alert(42)">Test</span>
Pour moi, il se contente de lire que:
javascript:
alert(42);
Sens, que "javascript:" est juste une étiquette et n'a aucun effet. Cela fonctionne aussi:
<span onclick="foobar:alert(42)">Test</span>
Mise à jour:
J'ai fait un peu d'expérience et il s'avère que, oui, "javascript:" est traitée spécialement par IE, mais certainement pas par Firefox, Safari, Opera ou Chrome:
<span onclick="javascript:while (true) { alert('once'); break javascript; }">Test</span>
Sur la non-IE, ce sera juste une alerte "une fois", une fois et puis sortir de la boucle. Sur IE, j'obtiens un "Label pas trouvé d'erreur". Le suivant fonctionne très bien dans tous les navigateurs:
<span onclick="foo:while (true) { alert('once'); break foo; }">Test</span>
Mise à jour 2:
Je viens de réaliser le lien http://crisp.tweakblogs.net/blog/the-useless-javascript-pseudo-protocol.html dans l'une des réponses ci-dessus assez beaucoup parle de la même chose.