Тарифы Услуги Сим-карты

Подключение скриптов JavaScript в HTML. Как вставить JavaScript в HTML страницу

В этой главе мы займемся размещением сценариев в HTML-документе, чтобы иметь возможность использовать их для оперативной модификации HTML-документа. Для вставки JavaScript-кoдa в НТМL-страницу обычно используют элемент .

Первая программа

Чтобы ваша первая пpoгpaммa (или сценарий) JavaScript запустилась, ее нужно внедрить в НТМL-документ.
Сценарии внедряются в HTML-документ различными стандартными способами:

  • поместить код непосредственно в атрибут события HTML-элемента;
  • поместить код между открывающим и закрывающим тегами ;
  • поместить все ваши скрипты во внешний файл (с расширением.js), а затем связать его с документом HTML.
JavaScript в элементе script

Самый простой способ внедрения JavaScript в HTML-документ – использование тега . Теги часто помещают в элемент , и ранее этот способ считался чуть ли не обязательным. Однако в наши дни теги используются как в элементе , так и в теле веб-страниц.

Таким образом, на одной веб-странице могут располагаться сразу несколько сценариев. В какой последовательности браузер будет выполнять эти сценарии? Как правило, выполнение сценариев браузерами происходит по мере их загрузки. Браузер читает HTML-документ сверху вниз и, когда он встречает тег , рассматривает текст программы как сценарий и выполняет его. Остальной контент страницы не загружается и не отображается, пока не будет выполнен весь код в элементе .

Это обычный HTML документ

Выходим обратно в HTML

Обратите внимание: мы указали атрибут language тега , указывающий язык программирования, на котором написан сценарий. Значение атрибута language по умолчанию – JavaScript, поэтому, если вы используете скрипты на языке JavaScript, то вы можете не указывать атрибут language .

JavaScript в атрибутах событий HTML-элементов

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

В следующем примере функция JavaScript помещается в раздел HTML-документа. Вот пример HTML-элемента с атрибутом события, обеспечивающим реакцию на щелчки мышью. При нажатии кнопки генерируется событие onclick.

Привет, мир!

Кликни меня

Внешний JavaScript

Если JavaScript-кода много – его выносят в отдельный файл, который, как правило, имеет расширение.js .

Чтобы включить в HTML-документ JavaScript-кoд из внешнего файла, нужно использовать атрибут src (source) тега . Его значением должен быть URL-aдpec файла, в котором содержится JS-код:

В этом примере указан абсолютный путь к файлу с именем script.js, содержащему скрипт (из корня сайта). Сам файл должен содержать только JavaScript-кoд, который иначе располагался бы между тегами и .

По аналогии с элементом атрибуту src элемента можно назначить полный URL-aдpec, не относящийся к домену текущей НТМL-страницы:

Чтобы подключить несколько скриптов, используйте несколько тегов:

...

Примечание: Элемент с атрибутом src не может содержать дополнительный JаvаSсriрt-код между тегами и , хотя внешний сценарий выполняется, встроенный код игнорируется.

При наличии атрибута src внутренняя часть тега script игнорируется!

Независимо от того, как JS-код включается в НТМL-документ, элементы интерпретируются браузером в том порядке, в котором они расположены в HTML-документе. Сначала интерпретируется код первого элемента , затем браузер приступает ко второму элементу и т. д.

Внешние скрипты практичны, когда один и тот же код используется во многих разных веб-страницах. Браузер скачает js-файл один раз и в дальнейшем будет брать его из своего кеша, благодаря чему один и тот же скрипт, содержащий, к примеру, библиотеку функций, может использоваться на разных страницах без полной перезагрузки с сервера. Кроме этого, благодаря внешним скриптам, упрощается сопровождение кода, поскольку вносить изменения или исправлять ошибки приходится только в одном месте.

Примечание: Во внешние файлы копируется только JavaScript-код без указания открывающего и закрывающего тегов и .

Расположение тегов

Вы уже знаете, что браузер читает HTML-документ сверху вниз и, начинает отображать страницу, показывая часть документа до тега . Встретив тег , переключается в JavaScript-режим и выполняет сценарий. Закончив выполнение, возвращается обратно в HTML-режим и отображает оставшуюся часть документа.

Это наглядно демонстрирует следующий пример. Метод alert() выводит на экран модальное окно с сообщением и приостанавливает выполнение скрипта, пока пользователь не нажмёт «ОК»:

Начало контента...

Продолжение контента

Если на странице используется много скриптов JavaScript, то могут возникнуть длительные задержки при загрузке, в течение которых пользователь видит пустое окно браузера. Поэтому считается хорошей практикой все ссылки нa javaScript-cцeнapии указывать после контента страницы перед закрывающим тегом :

Такое расположение сценариев позволяет браузеру загружать страницу быстрее, так как сначала загрузится контент страницы, а потом будет загружаться код сценария.
Для пользователей это предпочтительнее, потому что страница полностью визуализируется в браузере до обработки JavaScript-кoдa.

Отложенные и асинхронные сценарии

Как отмечалось ранее, по умолчанию файлы JavaScript-кода прерывают синтаксический анализ (парсинг) HTML-документа до тех пор, пока скрипт не будет загружен и выполнен, тем самым увеличивая промежуток времени до первой отрисовки страницы.
Возьмём пример, в котором элемент расположен где-то в середине страницы:

какой-то текст... Этот текст не будет показан, пока браузер не выполнит script.js.

В этом примере, пока пока браузер не загрузит и не выполнит script.js, он не покажет часть страницы под ним. Такое поведение браузера называется «синхронным» и может доставить проблемы, если мы загружаем несколько JavaScript-файлов на странице, так как это увеличивает время её отрисовки.

А что, если HTML-документ на самом деле не зависит от этих JS-файлов, а разработчик желает контролировать то, как внешние файлы загружаются и выполняются?

Кардинально решить проблему загрузки скриптов помогут атрибуты async и defer элемента .

Атрибут async

Async используется для того, чтобы указать браузеру, что скрипт может быть выполнен «асинхронно».

При обнаружении тега браузер не останавливает обработку HTML-документа для загрузки и выполнения скрипта, выполнение может произойти после того, как скрипт будет получен параллельно с разбором документа. Когда скрипт будет загружен – он выполнится.

Для сценариев с атрибутом async не гарантируется вы­полнение скриптов в порядке их добавления, например:

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

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

Атрибут defer

Атрибут defer откладывает выполнение скрипта до тех пор, пока вся HTML-страница не будет загружена полностью.

Как и при асинхронной загрузке скриптов - JS-файл может быть загружен, в то время как HTML-документ ещё грузится. Однако, даже если скрипт будет полностью загружен ещё до того, как браузер закончит обработку страницы, он не будет выполнен до тех пор, пока HTML-документ не обработается до конца.

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

Кроме того, в отличие от async , относительный порядок выполнения скриптов с атрибутом defer будет сохранён.

Применение атрибута defer бывает полезным, когда в коде скрипта предусматривается работа с HTML-документом, и разработчик должен быть уверен, что страница полностью получена.

Примечание: Атрибуты async и defer поддерживаются только для внешних файлов сценариев, т.е. работают только при наличии атрибута src .

Итоги
  • JavaScript можно добавить в HTML-документ с помощью элемента двумя способами:
    • Определить встроенный сценарий, который располагается непосредственно между парой тегов и .
    • Подключить внешний файл с JavaScript-кодом через .
  • Если JavaScript-код используется в нескольких страницах, то его лучше подключать в качестве внешнего сценария. Это существенно облегчает сопровождение и редактирование кода, а также ускорит загрузку и обработку веб-страниц – внешний сценарий загружается браузером всего один раз (в дальнейшем он будет извлекаться из кэша браузера).
  • Атрибут defer сигнализирует браузеру, что загрузку сценария можно начать немедленно, но его выполнение следует отложить до тех пор, пока весь HTML-документ будет загружен.
  • В тех случаях, когда файл скрипта содержит функции, взаимодействующие с загружаемым HTML-документом или существует зависимость от другого файла на странице необходимо, что­бы HTML-документ был полностью загружен, прежде чем скрипт будет выполнен. Как правило, такая ссылка нa javaScript-cцeнapий помещается в низ страницы перед закрывающим тегом , чтобы убедиться, что для его работы весь документ был разобран. Однако, в ситуации, когда по каким-либо причинам JS-файл должен быть размещён в другом месте документа - атрибут defer может быть полезен.
  • Атрибут defer сохраняет относительную последовательность выполнения скриптов, а async – нет.
  • Скрипт с атрибутом async выполняется асинхронно с обработкой страницы, когда скрипт будет загружен – он выполнится, даже если HTML-документ ещё не полностью готов.
  • Для JS-файлов, которые не зависят от других файлов, атрибут async будет наиболее полезен. Поскольку нам не важно, когда скрипт будет исполнен, асинхронная загрузка - наиболее подходящий вариант.
Задачи
  • Всплывающее окно

    Перед вами простой HTML-документ. Разместите в теле НТМL-страницы сценарий, выводящий всплывающее окно с надписью: "Привет, javascript!"

Инструкция

Подключите к документу скрипт из внешнего источника, адресуемого известным URI. Используйте HTML-элемент с заданным значением атрибута src. Отредактируйте документ, добавив в него конструкцию вида:

Здесь в качестве значения URI_скрипта должен быть указан URI, идентифицирующий ресурс, из которого будут загружены данные сценария.
В качестве значения атрибута charset следует указать кодировку символов скрипта, если она отличается от кодировки символов документа. Кодировка документа определяется на основании данных поля Content-Type заголовка HTTP-ответа сервера или значения атрибута content элемента META с атрибутом http-equiv, установленным в Content-Type.
Подключение скриптов подобным способом зачастую производится в заголовке документа (элементы SCRIPT располагаются внутри элемента HEAD) и немедленное их выполнение не требуется. В этом случае имеет смысл использовать атрибут defer для отложенной интерпретации текста сценария.

Подключите скрипт, внедрив его непосредственно в документ. Добавьте в разметку документа элемент SCRIPT, имеющий содержимое, представляющее собой JavaScript-код. Используйте конструкцию вида:

// текст кода сценария

// текст кода сценария

// текст кода сценария

Обратите внимание на HTML-комментарии, обрамляющие код скрипта. Они необходимы для обеспечения совместимости со старыми моделями браузеров.

Подключите скрипт при помощи указания "javascript:" в качестве дескриптора протокола URI целевого якоря элемента A. Создайте в документе ссылку, со значением атрибута href вида:

javascript:

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

text

Добавьте скрипты в документ в качестве кода встроенных обработчиков событий элементов. Для этого определите встроенные обработчики нужных событий выбранных элементов при помощи добавления этим элементам соответствующих атрибутов. В качестве значений атрибутов введите фрагменты JavaScript-кода. Например, добавить код в качестве обработчика события одинарного щелчка мышью по элементу DIV, можно следующим образом:

Содержимое элемента

С перечнем событий элементов, которые должны поддерживаться конформными пользовательскими агентами, можно ознакомиться в разделах Events спецификаций объектных моделей документов уровней 2 и 3 (DOM2 и DOM3) на сайте консорциума W3C w3c.org.

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

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

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

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

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


В процессе обучения вы будите допускать много ошибок, пропускать знаки препинания, которые в свою очередь приводить к не работающей программе. Мы с вами научимся в процессе уроков инициализировать в браузере ошибки, познакомитесь с новыми символами { }, , ; , (), !, узнаете обозначение новых слов (var , null , else if ), разберем правила пунктуации и синтаксис самого языка.

К тому же, в данных уроках познакомимся не только с , но и с jQuery – самой популярной его библиотекой, которая поможет Вам создавать сложные интерактивные элементы веб-дизайна.

Что такое программа

Когда вы добавляете код JavaScript на веб-страницу, тем самым вы пишите компьютерную программу. Конечно, она проще тех, с которыми вам приходится работать, через что читаете почту, обрабатываете фотографии, но в принципе они все схожи.

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

Создавая программу на языке JavaScript, вы должны определить шаги, необходимые для достижения цели. Как только вы поймете, что хотите реализовать и разобьете шаги на этапы, вы будете готовы к написанию программы. Другими словами, вы превращаете собственные мысли в программный код – слова и символы, заставляют браузер действовать, так как вам угодно.

Добавление JavaScript на страницу

Браузеры понимают HTML и CSS и превращают эти языки в визуальную информацию на экране. Функционал браузера понимающий HTML и CSS, называется браузерным движком. Большинство браузеров обладают компонентом под названием интерпретатор JavaScript . Это тот функционал, при помощи которого он понимает язык JS и способен выполнять шаги написанного программного кода.

Для того что бы сообщить браузеру, когда появляется JavaScript, используется элемент script .

Тег - это команда языка HTML, она работает в качестве переключателя, сообщая браузеру где начинается JavaScript. Когда браузер доходит до конца закрывающего тега , то он знает что достиг конца программы и может возвращаться к исполнению своих обычных функций.


Довольно часто можно встреть добавление элемента script в заглавную часть веб-страницы – раздел head следующим образом:

Уроки по JavaScript