你是否需要在onclick中指定“javascript:”?

AFAIK,你永远不需要在onclick中指定协议:

onclick="javascript:myFunction()" 不好

onclick="myFunction()"

今天我在Google Analtics的这篇文章中注意到他们正在使用它:

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

这个例子只是错误的,或者是否有任何理由指定javascript:除了href之外的任何东西?

这里的一些回应声称“javascript:”前缀是“过去的剩余”,暗示它是故意的,特别是由浏览器处理以实现向后兼容。 是否有确凿的证据表明这是事实(有人检查过源代码)?

 <span onclick="javascript:alert(42)">Test</span> 

对我来说,这只是:

 javascript: alert(42); 

这意味着,“javascript:”只是一个标签,没有任何作用。 这也适用于:

 <span onclick="foobar:alert(42)">Test</span> 

更新:

我做了一个小实验,事实certificate,是的,“javascript:”是由IE专门处理的,但绝对不是Firefox,Safari,Opera或者Chrome。

 <span onclick="javascript:while (true) { alert('once'); break javascript; }">Test</span> 

在非IE浏览器上,这只会提醒“一次”,一次然后跳出循环。 在IE浏览器,我得到一个“标签找不到”的错误。 以下在所有浏览器中都可以正常工作:

 <span onclick="foo:while (true) { alert('once'); break foo; }">Test</span> 

更新2:

上面的答案之一,我刚刚意识到链接http://crisp.tweakblogs.net/blog/the-useless-javascript-pseudo-protocol.html几乎谈论同样的事情。;

这是从来没有需要的锚点,是从来没有好的做法。 锚仅用于导航。 关于这个主题的文章是无用的JavaScript:伪协议

请参阅指定脚本语言 (在HTML 4.01规范脚本的 18.2.2中)。

一开始,你也可以在Internet Explorer中使用VBScript而不是JavaScript,所以指定“javascript:…”是标准的。

今天,好吧,它并没有受到伤害…未来总会有一些其他的浏览器脚本语言。

我始终认为这是一个糟糕的用法,因为您可以使用javascript:前缀在URL中调用JavaScript:

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

( Web表单 ,有人?)

而且,只有那些从来没有意识到事件声明和href声明之间的区别的无知networking开发者使用了它。

我想说,现在在大多数情况下,甚至事件属性也是不好的做法,并且使用.attachEvent(Internet Explorer)和addEventListener(其他浏览器像往常一样)来处理事件。

最后…谷歌并不总是上帝全能的。 他们往往更关心的东西,而不是遵循标准的所有时间。

我认为“JavaScript:”前缀是一个剩余的时间,当时还存在JavaScript以外的其他任何东西都可能处理这个事件的模糊的可能性。

今天它是可选的,并保持向后兼容的原因。 但我不会说这是的,只是没有必要。

在Internet Explorer中,可以将页面的默认语言设置为VBScript 。 在早期,总有这样的想法,即另一种语言可能被用于浏览器中的脚本。 事实certificate,这种语言没有实质性的forms。

我自己也不打扰这个语言的前缀。

对于维护程序员来说这是一个很好的做法。 编译器知道其中的差异,但那个年轻的,刚从校外开发的Web开发者可能不会。