В некоторых ответах здесь утверждается, что префикс «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 в одном из ответов выше в значительной степени говорит об одном и том же.