您是否需要在 onclick 中指定“javascript:”?
这里的一些回复声称“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几乎谈到了同样的事情。
锚永远不需要它,也永远不是好的做法。锚点仅用于导航。关于这个主题的文章是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 中,脚本)。