Вам когда-нибудь нужно указывать 'javascript:' в клике? - PullRequest
44 голосов
/ 16 декабря 2008

AFAIK, вам никогда не нужно указывать протокол при нажатии:

onclick="javascript:myFunction()" Плохо

onclick="myFunction()" Хорошо

Сегодня я заметил в этой статье на Google Anallytics, что они используют это:

<a href="http://www.example.com" onClick="javascript: pageTracker._trackPageview('/outgoing/example.com');">

Является ли этот пример просто неправильным, или есть ли причина указывать javascript: во что-либо, кроме href?

Ответы [ 8 ]

45 голосов
/ 16 декабря 2008

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

7 голосов
/ 16 декабря 2008

Это никогда не требуется для якорей и никогда не является хорошей практикой. Якорь только для навигации. Статья на эту тему: Бесполезный JavaScript: псевдопротокол .

5 голосов
/ 16 декабря 2008

Я всегда считал, что это плохое использование, потому что вы можете вызывать JavaScript внутри URL с префиксом javascript::

<a href="javascript:void(alert('really bad usage!'))">

( Веб-формы , кто-то?)

И только невежественные веб-разработчики, которые никогда не осознавали разницу между объявлением события и объявлением href,

Я бы сказал, что даже атрибуты событий в большинстве случаев в настоящее время являются плохой практикой, и предпочтительным способом прикрепления события является использование .attachEvent (Internet Explorer) и addEventListener (остальные браузеры, как обычно).

И, наконец ... Google не всегда всемогущ. Они, как правило, больше озабочены тем, что все работает вместо того, чтобы постоянно следовать стандартам.

5 голосов
/ 16 декабря 2008

См. Указание языка сценариев (в 18.2.2 в HTML 4.01 Спецификация , Сценарии ).

5 голосов
/ 16 декабря 2008

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

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

2 голосов
/ 16 декабря 2008

В Internet Explorer можно установить язык по умолчанию, установленный на VBScript для страницы. В первые дни всегда была идея, что для написания скриптов в браузере можно использовать другой язык. Как оказалось, ни один такой язык не материализовался в существенной форме.

Я не беспокоюсь об этом префиксе языка.

2 голосов
/ 16 декабря 2008

Я думаю, что префикс "javascript:" - это пережиток прошлых дней, когда все еще существовала смутная вероятность того, что что-либо иное, чем , кроме JavaScript, может обрабатывать событие.

Сегодня это необязательно и хранится по причинам обратной совместимости. Но я бы не сказал, что это плохо как таковое, это просто не нужно.

0 голосов
/ 16 декабря 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...