Тег <script> поддерживает атрибут src. Значение этого атрибута задает URL_ад_ рес файла, содержащего JavaScript_код. Используется он следующим образом:
<script src="../../javascript/util.js"></script>
Файл JavaScript_кода обычно имеет расширение .js и содержит JavaScript_код в «чистом виде» без тегов <script> или любого другого HTML_кода.
Тег <script> с атрибутом src ведет себя точно так же, как если бы содержимое ука_ занного файла JavaScript_кода находилось непосредственно между тегами <script> и </script>. Любой код, указанный между этими тегами, игнорируется броузера_
260 Глава 13. JavaScript в веб*броузерах
ми. Обратите внимание, что закрывающий тег </script> обязателен даже в том случае, когда указан атрибут src и между тегами отсутствует JavaScript_код.
Использование тега с атрибутом src дает ряд преимуществ:
• HTML_файлы становятся проще, т. к. из них можно убрать большие блоки JavaScript_кода, что помогает отделить содержимое от поведения. Атрибут src является краеугольным камнем применения парадигмы ненавязчивого Java_ Script_кода (подробнее об этой парадигме рассказывалось в разделе 13.1.5).
• JavaScript_функцию или другой JavaScript_код, используемый несколькими HTML_файлами, можно держать в одном файле и считывать при необходимо_ сти. Это уменьшает объем занимаемой дисковой памяти и намного облегчает поддержку программного кода.
• Когда JavaScript_функции требуются нескольким страницам, размещение кода в виде отдельного файла позволяет броузеру кэшировать его и тем са_ мым ускорять загрузку. Когда JavaScript_код совместно используется не_ сколькими страницами, экономия времени, достигаемая за счет кэширова_ ния, явно перевешивает небольшую задержку, требуемую броузеру для от_ крытия отдельного сетевого соединения и загрузки файла JavaScript_кода при первом запросе на его исполнение.
• Атрибут src принимает в качестве значения произвольный URL_адрес, поэто_ му JavaScript_программа или веб_страница с одного веб_сервера может вос_ пользоваться кодом (например, из библиотеки подпрограмм), предоставляе_ мым другими веб_серверами.
У последнего пункта есть важное следствие, имеющее отношение к обеспечению безопасности. Политика общего происхождения, описываемая в разделе 13.8.2, предотвращает возможность взаимодействия документов из одного домена с со_ держимым из другого домена. Однако следует отметить, что источник получения самого сценария не имеет значения, значение имеет источник получения доку_ мента, в который встраивается сценарий. Таким образом, политика общего про_ исхождения в данном случае неприменима: JavaScript_код может взаимодейство_ вать с документами, в которые он встраивается, даже если этот код получен из другого источника, нежели сам документ. Включая сценарий в свою веб_страницу с помощью атрибута src, вы предоставляете автору сценария (или веб_мастеру до_ мена, откуда загружается сценарий) полный контроль над своей веб_страницей.