Nano Hash - криптовалюты, майнинг, программирование

Когда префикс «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>
18.02.2009

  • Я тоже хотел бы это знать, многие люди используют / злоупотребляют этим. Было бы неплохо знать, если его правильное использование или плохое злоупотребление. 18.02.2009
  • Не могли бы вы объяснить, что вы имеете в виду, на примерах? Я не понял, я заметил, что firefox и IE позволяют «javascript:» предшествовать коду javascript внутри тега. часть. 18.02.2009
  • он имеет в виду ‹a href='javascript:alert(js code in here);'› alert ‹/a›, вы действительно можете делать с этим всевозможные сумасшедшие вещи, например, открывать окна и документировать их. 18.02.2009
  • Спасибо, Аллен, но разве ваш пример не является случаем псевдопротокола для URL-адресов в теге, о котором Хит упомянул первым? Или я ошибаюсь? 18.02.2009
  • вау, да, я тупой, я неправильно прочитал вопрос, похоже, многие из нас так и сделали 18.02.2009
  • Тогда вернемся к Хиту. Не могли бы вы привести пример того, что вы имеете в виду? 18.02.2009
  • @Allen: изначально в вопросе не было экранированных тегов ‹a› и ‹script›, поэтому в итоге они были полностью удалены из сообщения. Маленькая вещь, но явно запутанная! 18.02.2009

Ответы:


1

Вне атрибута href (где это спецификатор протокола) имя: просто создает метка (например, можно использовать с continue или break).

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

18.02.2009
  • ::Бьет себя по голове:: Спасибо! 18.02.2009

  • 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>
    
    18.02.2009
  • ‹a href=# onclick=alert('some text');›ссылка‹/a› считается лучшей практикой. концептуально панель URL-адресов должна быть предназначена для URL-адресов, а не скриптлетов. javascript: изменит строку URL, onclick не изменит. Хороший ответ, +1 18.02.2009
  • Согласованный. Хотя в некоторых случаях использование href=# приведет к тому, что ваша страница будет прыгать. Когда это происходит, я согласен с href=javascript:; или href=javascript:void();. 18.02.2009

  • 3

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

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

    Скорее, чем

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

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

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

    18.02.2009

    4

    Синтаксис javascript: может использоваться в любом месте URL-адреса и выполняет следующую строку как скрипт. Это часть спецификации HTML и AFAIK поддерживается всеми текущими основными браузерами.

    23.07.2021
    Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..