javascript:method()和普通的method()有什么区别?

4
我在JavaScript中遇到了以下语法
<img style="padding-left:8px;" id="testIcon" align="middle" src="/images/test.png" onclick="javascript:testMethod()"/>

我想知道以上和以下之间的区别,这与IT技术有关。
<img style="padding-left:8px;" id="testIcon" align="middle" src="/images/test.png" onclick="testMethod()"/>

4
我猜之所以有前面的语法是因为一些浏览器支持除JavaScript之外的脚本语言。例如,IE支持VBScript。 - user3553031
@nix,您的评论似乎是一个答案。 - philippe lhardy
1
离题:使用内联事件监听器是一种不好的做法。最好使用JS添加监听器。 - Oriol
2个回答

4

伪协议javascript的使用源于它曾被用在锚点标签的href属性中:

<a href="javascript:doSomething()">Click me</a>

在上下文中,javascript: 伪协议向浏览器提供了一个提示,表明这是一个要运行的函数,而不是要解析的地址。
在你提出的问题的那个上下文中:
<img src="images/test.png" onclick="javascript:testMethod()"/>

它什么也不做。

javascript:被视为标签(JavaScript语言中鲜为人知的部分),是无害的。由于浏览器知道onclick调用一个脚本,因此不需要任何特殊的操作。


至少在href属性的上下文中,“javascript:something”是一个JavaScript URI。 “javascript:”是URI方案,而不是JavaScript语言内的某种标签。 - user3553031
正确,@nix,这就是为什么我使用了“伪协议”这个术语,因为没有官方的“javascript:”协议。 - Jeremy J Starcher
同样的代码在两个属性中都能工作,这真是个令人高兴的巧合。我不确定这是语言特性(标签)还是对糟糕开发者行为的编码保护。 - Brian Nickel
@BrianNickel 我会将其归因于"模仿热"编程。某人在某处看到它被做了,然后只是盲目地复制,不明白为什么或它的作用。可惜,JavaScript 遭受了很多这种情况。 - Jeremy J Starcher

3

我猜测前一种语法是可用的,因为一些浏览器支持除JavaScript之外的脚本语言。例如,IE支持VBScript。如果您有一个页面包含同名的JavaScript和VBScript函数,您可能会使用该语法来消除歧义。


好的,谢谢回复。这方面有文档吗? - Aniket Thakur
我查看了HTML 4.01和5规范,没有发现关于javascript: URI或类似事件处理程序中的内容。可能是我错过了什么,或者这是一些浏览器非标准的行为。 - user3553031

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接