46

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

onclick="javascript:myFunction()" 坏的

onclick="myFunction()" 好的

今天我在这篇关于谷歌分析的文章中注意到他们正在使用它:

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

这个例子是完全错误的,还是有理由javascript:在 a 以外的任何地方指定href

4

8 回答 8

49

这里的一些回复声称“javascript:”前缀是“从旧时代遗留下来的”,暗示它是故意的,由浏览器专门处理以实现向后兼容性。是否有确凿的证据表明情况如此(有没有人检查过源代码)?

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

对我来说,这只是读作:

javascript:
    alert(42);

意思是,“javascript:”只是一个标签,没有任何作用。这也有效:

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

更新:

我做了一个小实验,结果证明,是的,“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几乎谈到了同样的事情。

于 2008-12-16T18:53:36.157 回答
8

锚上从来不需要它,也不是好的做法。锚点仅用于导航。关于这个主题的一篇文章是The useless JavaScript: pseudo-protocol

于 2008-12-16T18:22:06.467 回答
6

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

今天,好吧,它并没有什么坏处……将来总会有其他一些想要成为浏览器脚本语言的东西。

于 2008-12-16T18:22:54.110 回答
5

我一直认为这是不好的用法,因为您可以在带有前缀的URL中调用 JavaScript:javascript:

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

网络表单,有人吗?)

只有无知的 Web 开发人员从未意识到事件声明和 href 声明之间的区别才会使用它。

我想说的是,在当今大多数情况下,即使是事件属性也是不好的做法,附加事件的首选方法是使用 .attachEvent (Internet Explorer)和 addEventListener (其余的浏览器,像往常一样)。

最后......谷歌并不总是全能的上帝。他们往往更关心东西是否有效,而不是一直遵循标准。

于 2008-12-16T18:43:39.950 回答
3

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

于 2008-12-16T18:28:16.953 回答
2

我认为“javascript:”前缀是过去遗留下来的,当时仍然存在一种模糊的可能性,即除了 JavaScript 之外的任何东西都可以处理该事件。

今天它是可选的并且出于向后兼容性的原因而保留。但我不会说这很糟糕,这只是不必要的。

于 2008-12-16T18:20:25.177 回答
2

在 Internet Explorer 中,可以将页面的默认语言设置为VBScript。在早期,人们总是认为另一种语言可以用于在浏览器中编写脚本。事实证明,没有这样的语言以实质形式实现。

我自己并不关心这种语言前缀。

于 2008-12-16T18:22:54.657 回答
0

对于您的维护程序员来说,这是一个很好的做法。编译器知道其中的区别,但那个年轻、刚毕业的 Web 开发人员可能不知道。

于 2008-12-16T18:16:58.180 回答