Вам когда-нибудь нужно было указывать 'javascript:' в onclick?

StackOverflow https://stackoverflow.com/questions/372159

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

Сам я не утруждаю себя этим языковым префиксом.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top