Вам когда-либо нужно указывать "javascript:" в onclick?
AFAIK, вам не нужно указывать протокол в onclick:
onclick="javascript:myFunction()"
Плохо
onclick="myFunction()"
Хорошо
Сегодня я заметил в эту статью в Google Anallytics, что они ее используют:
<a href="#" onclick="location.href='http://www.example.com'; return false;" onClick="javascript: pageTracker._trackPageview('/outgoing/example.com');">
Является ли этот пример просто неправильным или существует причина указывать javascript:
в чем-либо, кроме href
?
Ответы
Ответ 1
В некоторых ответах здесь утверждается, что префикс "javascript:" - это "оставшийся из старых дней", подразумевая, что он намеренно специально обрабатывается браузерами для обратной совместимости. Есть ли веские доказательства того, что это так (кто-нибудь проверил исходный код)?
<span onclick="javascript:alert(42)">Test</span>
Для меня это просто читается как:
javascript:
alert(42);
Смысл, что "javascript:" является всего лишь меткой и не имеет никакого эффекта. Это тоже работает:
<span onclick="foobar:alert(42)">Test</span>
Update:
Я немного экспериментировал, и получается, что да, "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 в одном из ответов выше, довольно много говорит о том же.
Ответ 2
Он никогда не нуждался в якорях и никогда не был хорошей практикой. Анкер предназначен только для навигации.
Статья об этой теме Бесполезный JavaScript: псевдо-протокол.
Ответ 3
В начале вы также можете использовать VBScript в Internet Explorer вместо JavaScript, поэтому укажите "javascript:..." был стандартным.
Сегодня, ну, это не повредит... В будущем всегда может быть какой-то другой wannabe-скриптовый язык.
Ответ 4
См. Указание языка сценариев (в 18.2.2 в Спецификации HTML 4.01, Скрипты).
Ответ 5
Я всегда считал, что это плохое использование, основанное на том, что вы можете вызвать JavaScript в URL с префиксом javascript:
<a href="javascript:void(alert('really bad usage!'))">
(Веб-формы, кто-то?)
И только невежественные веб-разработчики, которые никогда не понимали разницу между объявлением события и объявлением href, использовали его.
Я бы сказал, что даже атрибуты событий в большинстве случаев являются плохой практикой в настоящее время, и предпочтительный способ атаковать событие - использовать .attachEvent(Internet Explorer) и addEventListener (остальные браузеры, как обычно).
И наконец... Google не всегда БОГ всемогущий. Они, как правило, больше озабочены тем, что материал работает, а не следит за стандартами все время.
Ответ 6
Я думаю, что префикс "javascript:" остался прежним, когда все еще была туманная возможность, что что-то другое, кроме JavaScript, могло обрабатывать событие.
Сегодня он опционально и поддерживается для обратной совместимости. Но я бы не сказал это плохо как таковое, это просто не нужно.
Ответ 7
В Internet Explorer, можно установить для языка по умолчанию VBScript для страницы. В первые дни всегда существовала идея, что другой язык может использоваться для сценариев в браузере. Как оказалось, такой язык не был материализован в значительной форме.
Я не забочусь об этом префиксе языка.
Ответ 8
Это хорошая практика для вашего программиста по обслуживанию. Компилятор знает разницу, но этот молодой, просто внеучебный веб-разработчик не может.