AFAIK, вам никогда не нужно указывать протокол в onclick:
onclick = "javascript:myFunction()"Плохо
onclick = "myFunction()"Хорошо
Сегодня я заметил в эта статья в Google Anallytics, что Они использует его:
<a href = "http://www.example.com" onClick = "javascript: pageTracker._trackPageview('/outgoing/example.com');">
Этот пример просто неверен, или есть ли причина указывать javascript: в чем-то другом, кроме href?
@PeterMortensen: Его больше не существует.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это хорошая практика для вашего программиста по обслуживанию. Компилятор знает разницу, но этот молодой веб-разработчик не может.
Если «молодой, только что окончивший колледж веб-разработчик» может не знать что, зачем он учился в колледже? :-)
Я думаю, что префикс «javascript:» - это пережиток старых времен, когда еще существовала смутная вероятность того, что что-нибудь другое, а не JavaScript, может обрабатывать событие.
Сегодня это необязательно и сохраняется из соображений обратной совместимости. Но я бы не сказал, что это Плохо как таковое, это просто ненужно.
Это псевдопротокол - его можно использовать в атрибуте привязки href, чтобы указать код для запуска, а не URL-адрес для перехода.
Конечно. Не подумал об этом, потому что предпочитаю <a onclick = "...">
Это никогда не нужно на якорях и никогда не является хорошей практикой. Якорь предназначен только для навигации. Статья на эту тему - Бесполезный JavaScript: псевдопротокол.
Вначале вы также могли использовать VBScript в Internet Explorer вместо JavaScript, поэтому указание «javascript: ...» было стандартным.
Сегодня это не повредит ... В будущем всегда может быть какой-нибудь другой язык сценариев для браузеров.
В Internet Explorer можно установить язык по умолчанию для страницы VBScript. Раньше всегда существовала идея, что для написания сценариев в браузере можно использовать другой язык. Как оказалось, такой язык не материализовался в содержательной форме.
Я сам не заморачиваюсь с этой языковой префиксом.
См. Указание языка сценариев (в 18.2.2 в HTML 4.01 Спецификация, Скрипты).
В этом разделе говорится что-нибудь о javascript: в onclick?
Я всегда считал, что это плохое использование, потому что вы можете вызывать JavaScript в URL с префиксом javascript::
<a href = "javascript:void(alert('really bad usage!'))">
(Веб-формы, кто-нибудь?)
И только невежественные веб-разработчики, которые никогда не понимали разницы между объявлением события и объявлением href, использовали его.
Я бы сказал, что даже атрибуты событий в настоящее время в большинстве случаев являются плохой практикой, и предпочтительный способ подключения к событию - использовать .attachEvent (Internet Explorer) и addEventListener (остальные браузеры, как обычно).
И наконец ... Google не всегда БОГ всемогущий. Их больше беспокоит то, что все работает, а не все время следование стандартам.
Некоторые из приведенных здесь ответов утверждают, что префикс «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 в одном из ответов выше в значительной степени говорит об одном и том же.
Я не тестировал это, но считаю, что он имеет определенную функцию при использовании с функцией getURL из Flash, поскольку он будет пытаться вызвать функцию Javascript на странице, а не выполнять URL-адрес.
Какие версии Internet Explorer имели / имеют такое поведение?
Ссылка на статью не работает. Как это было называлось?