在代码中,“javascript:”有什么作用(不是URL)?

83

我偶然发现了一件我以前从未见过的奇怪事情:

javascript:a=a+10;

上面的代码看起来是正确的,并且能够正常运行(至少在Firefox中),就像javascript:部分从未存在一样。

虽然我理解旧时代DHTML中使用的旧式<a href=".."/>格式的javascript:void(...)的用途,但我仍然无法想象这个前缀在普通JavaScript代码中有任何有用的用途。

它有特殊含义吗?


8
我不能代表每个人,但我从未在普通的JS代码中看到过这种写法。你能给一个例子吗?(它很可能是有效的,但不应该有任何影响,所以我想知道你在哪里看到过这个。) - h2ooooooo
你在哪里看到的? - Reporter
1
你是在哪里写的?是在锚标签中还是其他地方? - pixelbyaj
正如我所指出的那样,它不在hrefs中,而是在普通的javascript文件中,我在我们旧公司网站的一个文件中找到了它。 - sitifensys
1
不仅仅是 javascript:,任何东西都可以在后面加上 ":" 作为标签。在这里查看一个打破标签的小例子:http://jsfiddle.net/6yLA6/。 - Shadow The Spring Wizard
显示剩余3条评论
4个回答

97
"javascript:"是一个标签,用于标识循环语句,以便您可以使用"break javascript;"来跳出循环,但此处被误用了。虽然无害,但在不是循环语句的语句中添加标签可能不是一个好主意。

很奇怪,他们把它称为标签,但官方上(根据IANA),这些链接前缀被称为URI Scheme。好吧,虽然这并未得到IANA的正式注册,但仍应使用此类命名约定。 - Marko Gresak
17
除了问题所显示的,它不在URI中,而是在普通代码中。正如Quentin在下面建议的那样,几乎肯定是由于某人复制并粘贴时没有理解他们正在做什么而引起的。 - Jules
31
这种语言结构在互联网发明之前至少三十年就被称为“标签”。它与互联网没有任何关系,也与URI无关。那么,为什么它要使用这个术语呢? - Jörg W Mittag
1
@JörgWMittag 我觉得JavaScript实现了标签(这被软件工程道德兄弟会的骑士们认为是不好的),但没有实现goto,这很荒谬。 - sitifensys
1
使用标签允许标记为“break”,我认为KotSEMB仍然很酷。OUTER: while (1) { INNER: while (1) { break OUTER; }} - BRPocock
显示剩余2条评论

52

这段代码在语法上是合法的(它是一个标签),但是毫无意义。这是由于人们没有理解代码就复制/粘贴导致的模拟失效编程


8
+1 for the cargo culting link :). 复制粘贴似乎在负责内部Web应用程序设计的公司员工中很普遍。 - sitifensys
10
这篇维基百科上关于编程中的货物崇拜的文章难道不更切题吗?[1] http://en.wikipedia.org/wiki/Cargo_cult_programming - AnyOneElse

12
JavaScript也可以在HTML应用程序(HTA)中使用。在HTA中,可以混合使用VBScript和JavaScript。当您在应用程序中使用脚本时,如下所示,脚本语言会自动设置为VBScript。
<SCRIPT LANGUAGE='VBScript'> MsgBox 'Hi!'</SCRIPT>

所以,一个带有JavaScript onclick事件的元素(如下面的例子)将会导致错误。
<a id="myLink" href="#" onclick="MyFunction();return false;">Click me!</a>

您可以通过明确将语言设置为JavaScript来解决此问题,方法如下:

<a id="myLink" href="#" onclick="javascript:alert('Javascript Executed!');return false;">Click me for Javascript!</a>

或者在VBScript中通过

<a id="myLink" href="#" onclick='vbscript:msgbox "VBScript Executed!"'>Click me for VBScript!</a>

注意:我知道这是一个特殊情况,但这是我在创建混合语言 HTA 时遇到的实际使用 javascript: 标签的情况(在这种情况下我们仍然可以称其为标签吗?)。

2
有点偏题,因为原问题是关于在纯JavaScript代码中使用标签,但是看到Internet Explorer可以多么奇怪仍然很有趣;)。 - sitifensys

-2

我同意它作为标签的无用性,但在某些情况下仍然有用。例如,您需要从地址栏执行短代码片段或编写书签脚本。但在这种情况下,javascript: 更像是伪协议方案。


7
实际上完全不同。在URL开头的javascript:会让浏览器将URL剩余部分作为JavaScript执行。而在JavaScript代码行开头的javascript:是一个名为"javascript"的标签,就像foobar:是名为"foobar"的标签一样。它们之间完全没有关联,并出现在不同的上下文中,但它们看起来很相似。参考链接:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label - Peeja

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