"javascript://"是什么意思?

7

最近我遇到了类似于这样的事情

<a href="javascript://">some link</a>

我不知道代码中的"javascript://"是什么意思。它是否表示一个名为"javascript"的协议?如有帮助,将不胜感激。

4
也许它会执行冒号后面的指令。双斜杠表示注释,所以也许它什么也不做。 - antoyo
1
在我看来,这似乎是错误的。如果想要一个指向 nop 的链接,可以使用 javascript:;javascript:void(0);,但我从未见过 javascript://。@antoyo 所说的听起来对我很有道理。 - Matthew
https://dev59.com/lGsz5IYBdhLWcg3wpZhF - Marcin Wasiluk
3
这句话的意思是某人没有遵循良好的做法。 - Spudley
如果它在HTML 5 iPhone / Android应用程序中,设备可以捕获它并在请求之前/之后或代替请求使用它来执行一些本地操作。 - Дамян Станчев
显示剩余3条评论
2个回答

12

进一步调查发现,javascript:// 不是一个有效的协议。

通常情况下,当您想通过链接执行js代码时,可以使用 javascript:doSomething();

在这种情况下,

  • javascript:意味着“在:之后执行Javascript代码”
  • 并让//表示Javascript注释。

它似乎是一个占位符,什么都不做,就像javascript:;一样。

因此字面上的意思是:执行//(什么都不做)


唯一合理的原因是有人故意使用这种符号表示法,可能是某种框架式的表示法,以便它可以以自己的方式处理特定的操作/请求。其他任何理由都不太合理。 - user1467267
嗯,我更喜欢使用带有类和真实href的链接,并通过脚本附加一个onclick处理程序。此时,可以实际使用href来确定预期的操作,在许多情况下,它也可以在没有JS的情况下正常工作。 - cHao
@cHao,自由就在你手中!幸运的是,编程可以按照你想要的方式进行。 - ddavison
2
除了#会跳到页面顶部,所以它们的行为不完全相同。 - user1106925
我见过足够多的怪人使用这些荒谬(且令人困惑)的行为来构建内部(公司)框架 :P。 - user1467267
1
请查看以下答案,了解正确的操作方式:https://dev59.com/YHVC5IYBdhLWcg3w9GLM - Matanya

2

由于没有指定任何URL,因此它不会导向任何地方。

有其他一些方法可以实现相同的效果:

href="#" 会添加一个额外的浏览器历史记录条目(当点击后退按钮时很烦人)。

href="" 重新加载页面。

href="javascript:;" 看起来没有任何问题(除了看起来凌乱和毫无意义)。


1
一个实际上并不打算导航到任何地方的链接,几乎总是会有一个onclick处理程序来防止默认操作,因此href实际上并不重要。然而,这样的链接非常糟糕,因为基本上没有办法在没有启用JS的情况下让它工作。 - cHao

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