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