Когда я должен определить протокол JavaScript?

У меня создалось впечатление, что я только должен определить "протокол" при использовании JavaScript в атрибутах URL, такой как в hrefs. Это единственный "полезный" контекст для javascript:?

Разумный:

<a href="javascript:alert('Hello')">World!</a>

Глупый:

<form onsubmit="javascript:alert('oops!')">

Действительно ли это правильно? Или есть ли некоторая неясная ошибка/вариант использования, о которой я должен знать?

20
задан Gordon Gustafson 23 February 2010 в 20:59
поделиться

4 ответа

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

Метка просто предоставляет идентификатор для оператора и позволяет вам ссылаться на него в другом месте вашей программы.

ИМХО, этот псевдопротокол полезен только для букмарклетов ...

Рекомендуемая статья:

15
ответ дан 30 November 2019 в 00:39
поделиться

Как уже упоминалось в других ответах, избегайте использования ссылок javascript: href, и это совершенно не нужно в атрибутах обработчика событий.Однако, поскольку теги A иногда остаются семантически правильными, вам нужно будет что-то добавить в атрибут href , если вы хотите, чтобы ваши : ссылка и : hover Стили CSS, применяемые к элементу в Internet Explorer. В этом случае используйте:

<a href="#" onclick="doSomething(); return false;">Link</a>

или

<a href="javascript://" onclick="doSomething();">Link</a>

Есть одна (несколько неясная) ошибка с протоколом javascript - в Internet Explorer * он будет думать, что вы покидаете страницу, когда нажимаете ссылку . Если вы используете window.onbeforeunload , тогда в это время появится ваше сообщение о переходе. Только по этой причине мы полностью прекратили использование протокола javascript , поэтому у нас нет этой ошибки, потому что мы забыли проверить ее, когда добавляли сообщение о переходе на какую-либо страницу.


* Мне, наверное, следовало указать версию, когда я впервые написал это. Я вообще не помню, но на всякий случай, если ошибка присутствует только в браузере, который в настоящее время почти не работает, таком как IE 6 или 7, вам, вероятно, лучше проверить его самостоятельно.

6
ответ дан 30 November 2019 в 00:39
поделиться

На практике вы правы.

Это нужно делать в любом случае, когда ожидается что-то, кроме сценария. Теоретически вы можете прикрепить javascript: любой везде, где вы можете использовать URL-адрес, но это никогда не поддерживалось и теперь официально не рекомендуется использовать.

Однако вам вообще не следует использовать javascript: . Для ссылок вы можете использовать атрибут onclick . На самом деле сейчас происходит то, что движок JavaScript идентифицирует javascript: как метку, поэтому код выполняется.

2
ответ дан 30 November 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: