Javascript не должен быть внутри тега <script>? - PullRequest
1 голос
/ 08 января 2012

Следующий код выполняет Javascript после завершения загрузки страницы.

<html>
<head>
<title>test page</title>
</head>
<body onload="alert('The page has finished loading');">
</div>
</body>
</html>

Я думал, что весь код Javascript должен быть заключен между <script> и </script>. Так почему же это не так?

Ответы [ 4 ]

4 голосов
/ 08 января 2012

Это встроенный обработчик событий , который содержит код Javascript.
Они обычно не одобряются.

Обратите внимание, что Javascript также может появляться в javascript: URI (например,в виде букмарклетов).

3 голосов
/ 08 января 2012

JavaScript может быть включен на страницу с помощью:

  • Элемент скрипта, ссылающийся на внешний файл
  • Встроенный в элемент скрипта
  • Свойство атрибут события (как в вашем примере)
  • В любом месте, которое принимает URI и не блокирует URI JS по соображениям безопасности (когда-то <img src="javascript:someScriptHere()"> работало, <a href="javascript:someScriptHere()"> все еще делает)
  • Различные проприетарные расширения CSS (такие как expression)

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

1 голос
/ 08 января 2012

Это называется "встроенный JavaScript"!Как и встроенный CSS, встроенный JavaScript также не является хорошей практикой.

  • Одна из причин, по которой нам не следует использовать встроенные обработчики событий, заключается в том, что нам необходимо смешивать код JavaScript с нашим кодом HTML / XHTML.

  • Другие причины заключаются в том, что это означает загромождение кода HTML огромным количеством обработчиков событий, тогда как с помощью сценариев мы можем применять обработчики событий к любым частям страницы и даже использовать один обработчик событий для обработки событий между несколькими элементами..

  • HTML для контента, CSS для презентации и JavaScript для поведения.Сохраняя разделение поведения между этими частями, мы увеличиваем их способность поддерживать и использовать в самых разных ситуациях.

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

1 голос
/ 08 января 2012

Не все JavaScript нужно инкапсулировать так. Это одна из причин, по которой простого удаления тегов для удаления XSS недостаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...