您是否需要在 onclick 中指定“javascript:”?

IT技术 javascript google-api
2021-02-08 15:07:30

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

onclick="javascript:myFunction()" 坏的

onclick="myFunction()" 好的

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

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

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

6个回答

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

哪些版本的 Internet Explorer 有/有这种行为?
2021-03-25 15:07:30
我还没有测试过这个,但我相信它在与 Flash 中的 getURL 函数一起使用时具有特定的功能,因为它会尝试在页面上调用 Javascript 函数而不是执行 URL。
2021-04-10 15:07:30

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

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

今天,好吧,它并没有受到伤害......将来总是可能有其他一些想要成为浏览器脚本语言的人。

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

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

Web 表单,有人吗?)

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

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

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

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

该部分是否说明了javascript:in onclick
2021-04-05 15:07:30