Вам когда-либо нужно указывать "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 в одном из ответов выше, довольно много говорит о том же.

Ответ 3

В начале вы также можете использовать VBScript в Internet Explorer вместо JavaScript, поэтому укажите "javascript:..." был стандартным.

Сегодня, ну, это не повредит... В будущем всегда может быть какой-то другой wannabe-скриптовый язык.

Ответ 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

Это хорошая практика для вашего программиста по обслуживанию. Компилятор знает разницу, но этот молодой, просто внеучебный веб-разработчик не может.