Какова цель (если есть) «javascript:» в тегах обработчика событий?

В последнее время я прилагаю согласованные усилия, чтобы улучшить свои навыки работы с javascript, читая как можно больше кода javascript. При этом я иногда видел, что префикс javascript: добавляется перед атрибутами обработчика событий в тегах элементов HTML. Для чего нужна эта приставка? В принципе, есть ли заметная разница между:

onchange = "javascript: myFunction(this)"

и

onchange = "myFunction(this)"

?

Поведение ключевого слова "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) для оценки ваших знаний,...
18
0
1 706
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

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

Наверное, ничего в вашем примере. Насколько я понимаю, javascript: предназначен для якорных тегов (вместо фактического href). Вы бы использовали его, чтобы ваш скрипт мог выполняться, когда пользователь щелкает ссылку, но без инициирования возврата на страницу (что будет делать пустой href в сочетании с onclick).

Например:

<a href = "javascript:someFunction();">Blah</a>

Скорее, чем:

<a href = "" onclick = "someFunction();">Blah</a>

Я не являюсь авторитетом в JavaScript и, возможно, больше глупец, чем спрашивающий, но, AFAIK, разница в том, что префикс javascript: является предпочтительным / обязательным в URI-контекстах, где аргумент может быть также традиционным URL-адресом HTTP, как и JavaScript спусковой крючок.

Итак, мой интуитивный ответ был бы таков, что, поскольку onChange ожидает JavaScript, префикс javascript: является избыточным (если не совершенно ошибочным). Однако вы можете написать javascript:myFunction(this) в адресной строке, и эта функция будет запущена. Без javascript: ваш браузер попытался бы интерпретировать myFunction(this) как URL-адрес и попытаться получить информацию DNS, перейти на этот сервер и т. д.

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

It should only be used in the href tag.

Это вздор.

Принятый способ таков:

<a href = "/non-js-version/" onclick = "someFunction(); return false">Blah</a>

Но чтобы ответить на OP, как правило, больше нет причин использовать javascript:. Фактически, вы должны прикрепить событие javascript из своего скрипта, а не встроить его в разметку. Но это пуристическая вещь, я думаю :-D

Его не следует использовать в обработчиках событий (хотя большинство браузеров работают в обороне и вас не накажут). Я бы также сказал, что его не следует использовать в атрибуте href привязки. Если браузер поддерживает javascript, он будет использовать правильно определенный обработчик событий. Если браузер этого не делает, ссылка javascript: будет отображаться неработающей. IMO, лучше указать им на страницу, объясняющую, что им нужно включить javascript для использования этой функции или, еще лучше, версию функции, не требующую javascript. Итак, что-то вроде:

<a href = "non-ajax.html" onclick = "niftyAjax(); return false;">Ajax me</a>

Обновлено: Мысль об уважительной причине использовать javascript :. Букмарклеты. Например, этот отправляет вас в программу чтения Google для просмотра RSS-каналов для страницы:

var b=document.body;
if (b&&!document.xmlVersion){
  void(z=document.createElement('script'));
  void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js');
  void(b.appendChild(z));
}else{
  location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href)
}

Чтобы пользователь мог легко добавить этот букмарклет, отформатируйте его так:

<a href = "javascript:var%20b=document.body;if (b&&!document.xmlVersion){void(z=document.createElement('script'));void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js');void(b.appendChild(z));}else{location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href)}">Drag this to your bookmarks, or right click and bookmark it!</a>

javascript: в коде JS (например, в атрибуте onclick) - это просто метка для использования с операторами метки continue / goto, которые могут поддерживаться или не поддерживаться браузером (вероятно, нигде). Вместо этого это может быть zipzambam :. Даже если метку нельзя использовать, браузеры все равно принимают ее, поэтому она не вызывает ошибки.

Это означает, что если кто-то добавляет бесполезную метку в атрибут onclick, он, вероятно, не знает, что делает, и просто копирует и вставляет или делает это по привычке, выполняя следующие действия.

javascript: в атрибуте href означает URI Javascript.

Пример:

javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B

@mercutio

That's ridiculous.

Нет, это не смешно, javascript: это псевдопротокол, который действительно может использоваться только в качестве объекта ссылки, так что он совершенно прав. Ваше предложение действительно лучше, но лучший способ - использовать ненавязчивые методы javascript для перебора элементов HTML и программного добавления поведения, как это используется в библиотеках, таких как jQuery.

Basically, is there any appreciable difference between: onchange = "javascript: myFunction(this)" and onchange = "myFunction(this)" ?

Предполагая, что вы имели в виду href = "javascript: myFunction(this)", да, есть, особенно при загрузке контента с использованием javascript. Использование псевдопротокола javascript: делает контент недоступным для некоторых людей и всех поисковых систем, тогда как использование реального href и последующее изменение поведения ссылки с помощью javascript делает контент доступным, если javascript отключен или недоступен в конкретном клиенте.

Истоки javascript: в обработчике событий на самом деле просто специфичны для IE, так что вы можете указать язык в дополнение к обработчику. Это связано с тем, что vbscript также является поддерживаемым языком сценариев на стороне клиента в IE. Вот пример "vbscript:".

В других браузерах (как было сказано Shadow2531) javascript: - это просто ярлык, который в основном игнорируется.

href = "javascript:..." можно использовать в ссылках для выполнения кода javascript, как указывает ДэнниСмурф.

Флубба:

Использование javascript: в HREF нарушает «Открыть в новом окне» и «Открыть в новой вкладке» в Firefox и других браузерах.

Это не "неправильно", но если вы хотите затруднить навигацию по сайту ...

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