44 votes

Avez-vous déjà besoin de spécifier 'javascript:' dans un onclick?

Autant que je sache, vous n'avez pas besoin de spécifier le protocole dans un onclick:

onclick="javascript:myFunction()" Mauvais

onclick="myFunction()" Bon

Aujourd'hui, j'ai remarqué dans cet article sur Google Anallytics qu' ils utilisent:

<a href="http://www.example.com" onClick="javascript: pageTracker._trackPageview('/outgoing/example.com');">

Dans cet exemple, tout simplement faux, ou est-il une raison pour spécifier javascript: à rien d'autre qu'un href?

45voto

Ates Goral Points 47670

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.

7voto

I.devries Points 3788

Ce n'est jamais nécessaire sur les ancres et ce n'est jamais une bonne pratique. Une ancre est pour la navigation seulement. Un article sur ce sujet est The inutile JavaScript: pseudo-protocole .

5voto

Loki Points 7801

Voir Spécification du langage de script (dans 18.2.2 de la spécification HTML 4.01 , Scripts ).

5voto

Steven A. Lowe Points 40596

Au début, vous pouviez également utiliser VBScript dans Internet Explorer au lieu de JavaScript. Par conséquent, spécifier "javascript: ..." était la norme.

Aujourd'hui, eh bien, ça ne fait pas de mal ... Il pourrait toujours y avoir un autre langage de script pour les navigateurs Wannabe à l'avenir.

5voto

jishi Points 10442

J'ai toujours cru que c'était une mauvaise utilisation basée sur le fait que vous pouvez appeler JavaScript au sein d'une URL avec l' javascript: préfixe:

<a href="javascript:void(alert('really bad usage!'))">

(Formulaires Web, quelqu'un?).

Et seuls les ignorants web-développeurs qui n'a jamais réalisé la différence entre un événement-déclaration et un href déclaration utilisé.

Je dirais que même événement-les attributs sont les mauvaises pratiques dans la plupart des cas aujourd'hui, et la meilleure façon d'atach un évènement en utilisant .attachEvent (Internet Explorer) et de la méthode addEventListener (le reste des navigateurs, comme d'habitude).

Et enfin... Google n'est pas toujours le DIEU tout-puissant. Ils ont tendance à être plus préoccupant que ça marche, au lieu de suivre les normes de tous les temps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X