Подтвердить что ты не робот

Когда используется синтаксис префикса "javascript:"?

Я знаю, что вы можете использовать javascript: псевдо протокол для URL-адресов в теге <a>. Тем не менее, я заметил, что Firefox и IE позволят "javascript:" предшествовать javascript-коду в теге <script>. Является ли этот допустимый синтаксис? Изменяет ли он правила съемки?

Примеры: Я видел это много раз:

<a onclick="javascript:alert('hello world!');">Hello World!</a>

Но является ли это законным/допустимым синтаксисом и делает что-то особенное:

<script type="text/javascript">
javascript:alert('hello world!');
</script>
4b9b3361

Ответ 2

Вам нужен протокол javascript: ", если вы хотите поместить JavaScript в атрибут href ссылки.

<!-- does not work -->
<a href="alert('some text');">link</a>

<!-- does work -->
<a href="javascript:alert('some text');">link</a>

<!-- also works -->
<a href="#" onclick="alert('some text');">link</a>

Насколько я знаю (и, пожалуйста, если я ошибаюсь, кто-то меня исправляет), разница в сфере видимости отсутствует, но есть очень важное отличие в this.

<!-- does not work -->
<a href="alert(this.href);">link</a>

<!-- alerts "undefined" -->
<a href="javascript:alert(this.href);">link</a>

<!-- works as expected, alerts "<url>#" -->
<a href="#" onclick="alert(this.href);">link</a>

Ответ 3

Одна вещь, которую следует учитывать, наши тестеры всегда будут нас обманывать, если мы сделаем что-то вроде


<a href='javascript:openwindowmethod("url");'> stuff </a>

Вместо


<a href='url' onclick='return openwindowmethod(this.href);'> stuff </a>

Первый метод будет работать, только если вы нажмете на него, но не, если вы сдвигаете его или нажали на него, или щелкнули правой кнопкой мыши и открыли его в новом окне.

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