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

时间:2008-12-16 18:11:18

标签: javascript google-api

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

onclick="javascript:myFunction()" 错误

onclick="myFunction()"

今天我在Google {@}}的this article注意到他们正在使用它:

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

此示例是否完全错误,或者是否有理由在javascript:以外的任何内容中指定href

8 个答案:

答案 0 :(得分:45)

这里的一些回复声称“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几乎都在谈论同样的事情。

答案 1 :(得分:7)

它永远不需要锚,永远不是好习惯。锚点仅用于导航。 有关此主题的文章是 The useless JavaScript: pseudo-protocol

答案 2 :(得分:5)

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

今天,它没有受到伤害......将来可能总会有其他一些想要浏览器的脚本语言。

答案 3 :(得分:5)

请参阅 Specifying the scripting language (在 HTML 4.01规范中的18.2.2,脚本中)。

答案 4 :(得分:5)

我一直认为,基于您可以使用javascript:前缀在URL内调用JavaScript,这是不好的用法:

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

Web Forms,某人?)

只有那些从未意识到事件声明和href声明之间存在差异的无知网络开发人员才使用它。

我想说,即使是事件属性在大多数情况下都是不好的做法,并且获取事件的首选方法是使用.attachEvent(Internet Explorer)和addEventListener(其他浏览器,像往常一样)。 / p>

最后......谷歌并不总是全能的上帝。他们往往更关心的是,东西的工作原理不是一直遵循标准。

答案 5 :(得分:2)

我认为“javascript:”前缀是旧时代的遗留物,当时仍然存在模糊的可能性除了JavaScript以外的任何其他可以处理事件。

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

答案 6 :(得分:2)

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

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

答案 7 :(得分:0)

这对您的维护程序员来说是个好习惯。编译器知道差异,但那个年轻的,刚刚离开大学的Web开发人员可能不会。