Определение языка сценариев
Хотя JavaScript изначально был языком сценариев для Всемирной паутины и остается в ней самым распространенным, он не единственный. Единственной серьезной альтернативой JavaScript является язык Visual Basic Scripting Edition корпорации Microsoft1, который поддерживается Internet Explorer.
Поскольку существует возможность использования более одного языка сценариев, необходимо в этом случае сообщить веб - браузеру, на каком языке написан сценарий. Это позволит корректно интерпретировать сценарии и пропускать сценарии, написанные на языках, которые не поддерживаются.
Существует возможность определить язык сценариев для всего файла с помощью HTTP-заголовка Content-Script-Type в теге <meta>. Чтобы указать, что все сценарии написаны на языке JavaScript (если не указано иное), достаточно просто поместить следующий тег в область <head> HTML - документа:
<meta http-equiv="Content-Script-Type" content="text/javascript">
На практике браузеры полагают, что JavaScript является языком сценариев по умолчанию, даже если сервер не присылает заголовок Content-Script-Type и в странице опущен тег <meta>. Однако если язык сценариев по умолчанию не определен или возникает необходимость изменить значение по умолчанию, необходимо использовать атрибут type тега <script>:
<script type="text/javascript"></script>
Традиционно для программ на языке JavaScript указывался MIME-тип "text/javascript". Другой используемый тип – "application/x-javascript" (где префикс x- указывает, что это нестандартный экспериментальный тип). Тип "text/javascript" стандартизован в RFC 4329 как наиболее распространенный. Однако поскольку JavaScript_программы в действительности не являются текстовыми документами, такой тип считается устаревшим и рекомендуется указывать вместо него тип "application/javascript" (без префикса x-). Однако в настоящее время тип "application/javascript" не обладает достаточной поддержкой. Как только эта поддержка появится, правильнее будет использовать теги <script> и <meta> следующим образом:
<script type="application/javascript"></script>
<meta http-equiv="Content-Script-Type" content="application/javascript">
Атрибут language
Когда тег <script> только появился, он был просто нестандартным расширением языка HTML и не поддерживал атрибут type. В то время язык сценариев определялся с помощью атрибута language:
<script language="JavaScript"><!--
// Здесь располагается JavaScript - код
--> </script>
А если сценарий был написан на языке VBScript, атрибут выглядел следующим образом:
<script language="VBScript">
' Программный код VBScript (' – признак комментария, аналог // в JavaScript)
</script>
Спецификация HTML 4 стандартизует тег <script>, но отвергает атрибут language, т. к. стандартный набор имен языков сценариев не определен. Однако иногда можно встретить тег <script>, в котором используются и атрибут type (в соответствии с требованиями стандарта), и атрибут language (для сохранения обратной совместимости с устаревшими версиями браузеров):
<script type="text/javascript" language="JavaScript"></script>
Атрибут defer
Во время выполнения сценария может вызываться метод document.write() для динамического добавления содержимого в документ. Поэтому когда HTML - анализатор встречает сценарий, он должен прекратить разбор документа и ожидать, пока сценарий не завершит свою работу. Стандарт HTML 4 определяет атрибут defer для тега <script>, который имеет отношение к этой проблеме.
С помощью атрибута defer тега <script> можно сообщить браузеру, чтобы он спокойно продолжал обработку HTML-документа и отложил исполнение сценария до тех пор, пока не будет найден сценарий, выполнение которого отложено быть не может.
Задержка исполнения сценария полезна, когда сценарий загружается из внешнего файла; если исполнение сценария не задержать, браузер вынужден будет ждать окончания загрузки и только потом сможет продолжить разбор содержимого документа. Задержка исполнения может привести к повышению производительности браузеров, способных использовать преимущества атрибута defer. В HTML у атрибута defer не может быть значения; он просто должен присутствовать в теге:
<script defer>
// Любой JavaScript - код, не вызывающий document.write()
</script>
Однако в XHTML значение этого атрибута должно быть указано:
<script defer="defer"></script>
К настоящему моменту Internet Explorer был единственным браузером, использующим атрибут defer. При этом задержка выполняется, только когда тег <script> содержит атрибут src. Однако реализация задержки выполнена не совсем корректно, поскольку исполнение сценария с атрибутом defer всегда откладывается до окончания разбора документа, а не до того момента, когда встретится первый сценарий, исполнение которого нельзя отложить. Это означает, что отложенные сценарии в IE могут исполняться не в том порядке, в котором они располагаются в теле документа. В результате некоторые функции или переменные, востребованные в сценариях, исполнение которых не откладывалось, могут быть не определены.
Тег <noscript>
Язык разметки HTML определяет элемент <noscript>, предназначенный для хранения отображаемого содержимого на случай, когда в браузере включен режим, запрещающий исполнение JavaScript - кода.
В идеале веб - страницы должны создаваться так, чтобы JavaScript - код лишь расширял их функциональные возможности, а в случае его отключения страницы сохраняли свою работоспособность. Однако если это невозможно, с помощью тега <noscript> можно известить пользователя о том, что требуется включить поддержку JavaScript и, возможно, предоставить ссылку на альтернативную страницу.
Тег </script>
В какой_то момент вам может потребоваться с помощью метода document.write() или свойства innerHTML вывести некоторый другой сценарий (обычно в другое окно или фрейм). Тогда для завершения генерируемого сценария потребуется вывести тег </script>. Здесь необходима осторожность – HTML - анализатор не пытается понять JavaScript - код, и встретив строку "/script" даже внутри кавычек, он предположит, что это закрывающий тег выполняемого в данный момент сценария. Чтобы обойти это препятствие, разбейте тег на части и запишите его, например, в виде выражения "</" + "script>", как показано в следующем фрагменте:
<script>
f1.document.write("<script>");
f1.document.write("document.write('<h2>Это сценарий в кавычках</h2>')");
f1.document.write("</" + "script>");
</script>
В качестве альтернативы можно экранировать символ слэша / в теге </script> с помощью символа обратного слэша:
f1.document.write("<\/script>");
В XHTML сценарии заключаются в секцию CDATA и потому проблема с закрывающим тегом </script> никак не проявляется.
Нестандартные атрибуты тега <script>
В корпорации Microsoft были определены два нестандартных атрибута тега <script>, которые работают только в Internet Explorer. Атрибуты event и for позволяют задавать обработчики событий с помощью тега <script>. Атрибут event определяет имя обрабатываемого события, а атрибут for– имя, или идентификатор (ID), элемента, для которого этот обработчик предназначается. Сценарий исполняется, когда в заданном элементе возникает заданное событие.
Эти атрибуты работают только в IE, а достигаемый ими эффект легко может быть реализован другими способами. Эти атрибуты никогда не следует использовать – они упомянуты здесь лишь для того, чтобы вы знали об их существовании, если вдруг придется столкнуться с ними в существующих веб - страницах.
При написании скрипта следует учитывать следующие особенности языка.
· В языке Java Script важен регистр! Например, переменные x и X – это разные переменные.
· Нельзя свободно переносить на другие строки элементы выражений. Скажем, если при выводе на печать используется метод document.write(), то необходимо разместить команду в одной строке. В случае, если часть выражения не помещается, нужно разбить строку вывода на два оператора.
· Отдельные операторы отделяются «;»
Дата добавления: 2016-01-09; просмотров: 1116;