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

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

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

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

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

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

Этот пример просто неверен, или есть ли причина указывать javascript: в чем-то другом, кроме href?

Ссылка на статью не работает. Как это было называлось?

Peter Mortensen 08.09.2013 12:52

@PeterMortensen: Его больше не существует.

Ry- 08.09.2013 19:01
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
44
2
18 794
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

Если «молодой, только что окончивший колледж веб-разработчик» может не знать что, зачем он учился в колледже? :-)

Tomalak 16.12.2008 21:27

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

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

Это псевдопротокол - его можно использовать в атрибуте привязки href, чтобы указать код для запуска, а не URL-адрес для перехода.

Jason Bunting 17.12.2008 01:37

Конечно. Не подумал об этом, потому что предпочитаю <a onclick = "...">

Tomalak 17.12.2008 10:22

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

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

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

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

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

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

В этом разделе говорится что-нибудь о javascript: в onclick?

Ry- 08.09.2013 18:58

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

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

(Веб-формы, кто-нибудь?)

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

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

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

Ответ принят как подходящий

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

Я не тестировал это, но считаю, что он имеет определенную функцию при использовании с функцией getURL из Flash, поскольку он будет пытаться вызвать функцию Javascript на странице, а не выполнять URL-адрес.

Luke 17.12.2008 00:17

Какие версии Internet Explorer имели / имеют такое поведение?

Peter Mortensen 08.09.2013 12:55

Другие вопросы по теме