Стандарт гипертекста позволяет создавать полноценные HTML-страницы, описывать их правилами CSS и наполнять функциональностью посредством JavaScript. Сервер формирует страницу и отсылает ее в браузер посетителя. Процедура строго формализована, но контролируя процессы создания и передачи данных. Можно расширить пределы возможного, которые предоставляют стандарт и синтаксис подключения JS к HTML через тег «script» внутри страницы или из внешнего файла.
HTML и JavaScript — естественное сочетание
На том этапе, когда программирование из локального стало «распределенным» и ушло в сферу обслуживания интернет-пространства, трудно было представить естественное сочетание невозможного: языка гипертекста и языка программирования. Несомненно, что-то общее есть: и там, и там строгие формализованные синтаксические конструкции с ограничениями по представлению и обработке смыслового момента. Более кардинальные различия затмевают это общее:
- первое только описывает;
- второе только обрабатывает.
На заре интернет-технологий HTML-страница была статичным, но уже востребованным продуктом интеллектуальной деятельности разработчика. В те времена JavaScript еще только собирался заявить о себе. Сегодня созданы и повсеместно используются:
- функционально полный стандарт HTML;
- широкий ассортимент правил и возможностей CSS;
- совершенный JavaScript, стремящийся к непрерывному развитию;
- накопленный опыт распределенной обработки и представления информации.
Подключение JS и CSS к HTML выполняется одинаковым образом. Отличие есть только в целесообразности формирования требуемого кода в реальном масштабе времени. То есть если потребность создания стиля или правила CSS в процессе работы сайта еще можно как-то понять, то необходимость создания JS-кода для сайта, на котором уже «сидит посетитель», можно отнести к атаке, вредоносной инфекции или иной попытке нарушить мирное существование сайта или нанести ущерб посетителю.
Естественное сочетание дерева элементов DOM, которое формирует браузер, получив HTML-поток от сервера, трансформируется через правила CSS в область просмотра браузера и к элементам дерева подключаются функциональности, описанные в JS-коде.
Синтаксис подключения JS-функционала к HTML
По существу, JavaScript работает всегда. Вопрос в том, насколько им пользуется разработчик сайта. Всегда было два варианта: подключение файла JS к HTML из внешнего файла и посредством вставки тега «script».
Внешние файлы JS, как и CSS, подключаются в разделе head (1). Внутренние теги script помещаются в разделе body (2). Вставок script может быть сколько угодно, но лишнее усердие здесь нецелесообразно. Удобно располагать скрипты JavaScript в начале страницы и в ее конце, а еще лучше — выносить их во внешние файлы в том количестве, которое определяется предметной областью.
Именуя внешние файлы осмысленным образом, подключение JS к HTML можно сделать понятным и удобным для целей тестирования и совершенствования.
Тонкости подключения скриптов JavaScript
Собственно, тело функции или переменной JS — это статика, которая приходит из потока HTML от сервера в браузер. Вызовы функций и использование переменных JS — это динамика, возникающая с момента прихода посетителя, загрузки страницы в браузер и ее активации.
В примере показано, как событию onload назначен обработчик GoPage (3). Это обычная функция на JavaScript, которая будет запущена, как только страница полностью загрузится. Она может изменить содержание страницы в зависимости от того, кто пришел, когда пришел, из какой доменной зоны и т.д.
Писать код под конкретную ситуацию на JS — значит загружать браузер и скрипт множеством условностей и лишним кодом. Вопросы локализации и формирование нужной функциональности удобнее выполнять на сервере.
Формируя корректный код на серверном языке, в браузер конкретного посетителя можно отправлять конкретную функциональность. В результате подключение JS к HTML будет различным для различных браузеров, устройств, посетителей, их пола, возраста, профессиональных интересов и т.д.
Фреймворки, шаблоны, CMS и другие инструментальные системы
Хороший инструмент всегда способствует хорошему результату. Нет сомнений в том, что популярная CMS или используемый повсеместно, часто без реальной надобности jQuery, свидетельствуют о высокой квалификации разработчика или просто позволяют быстро сделать работу.
Подключение JS к HTML в таком случае может создать проблему. Одно дело стандартный для CMS набор скриптов на JavaScript и правил CSS, другое дело — собственный файл, который нужно знать, где и как подставить, чтобы он правильно вызвался и не создал проблем.
Учитывая этот момент, разработчики инструментов стараются предоставить потребителю возможность создавать объекты сайтов без доступа к файлам, в которых хранятся скрипты, стили или иные ресурсы. Можно просто выполнить подключение JS к HTML в виде функции-обработчика события кнопки. Куда попадет тело скрипта, ведает только фреймворк или CMS.
Коллектив, создающий сайт, обычно не задумывается над этим, руководствуясь современным правилом «пока все работает».
По сути, если в основе сайта лежит продвинутый инструмент, то неважно, как выполнено подключение JS к HTML.
Bootstrap, например, создавался как свободный набор инструментов для создания сайтов, ориентируясь на CSS и HTML, но теперь это мощный JS-функционал. Редкий разработчик рискнет дополнять bootstrap своими идеями, подавляющее большинство будет использовать только его функции.
JavaScript и «идея» сайта
Душевность и человечность трудно отнести к программированию. Далеко не всякую простую семантику можно уложить в современный синтаксис. Нет сомнения, что CMS, шаблоны и множество современных идей хороши, но они лишают разработчика возможности реализовать свои собственные идеи.
JavaScript — функциональность сайта. Это действия сайта по «восприятию» посетителя и ведению с ним адекватного диалога. Отдавать на откуп разработчикам CMS, фреймворков или шаблонов контакт сайта и человека — не самое лучшее решение.
Когда разработчик сайта реализует собственный функционал (JS) и собственный стиль (CSS) в собственном HTML, это приобретает собственный смысл, без внешнего мнения, пусть даже самого авторитетного и квалифицированного.