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