WDH: Предисловие

Предисловие

"Всякий писатель, предмет выбирай,
соответственный силе;
Долго рассматривай, пробуй, как ношу,
поднимут ли плечи."

Гораций, "Наука поэзии"
(перев. М. Дмитриева)

Общие замечания

Такая сложная система программно-аппаратных средств, как Интернет, неизбежно воспринимается разными людьми по-разному. Для одних Сеть — это переход человечества на принципиально новый уровень информационного взаимодействия, открывающий путь к единому и открытому обществу. Другие видят в ней источник опасности, способной превратить людей в компьютеризированных зомби и окончательно разрушающей систему человеческих взаимосвязей, и без того немало подорванную развитием современной цивилизации. Автору хочется верить, что истина, как обычно, изберет средний путь, и Сеть не окажется ни чудодейственной панацеей, ни смертельной ловушкой.

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

Несмотря на то, что большинству россиян доступ к Сети пока не по карману, развитие отечественной сети все же идет достаточно быстро. Опыт США и Европы показывает, что спрос на Веб-разработчиков в России будет ежегодно увеличиваться геометрически. Учитывая, что создание мало-мальски серьезного Веб-узла достаточно трудоемко и требует взаимодействия специалистов разного профиля, уже в ближайшие 2 — 3 года в нашей стране должны появиться многочисленные профессиональные коллективы Веб-разработчиков, объединяющие постановщиков, дизайнеров и программистов. Одним из обязательных условий их появления служит создание учебников и справочников по разработке и дизайну Веб-узлов, чем и объясняется появление настоящей книги. Она была задумана как базовый справочник для серии публикаций проекта Suncloud.Ru, посвященных обучению Веб-разработчиков.

WDH+ См. также мои статьи WDH+: Веб-специалисты: классификация и требования и WDH+: Объем знаний современных компьютерных наук.

Поставленные цели

Объем литературы на русском языке, посвященной тем или иным аспектам Веб-разработки, достаточно велик (см. Библиографию), поэтому возникает вопрос: а зачем вообще писать еще один справочник на эту тему? Дело в том, что большинство указанных в библиографии книг относятся к одной из следующих категорий:

  • Научно-популярная литература, посвященная основным понятиям, связанным с Интернетом и его возможностями. Понятно, что к нашей теме она не относится.
  • Книги типа "Язык HTML за 15 минут" или "Как быстро создать свою Веб-страницу". С одной стороны, такие книги придают читателю уверенности в том, что не так страшен черт, как его малюют профессионалы, и это хорошо. С другой стороны, они сродни бестселлерам из разряда "Как стать богатым и счастливым, не выходя из-за обеденного стола" и порождают плеяду "специалистов", которые всерьез начинают называть себя Веб-разработчиками или Веб-дизайнерами, а это уже очень плохо. Веб-разработка — такое же серьезное ремесло, как любое другое, и относится к нему нужно с уважением.
  • Книги, подробно освещающие отдельные аспекты Веб-разработки. Это серьезная и полезная литература, но очень хочется иметь под рукой справочник, в котором описан (и подробно) весь инструментарий, который может понадобиться для решений той или иной задачи, которая перед вами только что возникла и требует быстрого решения. Таких справочников пока на русском языке нет.

WDH+ См. также мою статью WDH+: О технической документации в Рунете.

При написании данного справочника автор преследовал три цели, которые не решены в существующей литературе:

  1. дать читателю комплексное представление о существующих технологиях Веб-программирования (количество этих технологий достаточно велико, и даже специалисты не всегда имеют целостную картину их взаимодействия);
  2. предоставить ему инструментарий, позволяющий решать встающие перед разработчиком задачи оптимальными способами (а различных способов решения задач Веб-разработки, как правило, не один и не два);
  3. сделать изложение замкнутым в себе, т. е. включить в него все необходимые читателю сведения (это требует большого количества вспомогательных таблиц и приложений, т. к. многие жизненно важные сведения разбросаны по различным и не всегда легкодоступным источникам).

Стиль изложения

Приступая к написанию книги, посвященной Веб-разработке, автор должен прежде всего определить круг своих читателей. Поэтому хотим предупредить вас, что этот справочник предназначен для тех, кто намерен серьезно и профессионально заняться разработкой Веб-страниц, понимая, что обучиться этому с наскока нельзя. Соответственно, стиль изложения достаточно сложен для начинающего, хотя все сведения, необходимые для освоения Веб-разработки "с нуля", здесь приведены. Сложность изложения, разумеется, не самоцель — она естественно вытекает из того объема сведений, которые необходимо знать, чтобы стать специалистом по созданию Веб-узлов. Более того, мы старались всюду, где это возможно, находить компромисс между строгостью описания и неформальным методом подачи материала. В частности, мы нигде не даем формальных описаний синтаксиса (они нужны разработчикам компиляторов и интерпретаторов, а не программистам, которые этими компиляторами/интерпретаторами пользуются). Для облегчения понимания излагаемых сведений все вновь вводимые понятия и конструкции сопровождаются примерами. Тем не менее, изучение этого справочника потребует от вас изрядных усилий и длительного времени.

Следует учитывать и ограничения, которые налагаются жанром. Справочник, особенно такого объема, как данный, неизбежно отличается от учебников и других пособий сухостью изложения и отсутствием комплексных содержательных примеров. Поэтому важным дополнением к нему служат архив нашей почтовой рассылки "Солнечный ветер" и раздел веб-мастерской WDH+, которые содержат большое количество примеров использования Веб-технологий, возникших из практики создания сайтов нашей студией и ее коллегами.

Терминология

Поскольку русская терминология, связанная с Интернетом, еще не устоялась, автор обращает на нее особое внимание. Основным принципом при переводе любых терминов был такой: если суть термина можно выразить русским словом, то используется оно, а не калька соответствующего английского слова. Поэтому, например, слово behavior переведено как реакция, browser как обозреватель, chat как беседа, а fragment identifier как закладка. С другой стороны, английские аббревиатуры употребляются как они есть, без замены их русскими аббревиатурами: URI, CGI, ASP и т. д. Единственный случай, когда автор "поступился принципами", это перевод слов Internet и World Wide Web. Internet мы либо переводим как Сеть, либо используем транслитерацию Интернет; это синонимы, и выбор одного из них определяется чисто стилистическими соображениями. Для World Wide Web используются либо обозначение WWW, либо транслитерация Веб, особенно в сложных словах: Веб-разработчик, Веб-программирование, Веб-сервер, Веб-страница, Веб-мастер. Последний термин заслуживает отдельного комментария. Дело в том, что в отечественной практике он постоянно употребляется как синоним Веб-разрабочика (это вызвано ассоциацией русского слова мастер с авторством изделия). Но английское слово master означает хозяин, а Веб-мастер, соответственно, это администратор Веб-сервера или Веб-узла! Именно в таком значении мы и употребляем этот термин.

Обзор содержания

Справочник разбит на следующие части:

  1. «Веб-страницы: язык HTML». HTML — это lingua franca современных Веб-документов и, естественно, мы начинаем рассмотрение Веб-разработки с его описания. В этой части дается полное описание языка HTML согласно его действующей версии 4.01 и обзор новой версии языка XHTML 1.0, которая должна стать Веб-стандартом в ближайшее время. Кроме того, для каждого элемента языка описано, как он реализован в популярных Веб-обозревателях.
  2. «Каскадные таблицы стилей: язык CSS». Если HTML позволяет описать структуру и содержание документа, то таблицы стилей определяют его внешний вид при отображении на экране или печати на принтере. Здесь приводятся как полное описание стандарта CSS 2, так и соответствие ему существующих реализаций.
  3. «Сценарии клиента: язык JavaScript». Сценарии, включенные в Веб-документ, обеспечивают его взаимодействие с пользователем и динамическое изменение отображаемой информации под воздействием внешних событий. В этой части приведено описание ядра наиболее популярного сценарного языка JavaScript и его реализаций в основных обозревателях.
  4. «Динамические Веб-страницы: технологии DHTML». Dynamic HTML возник как набор методов динамического создания и изменения Веб-страниц путем вызова из HTML-документа сценариев. Однако, развитие этих методов привело к полному пересмотру концепции Веб-документа и формированию понятия объектной модели документа (DOM). Именно DOM, его реализация в обозревателях Microsoft и Netscape и соответствующая клиентская среда языка JavaScript служат предметом рассмотрения в этой части, которая является самой большой по объему и, несомненно, центральной в нашем справочнике.
  5. «Приложения клиента: язык Java». Java-аплеты — это платформо-независимые программные модули, которые загружаются Веб-обозревателем с сервера и исполняются на стороне клиента. Несмотря на то, что сценарная составляющая DHTML уменьшила популярность аплетов, язык Java остается важным средством для реализации сложных программ, вызываемых из Веб-страницы.
  6. «Сценарии сервера: интерфейс CGI и язык PERL». Здесь мы впервые переходим на сторону сервера и рассматриваем стандартный интерфейс CGI и реализацию CGI-сценариев на очень популярном и мощном языке обработки текстов PERL.
  7. «Приложения сервера: технологии ASP и JSP». Современное состояние Веб-разработки характеризуется переходом от разрозненных Веб-страниц к интегрированным Веб-приложениям. В этой части рассматриваются две основные технологии создания Веб-приложений: Active Server Pages корпорации Microsoft и Java Server Pages корпорации Sun.
  8. «Объекты данных: язык XML». Язык XML, по общему признанию, является основой для Веб-разработки ближайшего десятилетия. В отличие от HTML, он позволяет нам описывать любые структуры данных с помощью создания собственных тегов и, тем самым, разрабатывать собственные специализированные языки описания документов.
  9. «Таблицы стилей для объектов данных: язык XSL». На первый взгляд, XSL относится к XML так же, как CSS к HTML. Однако, его возможности намного больше: он не только обеспечивает описание стилей отображения XML-документов, но и обеспечивает практически любые преобразования исходного XML-документа в новые документы.
  10. «Векторная графика: языки VML и SVG». В этой части описываются два XML-приложения, а именно языки векторной графики VML и SVG. Оба они поддерживают создание достаточно сложных графических изображений в виде небольших по объему текстовых фрагментов.
  11. «Виртуальная реальность: язык VRML». Переходя от статической графике к созданию динамических виртуальных пространств, мы попадаем в мир VRML, языка с непревзойденными возможностями по моделированию на экране любых событий реальности.
  12. «Анимация: технологии Shockwave и Flash». Из многочисленных способов включения в Веб-страницу анимированных изображений мы выбрали технологии фирмы Macromedia, поскольку они пользуются наибольшей популярностью среди разработчиков и удачно сочетают относительную простоту использования с богатством возможностей.

Выражение признательности

Автор выражает искреннюю благодарность следующим людям, без которых появление этой книги было бы невозможно:

  • Максиму Баклановскому — за разработку фреймового варианта просмотра справочника и за многочисленные плодотворные обсуждения его содержания;
  • Леониду Волканину — за техническую поддержку проекта;
  • Леониду Салмину — за советы по графическому оформлению справочника;
  • моей жене Ольге — за ее долготерпение и за многое другое, не имеющее никакого отношения к Веб-разработке.

Очевидно, что справочник такого объема, как этот, не может быть свободен от ошибок и недостатков. Поэтому автор будет благодарен за любые конструктивные замечания, которые позволят уточнить или дополнить текст, предлагаемый Вашему вниманию. Кроме того, они будут означать, что эти страницы кто-то читает, а, значит, работа делалась не напрасно. Так что пишите и до встречи в Сети!

16 ноября 2000 г.


WDH: Введение

Введение

"Закоренелый циник определил бы Интернет как средство имитировать полезную деятельность и одурачивать обладателей модемов красивыми картинками."

Виктор Стоун,
менеджер по разработкам
Microsoft Corporation

Немного истории

Все это началось в 1969 г., когда Пентагон создал агентство ARPA (Advanced Research Projects Agency) и поручил ему разработку нецентрализованной компьютерной сети, которая должна функционировать даже тогда, когда многие ее части будут отключены или разрушены в результате применения ядерного оружия. Проект был назван ARPANet (ARPA Network). Для решения поставленной задачи был разработан новый сетевой протокол IP (Internet Protocol), который определял, как электронные сообщения упаковываются, адресуются и передаются по сети. Окончательный стандарт был сформулирован в 1981 г. под названием TCP/IP (Transmission Control Protocol over Internet Protocol). Он позволил пользователям подключать различные службы их сетей к ARPAnet, которая вскоре получила название Интернет (INTERNET = INTER-connected group of NETworks) или просто Сеть (с большой буквы, в отличие от всех остальных сетей). В 70-е и 80-е годы ARPANet продолжала расти; кроме того, она стала высокоскоростной сетью за счет подключения к ней нескольких мощных суперкомпьютеров.

В это же время компьютерными сетями начали пользоваться ученые и исследователи различных специальностей, и, в конце концов, Национальный научный фонд США (NSF, National Science Foundation) перенял технологию TCP/IP у ARPANet и создал собственную распределенную сеть сетей NSFNet, способную обрабатывать гораздо большие объемы данных. В 1985 г. NSF открыл доступ к NSFNet всем образовательным организациям, академическим институтам, правительственным учреждениям и международным научно-исследовательским организациям. В 1989 г. проект ARPANet был закрыт Пентагоном из-за отсутствия средств и поддержки со стороны военных.

В 1987 г. к Интернету присоединился Европейский центр ядерных исследований (CERN, Conseil Europeen pour la Recherche Nucleaire) в Женеве. Этот факт не имел бы никакого значения для истории Сети, если бы там не работал Тим Бернерс-Ли (Tim Berners-Lee). В 1989 г. он и несколько его коллег разработали систему распределенных гипертекстовых документов, которой суждено было стать следующим этапом в развитии Интернета. Их усилиями были созданы протокол передачи гипертекстов HTTP, язык HTML и концепция Всемирной паутины (World Wide Web, WWW). Наконец, в 1993 г. Марк Андрисен (Marc Andreessen) и Эрик Бина (Eric Bina) из NCSA (The National Center for Supercomputing Applications) в Иллинойсе, США написали первый коммерческий Веб-обозреватель Mosaic, который и вызвал взрыв интереса к WWW.

Последующее развитие WWW проходило под знаком "войны обозревателей" за рынок. Эта война началась в 1994 г. с того, что команда разработчиков Mosaic перешла в корпорацию Netscape Communications и создала Netscape Navigator, надолго определивший облик стандартного Веб-обозревателя. Вскоре корпорация Microsoft оценила размер потенциального рынка пользователей Веб и вышла на него с собственным продуктом Internet Explorer. С тех пор и по сей день эта "сладкая парочка" (получившая в американском народе прозвище Microscape) борется за сердца и деньги пользователей всего мира.

В 90-е годы Интернет разрастается невероятными темпами, причем львиная доля его мощностей используется двумя подсистемами: World Wide Web и электронной почтой. По оценкам специалистов1, количество компьютеров, подключенных к Интернету, ежегодно удваивалось. В марте 2000 г. к Интернету было подключено более 300 миллионов пользователей более чем в 100 странах мира.

Веб глазами программиста

Итак, Интернет — это распределенная компьютерная сеть, объединяющая громадное количество отдельных сетей посредством единого межсетевого протокола TCP/IP. При этом пользователь "видит" только свой персональный компьютер (клиент) и сервер той сети, к которой он подключен — либо как рабочая станция локальной сети, либо посредством модема и телефонного канала. Доступ его сервера к остальным Интернет-серверам обеспечивается автоматической маршрутизацией через специальные устройства (т. н. рутеры). К счастью, для успешной разработки Веб-страниц нам нет нужды ни вникать в этот процесс, ни изучать протокол TCP/IP.

Общая архитектура Интернета

WWW, как подсистема Интернета, также основывается на архитектуре клиент-сервер. Отличие состоит в том, что и на сервере, и на клиенте должно быть установлено дополнительное программное обеспечение — Веб-сервер и Веб-обозреватель соответственно. Это программное обеспечение поддерживает стандартный протокол передачи гипертекстов (HTTP), а также ряд других протоколов, в частности, протокол передачи файлов (FTP). Архитектура клиент-сервер означает, что взаимодействие пользовательского компьютера с Интернетом происходит так:

  • пользователь вводит адрес (URI) Веб-документа, который он хочет просмотреть;
  • Веб-обозреватель формирует соответствующий запрос к Веб-серверу;
  • Веб-сервер находит в Сети запрошенный документ и передает его обозревателю в качестве отклика на запрос;
  • обозреватель интерпретирует полученный документ и отображает его пользователю.
Архитектура World Wide Web

Как мы увидим позже, реальная картина несколько сложнее: обозреватель может не только запрашивать готовые документы, но и запускать на сервере программы, которые генерируют Веб-страницы на основе его запроса (например, при выборке из базы данных строк, отвечающих определенному критерию). Но пока для нас важно другое. Протоколы Сети и WWW разработаны так, чтобы работать на любом компьютере, независимо от его аппаратной "начинки" и операционной системы. Это означает, что Веб-документы должны правильно обрабатываться любым Веб-сервером и отображаться любым обозревателем. К сожалению, не все так хорошо в этом лучшем из миров — несмотря на существование стандартов и Веб-серверы, и обозреватели реализуют их не полностью или не совсем так, как предполагали авторы стандартов. Поэтому перед Веб-разработчиком встает проблема совместимости его продукта с программным обеспечением его потенциальных потребителей. Эта задача распадается на две неравнозначные подзадачи:

  1. На каком сервере разместить разработанные нами документы?
  2. В каких обозревателях они будут просматриваться?

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

Немного статистики

Из сказанного ясно, что нас должны волновать два вопроса:

  • Какой Веб-сервер установлен на нашем сервере и под какой операционной системой он работает?
  • Какими обозревателями пользуются наши потенциальные пользователи и в каких операционных системах они работают?

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

Интернет-серверы

Из диаграммы справа видно, что практически все серверы, подключенные к Интернету, работают под управлением всего двух семейств операционных систем. Это:
  • Unix-системы, включая Linux, BSD/OS Family, Solaris/SunOS и пр. (74% серверов);
  • Microsoft Windows NT Server (24% серверов).

Для нашего изложения не имеют особого значения различия между системами семейства Unix, поэтому в дальнейшем мы можем ограничиться рассмотрением двух операционных систем: Unix и Windows NT.

 Операционные системы серверов
Что касается Веб-серверов, работающих на этих Интернет-серверах, то, как показывает следующая диаграмма, абсолютное большинство составляют Веб-серверы Apache (62%), за которыми следуют Microsoft Internet Information Server (21%) и Netscape-Enterprise (7%). Доля остальных Веб-серверов (Zeus, Rapidsite, thttpd и пр.) не превышает в сумме 10%. Сопоставив две приведенные диаграммы, можно внести уточнение. Практически каждый Интернет-сервер — это:
  • либо Unix-система с Веб-сервером Apache (около 70% серверов),
  • либо Windows NT с Веб-сервером IIS (около 20% серверов).
 Веб-серверы

Компьютеры-клиенты

Если среди серверов пальму первенства уверенно держит Unix, то среди пользовательских рабочих станций Microsoft берет столь же уверенный реванш. Из диаграммы справа видно, что Microsoft Windows разных версий работает на 94% рабочих станций! Остальные 6% приходятся на долю Macintosh, WebTV и Windows 3.x. При этом рынок Windows 98 непрерывно растет за счет Windows 95, так что к тому моменту, когда вы будете читать этот текст, большая часть персональных компьютеров, подключенных к Интернету, будет работать под управлением Windows 98. | Операционные системы клиентов
И, наконец, рассмотрим состояние рынка Веб-обозревателей. 2000 год, по всей видимости, будет решающим в битве между Microsoft и Netscape. С каждым месяцем ряды поклонников обозревателей Netscape Navigator редеют. В мае 2000 г. доля Microsoft Internet Explorer всех версий составила 71%, Netscape Navigator всех версий — 26%, прочих обозревателей (WebTV, Opera и пр.) — 3%. Судя по всему, ситуация не изменится и с появлением Netscape 6, и уже к концу 2000 г. абсолютным лидером будет Internet Explorer 5.x. О причинах этого мы поговорим позже. | Веб-обозреватели

Выводы

Теперь мы можем ответить на поставленные выше вопросы.

  1. При создании своих Веб-страниц мы можем быть уверены в том, что практически все, кто будет к ним обращаться, сидят за компьютерами, работающими под управлением Microsoft Windows 95/98/NT. Это означает, что нам доступны все штатные ресурсы этих операционных систем, и наши HTML-документы могут запускать Java-аплеты и вызывать сценарии, которые будут пользоваться этими ресурсами.
  2. Сложнее ситуация с обозревателем, в котором отображаются созданные нами страницы. В большинстве случаев это будет Microsoft Internet Explorer 4.x или 5.x, но четверть наших потенциальных клиентов использует Netscape Navigator 4.x. Это приводит к определенным проблемам, т. к. даже статические HTML-документы эти обозреватели отображают немного по-разному. Если же мы включаем в наши документы динамически изменяемые элементы, то попадаем в зону полной несовместимости. По ряду причин, подробно изложенных в Части IV, а также исходя из приведенной статистики, при разработке динамических страниц следует ориентироваться на Internet Explorer 4.x/5.x, а в остальных обозревателях можно отображать статическую версию той же страницы, написанную на "минимальном" варианте языка HTML.
  3. Если, наконец, нашим Веб-страницам необходимо обращаться с какими-либо запросами к серверу, то следует исходить из следующего. На абсолютном большинстве серверов работает Веб-сервер Apache под управлением одного из вариантов операционной системы Unix. Однако, часть серверов, особенно обслуживающих интрасети, пользуется Microsoft IIS под управлением Microsoft Windows NT. Поэтому при написании серверных сценариев мы рекомендуем:
    • для Apache писать сценарии на языке PERL в соответствии с интерфейсом CGI (на большинстве Unix-серверов установлены интепретаторы PERL'а);
    • для Microsoft IIS писать сценарии на языке JavaScript и пользоваться технологией Active Server Pages (они встроены в службы Internet Information Server).

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

Инструментарий

Все приведенные в данном справочнике примеры HTML- и DHTML-документов, включая каскадные таблицы стилей, JavaScript-сценарии и VML-графику, проверялись на компьютере с процессором Pentium/MMX-233, работающем под управлением Microsoft Windows 98, в обозревателях Microsoft Internet Explorer 5.5, Netscape Navigator 4.7 и Mozilla/5.0 (M18). Для отладки сценариев использовался Microsoft Script Debugger 1.0.

Для создания и отладки Java-аплетов автор пользовался Microsoft SDK for Java 4.0 и виртуальной Java-машиной Microsoft Java VM Build 3240. Сценарии на языке PERL отлаживались и проверялись с помощью ActivePerl 5.6.0.613 for Windows, программы на языке VRML — с помощью PLATINUM World View 2.1 for Internet Explorer. Верификация XML-документов проводилась в Microsoft XML Notepad Beta 1.5, их отображение проверялось в обозревателе Microsoft Internet Explorer 5.5. Считаем важным подчеркнуть, что все перечисленные программные средства можно загрузить с соответствующих Веб-узлов бесплатно.

1 Статистические данные взяты из Internet Industry Almanac Внешняя ссылка.

2 Все данные приведены по состоянию на март-апрель 2000 г. Более свежую информацию см. на узлах: The Internet Operating System Counter Внешняя ссылка, Netcraft Web Server Survey Внешняя ссылка, StatMarket Внешняя ссылка.


WDH: Организации

Организации

"Внутренняя согласованность ценится больше
эффективной работы."

Артур Блох

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

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

WDH+ См. также WDH+: Адресное пространство Интернета, Организации Интернета и Присвоение уникальных номеров в Интернете.

Internet Society и его подразделения

ISOC (Internet Society) Внешняя ссылка

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

IAB (Internet Architecture Board) Внешняя ссылка

Группа технических советников ISOC, которая осуществляет:

  • надзор за архитектурой Интернета, включая его протоколы и связанные с ними процедуры;
  • надзор за созданием новых стандартов Интернета;
  • редактирование и публикацию серии документов RFC (Request for Comments);
  • консультации руководства ISOC по техническим, архитектурным и процедурным вопросам, связанным с Интернетом и его технологиями.

IETF (Internet Engineering Task Force) Внешняя ссылка

Открытое международное сообщество проектировщиков, ученых, сетевых операторов и провайдеров, созданное IAB в 1986 г., которое занимается развитием протоколов и архитектуры Интернета.

Вся техническая работа осуществляется в рабочих группах IETF, занимающихся конкретной тематикой (например, вопросами маршрутизации, транспорта данных, безопасности и т. д.). Работа в основном ведется через почтовые списки, но трижды в году проводятся собрания IETF.

Результаты деятельности рабочих групп оформляются в виде рабочих проектов (Internet drafts), которые затем используются ISOC для кодификации новых стандартов.

IESG (The Internet Engineering Steering Group) Внешняя ссылка

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

Техническая координация Интернета

IANA (Internet Assigned Numbers Authority) Внешняя ссылка

Служба, расположенная в Институте информатики Южной Калифорнии (Southern California's Information Sciences Institute) и отвечавшая за все уникальные числовые параметры Интернета до конца 1998 г.

ICANN (The Internet Corporation for Assigned Names and Numbers) Внешняя ссылка

ICANN была создана в октябре 1998 г. как технический координатор Интернета и взяла на себя функции, ранее исполнявшиеся IANA. Точнее, эта международная некоммерческая корпорация отвечает за присвоение и регистрацию следующих параметров, которые должны быть уникальными для правильного функционирования Интернета: имена доменов, IP-адреса и номера портов.

Стандартизация Веб

W3C (World Wide Web Consortium) Внешняя ссылка

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

Телекоммуникационные стандарты

ITU (International Telecommunication Union) Внешняя ссылка

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

ETSI (European Telecommunication Standarts Institute) Внешняя ссылка

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

Прочие стандартизующие организации

ISO (International Organization for Standardization) Внешняя ссылка

Международная федерация национальных стандартизующих организаций, основанная в 1947 г. и расположенная в Женеве. ISO разрабатывает и утверждает широкий круг международных стандартов, в том числе связанных с программированием и передачей данных.

INTA (International Trademark Association) Внешняя ссылка

Международная ассоциация владельцев торговых марок. Занимается защитой торговых марок и пропагандой их важности для мировой торговли.

WIPO (World Intellectual Property Organization) Внешняя ссылка

Специализированное агентство ООН по защите интеллектуальной собственности со штаб-квартирой в Женеве.

ECMA (European Computer Manufacturers Association) Внешняя ссылка

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

Unicode Consortium Внешняя ссылка

Международный консорциум, основанный в 1991 г. и занимающийся разработкой и поддержанием стандарта кодировки символов Unicode.


WDH: Спецификации и стандарты

Спецификации и стандарты

"Jura scripta vigilantibus sunt."
"Писаные законы бдительны."

Положение античного права

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

В предыдущем разделе отмечалось, что основой существования и развития Сети является набор определенных стандартов. В частности, все программные средства поддержки Веб (как со стороны сервера, так и со стороны клиента) должны соответствовать стандартам, разработка которых ведется под эгидой международного консорциума W3C. Но в реальности, как всегда, дело обстоит сложнее. Если стандарты нижнего и среднего уровня Интернета реализуются всеми разработчиками без существенных оговорок, то в разработке Веб-серверов и обозревателей разночтений намного больше. Фактическая ситуация напоминает гонку с преследованием: W3C разрабатывает новые концепции быстрее, чем производители программ успевают их реализовывать. Поэтому постоянно существует зазор между рекомендациями консорциума и их практическим воплощением, причем этот зазор стремительно перемещается. Мы, разумеется, оговариваем конкретные последствия сложившейся ситуации в соответствующих местах нашего справочника, но хотим обратить внимание читателя на то, что описанные здесь возможности прежде всего соответствуют стандартам, а не конкретным их реализациям. В большинстве случаев это не приводит к серьезным проблемам и позволяет разработчику надеяться на продление срока жизни его продукта.

Итак, в основу данной книги легли следующие стандарты:

  1. описание языка HTML 4.01 (http://www.w3.org/TR/html401 Внешняя ссылка) с учетом спецификации XHTML 1.0 (http://www.w3.org/TR/xhtml1 Внешняя ссылка); см. также русский перевод спецификации HTML 4.0;
  2. описание языка стилей CSS2 (http://www.w3.org/TR/REC-CSS2 Внешняя ссылка);
  3. спецификация Document Object Model 1.0 Level 1 (http://www.w3.org/TR/REC-DOM-Level-1 Внешняя ссылка) и Document Object Model 1.0 Level 2 (http://www.w3.org/TR/DOM-Level-2-Core Внешняя ссылка);
  4. описание языка XML 1.0 (http://www.w3.org/TR/REC-xml Внешняя ссылка);
  5. спецификация пространства имен XML (http://www.w3.org/TR/REC-xml-names Внешняя ссылка);
  6. рекомендация по заданию базового URI в XML (http://www.w3.org/TR/xmlbase Внешняя ссылка);
  7. рекомендация по включению таблиц стилей в XML (http://www.w3.org/TR/xml-stylesheet Внешняя ссылка);
  8. описание языка адресации XPath 1.0 (http://www.w3.org/TR/xpath Внешняя ссылка);
  9. описание языка указателей XPointer 1.0 (http://www.w3.org/TR/xptr Внешняя ссылка);
  10. описание языка связей XLink 1.0 (http://www.w3.org/TR/xlink Внешняя ссылка);
  11. описание структур языка XML Schema (http://www.w3.org/TR/xmlschema-1 Внешняя ссылка);
  12. описание типов данных языка XML Schema (http://www.w3.org/TR/xmlschema-2 Внешняя ссылка);
  13. описание языка таблиц стилей XSL 1.0 (http://www.w3.org/TR/xsl Внешняя ссылка);
  14. описание языка преобразований XSLT 1.1 (http://www.w3.org/TR/xslt Внешняя ссылка);
  15. спецификация модели и синтаксиса Resource Description Framework (http://www.w3.org/TR/REC-rdf-syntax/ Внешняя ссылка);
  16. спецификация схемы Resource Description Framework (http://www.w3.org/TR/rdf-schema/ Внешняя ссылка);
  17. спецификация интерфейса CGI 1.1 (http://hoohoo.ncsa.uiuc.edu/cgi/interface.html Внешняя ссылка);
  18. описание технологии ASP (http://msdn.microsoft.com/library/psdk/iisref/iiwaaspw.htm Внешняя ссылка);
  19. спецификация языка Java, 2е издание (http://java.sun.com/docs/books/jls/index.html Внешняя ссылка);
  20. спецификация виртуальной Java-машины, 2е изд. (http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html Внешняя ссылка);
  21. спецификация платформы Java 2, Standard Edition (http://java.sun.com/products/jdk/1.3/ Внешняя ссылка);
  22. спецификация платформы Java 2, Enterprise Edition (http://java.sun.com/j2ee/ Внешняя ссылка);
  23. спецификация технологии JavaBeans 1.01 (http://java.sun.com/beans/ Внешняя ссылка);
  24. спецификация технологии JSP 1.2 (http://java.sun.com/products/jsp/ Внешняя ссылка);
  25. спецификация Java-сервлетов 2.3 (http://java.sun.com/products/servlet/ Внешняя ссылка);
  26. описание языка JavaScript согласно ECMA-262 (http://www.ecma.ch/ecma1/stand/ECMA-262.HTM Внешняя ссылка) и ECMA-290 (http://www.ecma.ch/ecma1/stand/ECMA-290.HTM Внешняя ссылка);
  27. описание языка PERL 5.6.0 (http://www.activestate.com/ActivePerl/docs/index.html Внешняя ссылка);
  28. спецификация языка VML (http://www.w3.org/TR/NOTE-VML Внешняя ссылка);
  29. спецификация языка SVG 1.0 (http://www.w3.org/TR/SVG Внешняя ссылка);
  30. спецификация языка VRML 97 (http://www.vrml.org/Specifications/VRML97 Внешняя ссылка);
  31. стандарт кодировки символов Unicode 3.1 (http://www.unicode.org/ Внешняя ссылка);
  32. форматы кодировки символов UTF-8 (http://www.faqs.org/rfcs/rfc2279.html Внешняя ссылка) и UTF-16 (http://www.faqs.org/rfcs/rfc2781.html Внешняя ссылка);
  33. спецификация протокола HTTP 1.1 (http://www.ietf.org/rfc/rfc2616.txt Внешняя ссылка);
  34. стандартный синтаксис URI (http://www.ietf.org/rfc/rfc2396.txt Внешняя ссылка);
  35. обозначения языков согласно ISO 639 (http://www.oasis-open.org/cover/iso639a.html Внешняя ссылка);
  36. обозначения стран согласно ISO 3166 (http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1.html Внешняя ссылка);
  37. список зарегистрированных кодировок символов (ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets Внешняя ссылка);
  38. список зарегистрированных типов файлов MIME (ftp://ftp.isi.edu/in-notes/iana/assignments/media-types Внешняя ссылка).


WDH: Библиография

Библиография

"Много книг составлять — конца не будет,
И много читать — утомительно для плоти."

Экклесиаст
(перев. И. Дьяконова)

Интернет в целом | Сети и протоколы | Ресурсы
Интранет | Электронная почта | Безопасность
Веб-серверы | Веб-программирование | HTML, CSS, DHTML
XML | Java | JavaScript
VBScript | ActiveX | CGI и PERL
Active Server Pages | Веб-дизайн | Прочие вопросы

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

Интернет в целом

  1. Байков В. Д. Интернет от E-mail к WWW в примерах. СПб.: BHV, 1996. — 208 с.
  2. Байков В. Д., Предтеченский А. Г. Интернет: первые шаги в России. М.: Изд-во Буковского, 1996. — 158 с.
  3. Баричев С. Шагни в Internet самостоятельно. М.: Приор, 1998. — 144 с.
  4. Березин С., Раков С. Internet у вас дома. 2е изд. СПб.: BHV, 1999. — 752 с.
  5. Бурк Р. и др. Unix для Internet. Энциклопедия пользователя. Киев: ДиаСофт, 1999. — 496 с. + CD.
  6. Габбасов Ю. Ф. Internet 2000. Эффективные технологии работы в Сети. СПб.: BHV, 1999. — 448 с.
  7. Гаффин А. Путеводитель по глобальной компьютерной сети Internet. М.: Артос, 1996. — 274 с.
  8. Дьяконов В. П. Internet. Настольная книга пользователя. М.: Солон, 1999 — 576 с.
  9. Игер Б. Работа в Internet. М.: Бином, 1996. — 320 с.
  10. Карпенко С., Шишигин И. Internet в вопросах и ответах. СПб.: BHV, 1996. — 464 с.
  11. Кент П. INTERNET: следующий этап. М.: Компьютер ЮНИТИ, 1996. — 343 с.
  12. Кирк Ч. Internet: книга ответов. СПб.: Питер, 1998. — 384 с.
  13. Комягин В. Б. Современный самоучитель работы в сети Интернет. Самые популярные программы: практическое пособие. М.: Триумф, 1999. — 368 с.
  14. Кон А. Секреты Интернета. Ростов н/Д: Феникс, 2000. — 320 с.
  15. Коннекут Д. Использование Internet. 2е изд. Киев: Диалектика, 1997. — 300 с.
  16. Коцюбинский А. О., Грошев С. В. Современный самоучитель работы в сети Интернет. Быстрый старт: практическое пособие. М.: Триумф, 1999. — 320 с.
  17. Крейнак Дж., Хебрейкен Дж. Интернет Энциклопедия. СПб.: Питер, 1999. — 560 с.
  18. Левин Дж., Бароди К., Левин-Янг М. Секреты Internet для "чайников". 7е изд. Киев: Диалектика, 2000. — 320 с.
  19. Леонтьев Б. Тонкости, хитрости и секреты Internet. М.: Познавательная книга плюс, 1998. — 192 с.
  20. Мак-Брайд П. К. Internet for Windows 95. Ростов н/Д: Феникс, 1997. — 150 с.
  21. Мелихова Л. Г. (ред.) Интернет. Энциклопедия. СПб.: Питер, 2000. — 528 с.
  22. Пайк М. Internet в подлиннике. СПб.: BHV, 1996. — 640 с.
  23. Ровдо А. А. Путеводитель по современным компьютерным коммуникациям и Internet. Минск: Битрикс, 1998. — 208 с.
  24. Симонович С., Евсеев Г. Новейший самоучитель по работе в Интернете. М.: ДЕСС Ком, 2000. — 528 с.
  25. Соломенчук В. Интернет: краткий курс. СПб.: Питер, 1999. — 288 с.
  26. Толковый словарь по компьютерным технологиям и Internet. 6е изд. Киев: Диалектика, 1996. — 480 с.
  27. Хан Х. Харли Хан обучает работе в Internet. Киев: ДиаСофт, 2000 — 448 с.
  28. Хоникатт Дж. и др. Использование INTERNET. Специальное издание. Киев: Вильямс, 1998. — 592 с.
  29. Храмцов П. Б. Лабиринт Internet: практическое руководство. М.: Электроинформ, 1996. — 256 с.
  30. Штеффен Й. Internet: сотни полезных pецептов. Учебное пособие. Киев: BHV, 1996. — 464 с.
  31. Юрин А. Internet шаг за шагом. СПб.: Питер, 1997. — 304 с.

Сети, протоколы и оборудование Интернета

  1. Microsoft TCP/IP. Учебный курс. 2е изд. М.: Русская Редакция, 2000. — 344 с.
  2. Microsoft TCP/IP on Microsoft Windows NT 4.0. М.: Русская Редакция, 1999. — 500 с.
  3. Бакланов И. Г. ISDN и Frame Relay: технология и практика измерений. М.: ЭкоТрендз, 1999. — 188 с.
  4. Вильховченко С. Д. Модем 97. Выбор, установка, настройка. М.: ABF, 1997. — 560 с.
  5. Гиббонс Д. Использование модема. Киев: Диалектика, 1997. — 300 с.
  6. Золотов С. Протоколы Internet. СПб.: BHV, 1998. — 304 с.
  7. Кирк Ч. Internet-телефония. Минск: Попурри, 1998. — 176 с.
  8. Кирсанов Дм. Факс-модем: от покупки и подключения до выхода в Интернет. 3е изд. СПб.: Символ-Плюс, 1997. — 300 с.
  9. Кульгин М. В. Коммутация и маршрутизация IP/IPX-трафика. М.: КомпьютерПресс, 1998. — 320 с.
  10. Кульгин М. Технологии корпоративных сетей. СПб.: Питер, 1999. — 704 с.
  11. Леммл Т. Учебное руководство для специалистов MCSE: TCP/IP. М.: Лори, 1997. — 280 с. + CD.
  12. Найк Д. Стандарты и протоколы Интернета. М.: Русская Редакция, 1999. — 384 с.
  13. Олифер В. Г., Олифер Н. А. Компьютерные сети. Принципы, технологии, протоколы. СПб.: Питер, 1999. — 672 с.
  14. Олифер В., Олифер Н. Новые технологии и оборудование IP-сетей. СПб.: BHV, 2000. — 512 с.
  15. Паркер Т. TCP/ IP. Освой самостоятельно. М.: Бином, 1997. — 448 с.
  16. Ратбон Т. Модемы для "чайников". 3е изд. Киев: Диалектика, 1997. — 352 с.
  17. Саммерс Ч., Дюнц Б. Высокоскоростное цифровое соединение с Интернет. М.: Радио и связь, 1998. — 232 с.
  18. Семенов Ю. А. Протоколы и ресурсы Internet. М.: Радио и связь, 1996. — 320 с.
  19. Титтел Э. и др. TCP/IP. Экзамен 70-059. СПб.: Питер, 1999. — 416 с.
  20. Титтель Э. ISDN. Просто и доступно. М.: Лори, 1999. — 282 с.
  21. Хант К. Персональные компьютеры в сетях TCP/IP. Киев: BHV, 1997. — 384 с.
  22. Хейвуд Д. Внутренний мир Microsoft TCP/IP. Киев: ДиаСофт, 2000. — 496 с.

Ресурсы Интернета

  1. Берченко Н., Березовская И. Самоучитель по работе в Internet и каталог ресурсов. Киев: BHV, 1999. — 480 с.
  2. Желтые страницы Internet 2000. Русские ресурсы. СПб.: Питер, 2000. — 600 с.
  3. Леонтьев Б. Все лучшие русскоязычные ресурсы Internet: справочное пособие. М.: Познавательная книга плюс, 1999. — 176 с.
  4. Хан Х. Желтые страницы Internet & Web 2000. Международные ресурсы. СПб.: Питер, 2000. — 608 с.

Интранет

  1. Micro Modelling Associates, Inc. Секреты создания интрасетей. СПб.: Питер, 1999. — 592 с. + CD.
  2. Бремнер Л. М. и др. Intranet. Минск: Попурри, 1998. — 512 с.
  3. Грир Т. Сети интранет. М.: Русская Редакция, 2000. — 368 с.
  4. Дунаев С. Intranet-технологии. М.: Диалог-Мифи, 1997. — 288 с.
  5. Милославская Н. Г. и др. Интрасети: доступ в Internet, защита. Учебное пособие для ВУЗов. М.: Компьютер ЮНИТИ, 1999 — 527 с.
  6. Саймино Д. Сети интранет: внутреннее движение. М.: Бук Медиа Паблишер, 1997. — 352 с. + CD.
  7. Сокольский Н. Все об Intranet и Internet. М.: Элиот, 1998 — 256 с.
  8. Томас С. А. Создание intranet-сети в Windows NT 4.0. Киев: BHV, 1997. — 400 с.

Электронная почта

  1. Гиббсон Д. и др. Работа в E-Mail. М.: Бином, 1996. — 336 с.
  2. МакФедрис П. INTERNET E-Mail. М.: Компьютер ЮНИТИ, 1996. — 271 с.
  3. Шимми Б. Ф. Эффективное использование электронной почты. Ростов н/Д: Феникс, 1998. — 304 с.

Вопросы безопасности

  1. Айков Д. и др. Компьютерные преступления. Руководство по борьбе с компьютерными преступлениями. М.: Мир, 1999 — 351 с.
  2. Анин Б. Защита компьютерной безопасности. СПб.: BHV, 2000. — 384 с.
  3. Барсуков В. С., Водолазский В. В. Современные технологии безопасности. М.: Нолидж, 1999. — 496 с.
  4. Бэнкс М. Психи и маньяки в Интернете. Руководство по выживанию в киберпространстве. СПб.: Символ-Плюс, 1998. — 320 с.
  5. Вакка Дж. Безопасность Интранет. М.: Бук Медиа Паблишер, 1998. — 496 с. + CD.
  6. Вакка Дж. Секреты безопасности в Internet. Киев: Диалектика, 1997. — 512 с.
  7. Дымов В. Хакинг и фрикинг. Хитрости, трюки и секреты. М.: Познавательная книга плюс, 2000. — 176 с.
  8. Касперски К. Техника и философия хакерских атак. М.: Солон, 1999. — 272 с. + CD.
  9. Леонтьев Б. Хакеры & Internet. б/м,1998. — 428 с.
  10. Медведовский И. Д. и др. Атака на Internet. М.: ДМК, 1999. — 336 с.
  11. Петровский А., Леонтьев Б. Эффективный хакинг для начинающих и не только. М.: Познавательная книга плюс, 1999. — 192 с.
  12. Эдвардс М. Дж. Безопасность в Интернете на основе Windows NT. М.: Русская Редакция, 1999. — 656 с.

Веб-серверы

  1. Microsoft Internet Information Server. Учебный курс. М.: Русская Редакция, 1997. — 416 с. + CD.
  2. Microsoft Internet Information Server 4.0 и Microsoft Proxy Server 2.0. М.: Русская Редакция, 1999. — 700 с.
  3. Бабушкин М. и др. Web-сервер в действии. СПб.: Питер, 1997. — 272 с.
  4. Лори Б. и др. Apache: самый популярный Web сервер. Киев: BHV, 1997. — 288 с.
  5. Мэтьюз Р. Д. и др. Web-сервер под UNIX. СПб.: Символ-плюс, 1998. — 560 с.
  6. Пек С., Аррантс С. Web-сервер WebSite: Все необходимое для создани Web-узла. Киев: BHV, 1997. — 512 с. + CD.
  7. Петровски М. Internet Information Server 4.0. Киев: BHV, 1997. — 624 с.
  8. Фролов А. В. Сервер WEB своими руками. М.: Диалог-Мифи, 1997. — 288 с.

Интернет- и Веб-программирование в целом

  1. Вейтман В. Программирование для Web. Киев: Диалектика, 2000. — 368 с.
  2. Джамса К. Программирование в Web для профессионалов. Минск: Попурри, 1997. — 632 с. + CD.
  3. Джамса К., Коуп К. Программирование для Internet. СПб.: Питер, 1996. — 688 с.
  4. Заккар М. Разработка приложений для электронной коммерции на Oracle8i и Java. Киев: Вильямс, 2000 — 336 с.
  5. Смирнов В. М. и др. Создание Windows- и Internet-приложений в виде виртуальных книг. Учебное пособие. СПб.: BHV, 1998. — 254 с.
  6. Шапошников И. В. Интернет-программирование. СПб.: BHV, 2000. — 224 с.
  7. Шафран Э. Создание Web-страниц. Самоучитель. СПб.: Питер, 1999. — 320 с. + CD.

HTML, CSS, DHTML

  1. Айзекс С. Dynamic HTML. Секреты создания интерактивных Web-страниц. СПб.: BHV, 1999. — 496 с.
  2. Айзенменгер Р. HTML 3.2/4.0. Справочник. М.: Бином, 1998. — 368 с.
  3. Браун М. Р. и др. Использование HTML 4. Специальное издание. 4е изд. Киев: Вильямс, 1999 — 784 с.
  4. Браун М., Ханикатт Д. HTML 3.2 в подлиннике. СПб.: BHV, 1997. — 1040 с.
  5. Гончаров А. Самоучитель HTML. СПб.: Питер, 2000. — 240 с.
  6. Дарнелл Р. и др. HTML 4. Энциклопедия пользователя. Киев: ДиаСофт, 1998. — 688 с.
  7. Коржинский С. Настольная книга Web-мастера: эффективное применение HTML, CSS и JavaScript. М.: КноРус, 2000. — 304 с. + CD.
  8. МакФедрис П. Язык HTML. М.: Компьютер, 1996. — 311 с.
  9. Матросов А. В. и др. HTML 4.0 в подлиннике. Наиболее полное руководство. СПб.: BHV, 1999. — 672 с.
  10. Морис Б. HTML в действии. СПб.: Питер, 1997. — 256 с.
  11. Муллен Р. HTML 4: справочник программиста. СПб.: Питер, 1998. — 304 с.
  12. Паттерсон Л., Корнелиус Дж. Использование HTML 4. Киев: Вильямс, 1998. — 384 с.
  13. Пауэрс Ш. Динамический HTML. М.: Лори, 1998. — 363 с.
  14. Полянский А. Хитрости, трюки и секреты создания Web-страниц на базе языка гипертекстовых документов HTML 3.0-4.0. М.: Познавательная книга плюс, 2000. — 240 с.
  15. Хеслоп Б., Бадник Л. HTML с самого начала. СПб.: Питер, 1997. — 416 с.
  16. Хольцнер С. Dynamic HTML: руководство разработчика. Киев: BHV, 1999. — 400 с.
  17. Хольцшлаг М. Э. Использование HTML 4. Киев: Вильямс, 2000 — 1008 с.
  18. Хоумер А., Улмен К. Dynamic HTML: справочник. СПб.: Питер, 1999. — 512 с.
  19. Шарф Д. HTML 3.2. Справочник. СПб.: Питер, 1997. — 224 с.

XML

  1. Бумфрэй Ф. и др. XML. Новые перспективы WWW. М.: ДМК, 2000. — 688 с.
  2. Питтс Н. XML за рекордное время. М.: Мир, 2000. — 444 с.
  3. Питц-Моултис Н., Кирк Ч. XML в подлиннике. СПб.: BHV, 2000. — 736 с.
  4. Эдди С. Э. XML. Справочник. Наиболее полное руководство. СПб.: Питер, 1999. — 480 с.

Язык Java

  1. Арнольд К., Гослинг Дж. Язык программирования Java. СПб.: Питер, 1997. — 304 с.
  2. Баженова И. Ю. Язык программирования Java. М.: Диалог-Мифи, 1997. — 288 с.
  3. Бартлетт Н. и др. Програмирование на Java. Путеводитель. Киев: ДиаСофт, 1997. — 736 с.
  4. Вебер Дж. Технологии Java в подлиннике. СПб.: BHV, 1998. — 1104 с. + CD.
  5. Вейнер П. Языки программирования Java и JavaScript. М.: Лори, 1998. — 242 с.
  6. Волш А. И. Основы программирования на Java для World Wide Web. Киев: Диалектика, 1997. — 500 с.
  7. Гарольд Э. Р. JavaBeans. М.: Лори, 1999. — 332 с.
  8. Джамса К. Java. Библиотека программиста. Минск: Попурри, 1996. — 416 с.
  9. Мейнджер Д. Java: основы программирования. Киев: BHV, 1997. — 320 с.
  10. Морган М. Java 2. Руководство разработчика. Киев: Вильямс, 2000. — 720 с. + CD.
  11. Моррисон М. и др. Java 1.1. Энциклопедия пользователя. Киев: ДиаСофт, 1978. — 784 с.
  12. Нортон П., Станек У. Руководство Питера Нортона. Программирование на Java. М.: СК Пресс, 1998. Книга 1. — 552 с.; Книга 2 — 400 с.
  13. Ноутон П., Шилдт Г. Полный справочник по Java. Киев: Диалектика, 1998. — 592 с.
  14. Ноутон П., Шилдт Г. Java 2 в подлиннике. Наиболее полное руководство. СПб.: BHV, 2000. — 1072 с.
  15. Родли Дж. Создание Java-апплетов. Киев: ДиаСофт, 1996. — 384 с.
  16. Титтел Э. и др. Секреты Java. Киев: Диалектика, 1997. — 500 с.
  17. Томас М. и др. Секреты программирования для Internet на Java. СПб.: Питер, 1997. — 640 с. + CD.
  18. Фланаган Д. Java in a Nutshell: Полное руководство. Киев: BHV, 1998. — 450 с.
  19. Чен М. С. и др. Программирование на Java: 1001 совет. Минск: Попурри, 1997. — 640 с.
  20. Эферган М. Java: справочник. СПб.: Питер, 1998. — 448 с.

Язык JavaScript

  1. Александровский А. Д. Создание Web-страниц с использованием FrontPage 98 и JavaScript. М.: ДМК, 1998. — 368 с.
  2. Бранденбау Дж. JavaScript: сборник рецептов. СПб.: Питер, 2000. — 416 с.
  3. Вейнер П. Языки программирования Java и JavaScript. М.: Лори, 1998. — 242 с.
  4. Дарнелл Р. JavaScript: справочник. СПб.: Питер, 1999. — 192 с.
  5. Коржинский С. Настольная книга Web-мастера: эффективное применение HTML, CSS и JavaScript. М.: КноРус, 2000. — 304 с. + CD.
  6. Мейнджер Д. JavaScript: основы программирования. Киев: BHV, 1997. — 512 с.
  7. Федоров А. Г. JavaScript для всех. М.: КомпьютерПресс, 1998. — 384 с.
  8. Фролов А. В., Фролов Г. В. Сценарии JavaScript в активных страницах Web. М.: Диалог-Мифи, 1998. — 284 с.

Язык VBScript

  1. Ломакс П. Изучаем VBScript. Киев: BHV, 1998 — 624 с.
  2. Палмер С. VBScript и ActiveX: библиотека программиста. СПб.: Питер, 1999. — 368 с.
  3. Хиллер С. Microsoft Visual Basic Scripting Edition в действии. СПб.: Питер, 1997. — 448 с.

ActiveX в Веб-приложениях

  1. Армстронг Т. ActiveX: Создание Web-приложений. Киев: BHV, 1998. — 592 с. + CD.
  2. Деннинг А. ActiveX для профессионалов. СПб.: Питер, 1997. — 624 с. + CD.
  3. Джерол С. Секреты разработки Web-приложений на Visual Basic 5. СПб.: Питер, 1999. — 400 с. + CD.
  4. Палмер С. VBScript и ActiveX: библиотека программиста. СПб.: Питер, 1999. — 368 с.
  5. Роджерсон Д. Основы COM. М.: Русская Редакция, 1997. — 376 с. + CD.
  6. Справочник по автоматизации. Использование технологии ActiveX для создания программируемых приложений. М.: Русская Редакция, 1998. — 419 с.
  7. Чаппел Д. ActiveX и OLE технологии. Стратегии программирования. М.: Русская Редакция, 1997. — 320 с.

CGI и PERL

  1. Кристиансен Т., Торкингтон Н. Perl: библиотека программиста. СПб.: Питер, 2000. — 736 с.
  2. Маслов В. В. Основы программирования на языке Перл. М.: Радио и связь, 1999. — 144 с.
  3. Полянский А. Учебное пособие по CGI-программированию. М.: Познавательная книга плюс, 2000. — 176 с.
  4. Пэтчетт К., Райт М. CGI/Perl: создание программ для Web. Киев: BHV, 1999. — 624 с. + CD.
  5. Холзнер С. Perl: специальный справочник. СПб.: Питер, 2000. — 496 с.
  6. Шварц Р. Л., Кристиансен Т. Изучаем Perl. СПб.: BHV, 1999. — 320 с.

Active Server Pages

  1. Фролов А. В., Фролов Г. В. Сценарии JavaScript в активных страницах Web. М.: Диалог-Мифи, 1998. — 284 с.
  2. Хилайер С., Мизик Д. Программирование Active Server Pages. М.: Русская Редакция, 1999. — 296 с.

Веб-дизайн

  1. Бейн С., Грей Д. Как сделать красиво в Интернете. СПб.: Символ-Плюс, 1998. — 320 с.
  2. Водески Р. Графика для Web. Библия дизайнера. Киев: Диалектика, 1998. — 608 с.
  3. Вуд Л. Web-графика. Справочник. СПб.: Питер, 1997. — 224 с.
  4. Гультяев А. К. и др. Проектирование и дизайн пользовательского интерфейса. СПб.: КОРОНА принт, 2000. — 352 с.
  5. Кан Л., Логан Л. Мой узел Web. М.: Русская Редакция, 1996. — 232 с. + CD.
  6. Кирсанов Дм. Веб-дизайн. СПб.: Символ-Плюс, 1999. — 376 с.
  7. Коржинский С. Настольная книга Web-мастера: эффективное применение HTML, CSS и JavaScript. М.: КноРус, 2000. — 304 с. + CD.
  8. Ларсон М. Л. Освой самостоятельно создание Web-страниц с помощью Microsoft Office 97. М.: Бином, 1998. — 472 с.
  9. Леонтьев Б. Web-дизайн. Тонкости, хитрости и секреты. М.: Познавательная книга плюс, 1999. — 192 с.
  10. Паркер Р. С. Дизайн для Web и настольное издательство для "чайников". Киев: Диалектика, 1998. — 320 с.
  11. Пфаффенберг Б. Публикуемся на WEB! Минск: Попурри, 1997. — 336 с. + CD.
  12. Спейнаур С., Куэрсиа В. Справочник Web-мастера. Киев: BHV, 1997. — 368 с.
  13. Хоббс Л. Домашние странички Internet. Ростов н/Д: Феникс, 1998. — 160 с.
  14. Шафран Э. Создание Web-страниц. Самоучитель. СПб.: Питер, 1999. — 320 с. + CD.

Прочие вопросы

  1. Акоста Н. и др. Внутренний мир World Wide Web. Киев: ДиаСофт, 1998. — 544 с.
  2. Байков В. Интернет: поиск информации и продвижение сайтов. СПб.: BHV, 2000. — 288 с.
  3. Грибов Д. Е. Macromedia Flash 4. Интерактивная веб-анимация. М.: ДМК, 2000. — 672 с.
  4. Дадашев Т. М. Front Page 98. М.: Радио и связь, 1999. — 400 с.
  5. Дайсон П. Web-узел на базе Microsoft Internet Information Server. М.: Мир, 1997. — 591 с.
  6. Дайсон Э. Жизнь в эпоху Интернета. Release 2.0. М.: Бизнес и компьютер, 1998 — 400 с.
  7. Денисов А. Microsoft Internet Explorer 5: справочник. СПб.: Питер, 1999 — 448 с.
  8. Дик О., Глен Ф. Популярные Web-броузеры. Энциклопедия пользователя. Киев: ДиаСофт, 1998. — 464 с.
  9. Кент П. World Wide Web. М.: Компьютер ЮНИТИ, 1996. — 311 с.
  10. Кент П. Использование Netscape Communicator 4. Киев: Диалектика, 1997. — 336 с.
  11. Кенцл Т. Форматы файлов Internet. СПб.: Питер, 1997. — 320 с. + CD.
  12. Кирсанов Дм. Понятный Интернет: Практическое руководство по настройке и навигации с Netscape Navigator. СПб.: Символ-Плюс, 1997. — 260 с.
  13. Козье Д. Электронная коммерция. М.: Русская Редакция, 1999. — 288 с.
  14. Ланг К., Чоу Дж. Публикация баз данных в Интернете. СПб.:Символ-Плюс, 1997. — 480 с.
  15. Лехто К., Полонски В. FrontPage 98. Официальное руководство Microsoft. СПб.: BHV, 1998. — 400 с.
  16. Лоу Д. Internet Explorer 5 для Windows для "чайников". Киев: Диалектика, 1999. — 320 с.
  17. Мэтьюс М., Полсен Э. Front Page 98: полное руководство. Киев: BHV, 1999. — 762 с + CD.
  18. Мэтьюс М., Полсен Э. Front Page 2000 для пользователя. Киев: BHV, 1999. — 336 с.
  19. Нолден М. Знакомьтесь: World Wide Web. Киев: BHV, 1996. — 335 с.
  20. Окраинец К. Ф. WWW на кончиках ваших пальцев. Работа в Internet. М.: СК Пресс, 1997. — 192 с.
  21. Омельченко Л., Федоров А. Самоучитель Microsoft FrontPage 2000. СПб.: BHV, 1999. — 512 с.
  22. Перри П. Д. Секреты World Wide Web. Киев: Диалектика, 1996. — 576 с.
  23. Пузырев В. Эффективный IRC для начинающих и не только или как общатьс с другими людьми через Internet. М.: Познавательная книга плюс, 1999. — 176 с.
  24. Рассохин Д. Н., Лебедев А. И. World Wide Web — Всемирна Информационная Паутина в сети Internet. М.: МГУ, 1997. — 208 с.
  25. Саммит П. М., Саммит М. Д. Создание Web-публикаций в FrontPage. М.: Лори, 1998. — 312 с. + CD.
  26. Смирнов В. М. Создание Windows- и Internet-приложений в виде виртуальных книг. СПб.: Элби, 1998. — 254 с. + CD.
  27. Травин А. Программы просмотра WWW. М.: ABF, 1997. — 368 с.
  28. Уолл Д. Использование World Wide Web. 2е изд. Киев: Диалектика, 1997. — 432 с.
  29. Титтел Э. Создание VRML миров. Киев: BHV, 1997. — 320 с. + CD.
  30. Фил Д. Эффективная работа с Netscape Communicator 4. СПб.: Питер, 1998. — 784 с.
  31. Фэй М. Дж. Реклама, маркетинг и дизайн в Интернете. М.: Русская Редакция, 1999. — 328 с.
  32. Яргер Р. Дж. и др. MyQSL и mSQL. Базы данных для небольших предприятий и Интернета. СПб.: Символ-Плюс, 2000. — 560 с.


WDH: Алфавитный указатель

Документ в процессе разработки!

Алфавитный указатель

$ & @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д З И К Л М Н О П Р С Т У Ф Ц Ш Э Я

$

  • $1 — $9, свойства объекта RegExp 1
  • $01 — $99, свойства объекта RegExp 1
  • $&, свойство объекта RegExp 1

&

  • &`, свойство объекта RegExp 1
  • &', свойство объекта RegExp 1
  • &+, свойство объекта RegExp 1
  • &*, свойство объекта RegExp 1

@

  • @cc_on, директива JScript 1
  • @charset, директива CSS 1
  • @font-face, директива CSS 1
  • @if, директива JScript 1
  • @import, директива CSS 1
  • @media, директива CSS 1
  • @page, директива CSS 1
  • @set, директива JScript 1

A

  • A, элемент HTML 1
  • ABBR, элемент HTML 1
  • abs, метод объекта Math 1
  • acos, метод объекта Math 1
  • ACRONYM, элемент HTML 1
  • Active Server Pages 1
  • библиография 1
  • спецификация 1
  • ActiveX 1
  • библиография 1
  • в HTML 1
  • ActiveXObject, объект JScript 1
  • Add, метод объекта Dictionary 1
  • ADDRESS, элемент HTML 1
  • anchor, метод объекта String 1
  • APPLET, элемент HTML 1
  • apply, метод объекта Function 1
  • AREA, элемент HTML 1
  • arguments, объект JavaScript 1
  • Array, объект JavaScript 1
  • asin, метод объекта Math 1
  • atan, метод объекта Math 1
  • atan2, метод объекта Math 1
  • atEnd, метод объекта Enumerator 1
  • AtEndOfLine, свойство объекта TextStream 1
  • AtEndOfStream, свойство объекта TextStream 1
  • Attributes, свойство объекта File 1
  • Attributes, свойство объекта Folder 1
  • AvailableSpace, свойство объекта Drive 1
  • azimuth, свойство CSS 1

B

  • B, элемент HTML 1
  • background, свойство CSS 1
  • background-attachment, свойство CSS 1
  • background-color, свойство CSS 1
  • background-image, свойство CSS 1
  • background-position, свойство CSS 1
  • background-repeat, свойство CSS 1
  • BASE, элемент HTML 1
  • BASEFONT, элемент HTML 1
  • BDO, элемент HTML 1
  • BIG, элемент HTML 1
  • big, метод объекта String 1
  • blink, метод объекта String 1
  • BLOCKQUOTE, элемент HTML 1
  • BODY, элемент HTML 1
  • bold, метод объекта String 1
  • Boolean, тип данных JavaScript 1
  • Boolean, объект JavaScript 1
  • Boolean, метод глобального объекта 1
  • border, свойство CSS 1
  • border-bottom, свойство CSS 1
  • border-bottom-color, свойство CSS 1
  • border-bottom-style, свойство CSS 1
  • border-bottom-width, свойство CSS 1
  • border-collapse, свойство CSS 1
  • border-color, свойство CSS 1
  • border-left, свойство CSS 1
  • border-left-color, свойство CSS 1
  • border-left-style, свойство CSS 1
  • border-left-width, свойство CSS 1
  • border-right, свойство CSS 1
  • border-right-color, свойство CSS 1
  • border-right-style, свойство CSS 1
  • border-right-width, свойство CSS 1
  • border-spacing, свойство CSS 1
  • border-style, свойство CSS 1
  • border-top, свойство CSS 1
  • border-top-color, свойство CSS 1
  • border-top-style, свойство CSS 1
  • border-top-width, свойство CSS 1
  • border-width, свойство CSS 1
  • bottom, свойство CSS 1
  • BR, элемент HTML 1
  • break, оператор JavaScript 1
  • BuildPath, метод объекта FileSystemObject 1
  • BUTTON, элемент HTML 1

C

  • call, метод объекта Function 1
  • caller, свойство объекта Function 1
  • CAPTION, элемент HTML 1
  • caption-side, свойство CSS 1
  • ceil, метод объекта Math 1
  • CENTER, элемент HTML 1
  • CGI 1
  • библиография 1
  • интернетография 1
  • спецификация CGI 1.1 1
  • charAt, метод объекта String 1
  • charCodeAt, метод объекта String 1
  • CITE, элемент HTML 1
  • class, атрибут HTML 1
  • clear, свойство CSS 1
  • clip, свойство CSS 1
  • Close, метод объекта TextStream 1
  • CODE, элемент HTML 1
  • COL, элемент HTML 1
  • COLGROUP, элемент HTML 1
  • color, свойство CSS 1
  • Column, свойство объекта TextStream 1
  • CompareMode, свойство объекта Dictionary 1
  • compile, метод объекта RegExp 1
  • concat, метод объекта Array 1
  • concat, метод объекта String 1
  • constructor, свойство объекта Object 1
  • content, свойство CSS 1
  • continue, оператор JavaScript 1
  • Copy, метод объекта File 1
  • Copy, метод объекта Folder 1
  • CopyFile, метод объекта FileSystemObject 1
  • CopyFolder, метод объекта FileSystemObject 1
  • cos, метод объекта Math 1
  • Count, свойство объекта Dictionary 1
  • counter-reset, свойство CSS 1
  • counter-increment, свойство CSS 1
  • CreateFolder, метод объекта FileSystemObject 1
  • CreateTextFile, метод объекта FileSystemObject 1
  • CreateTextFile, метод объекта Folder 1
  • CSS, язык 1
  • библиография 1
  • директивы 1
  • интернетография 1
  • каскадность 1
  • наследование 1
  • поддержка обозревателями 1
  • правила 1
  • псевдоклассы 1
  • псевдоэлементы 1
  • селекторы 1
  • свойства 1
  • спецификация CSS2 1
  • типы даных 1
  • cue, свойство CSS 1
  • cue-after, свойство CSS 1
  • cue-before, свойство CSS 1
  • cursor, свойство CSS 1

D

  • DateCreated, свойство объекта File 1
  • DateCreated, свойство объекта Folder 1
  • DateLastAccessed, свойство объекта File 1
  • DateLastAccessed, свойство объекта Folder 1
  • DateLastModified, свойство объекта File 1
  • DateLastModified, свойство объекта Folder 1
  • DD, элемент HTML 1
  • decodeURI, метод глобального объекта 1
  • decodeURIComponent, метод глобального объекта 1
  • DEL, элемент HTML 1
  • delete, операция JavaScript 1
  • Delete, метод объекта File 1
  • Delete, метод объекта Folder 1
  • DeleteFile, метод объекта FileSystemObject 1
  • DeleteFolder, метод объекта FileSystemObject 1
  • DFN, элемент HTML 1
  • Dictionary, объект JScript 1
  • DIR, элемент HTML 1
  • dir, атрибут HTML 1
  • direction, свойство CSS 1
  • display, свойство CSS 1
  • DIV, элемент HTML 1
  • DL, элемент HTML 1
  • do…while, оператор JavaScript 1
  • Document Object Model 1
  • спецификация DOM 1.0 1
  • спецификация DOM 2.0 1
  • Drive, объект JScript 1
  • Drive, свойство объекта File 1
  • Drive, свойство объекта Folder 1
  • DriveExists, метод объекта FileSystemObject 1
  • DriveLetter, свойство объекта Drive 1
  • Drives, свойство объекта FileSystemObject 1
  • DriveType, свойство объекта Drive 1
  • DT, элемент HTML 1
  • Dynamic HTML 1
  • библиография 1
  • интернетография 1

E

  • E, свойство объекта Math 1
  • elevation, свойство CSS 1
  • EM, элемент HTML 1
  • EMBED, элемент HTML 1
  • empty-cells, свойство CSS 1
  • encodeURI, метод глобального объекта 1
  • encodeURIComponent, метод глобального объекта 1
  • Enumerator, объект JScript 1
  • Error, объект JavaScript 1
  • escape, метод глобального объекта 1
  • escape-последовательности:
  • в JavaScript 1
  • European Computer Manufacturers Association 1
  • European Telecommunication Standards Institute 1
  • eval, метод глобального объекта 1
  • exec, метод объекта RegExp 1
  • Exists, метод объекта Dictionary 1
  • exp, метод объекта Math 1

F

  • FIELDSET, элемент HTML 1
  • File, объект JScript 1
  • FileExists, метод объекта FileSystemObject 1
  • Files, свойство объекта Folder 1
  • FileSystem, свойство объекта Drive 1
  • FileSystemObject, объект JScript 1
  • fixed, метод объекта String 1
  • float, свойство CSS 1
  • floor, метод объекта Math 1
  • Folder, объект JScript 1
  • FolderExists, метод объекта FileSystemObject 1
  • FONT, элемент HTML 1
  • font, свойство CSS 1
  • fontcolor, метод объекта String 1
  • fontsize, метод объекта String 1
  • font-family, свойство CSS 1
  • font-size, свойство CSS 1
  • font-size-adjust, свойство CSS 1
  • font-stretch, свойство CSS 1
  • font-style, свойство CSS 1
  • font-variant, свойство CSS 1
  • font-weight, свойство CSS 1
  • for, оператор JavaScript 1
  • for…in, оператор JavaScript 1
  • FORM, элемент HTML 1
  • FRAME, элемент HTML 1
  • FRAMESET, элемент HTML 1
  • FreeSpace, свойство объекта Drive 1
  • fromCharCode, метод объекта String 1
  • function, оператор JavaScript 1
  • Function, объект JavaScript 1

G

  • GetAbsolutePathName, метод объекта FileSystemObject 1
  • GetBaseName, метод объекта FileSystemObject 1
  • getDate, метод объекта Date 1
  • getDay, метод объекта Date 1
  • GetDrive, метод объекта FileSystemObject 1
  • GetDriveName, метод объекта FileSystemObject 1
  • GetExtensionName, метод объекта FileSystemObject 1
  • GetFile, метод объекта FileSystemObject 1
  • GetFileName, метод объекта FileSystemObject 1
  • GetFolder, метод объекта FileSystemObject 1
  • getFullYear, метод объекта Date 1
  • getHours, метод объекта Date 1
  • getMilliseconds, метод объекта Date 1
  • getMinutes, метод объекта Date 1
  • getMonth, метод объекта Date 1
  • GetObject, функция JScript 1
  • GetParentFolderName, метод объекта FileSystemObject 1
  • getSeconds, метод объекта Date 1
  • GetSpecialFolder, метод объекта FileSystemObject 1
  • GetTempName, метод объекта FileSystemObject 1
  • getTime, метод объекта Date 1
  • getTimezoneOffset, метод объекта Date 1
  • getUTCDate, метод объекта Date 1
  • getUTCDay, метод объекта Date 1
  • getUTCFullYear, метод объекта Date 1
  • getUTCHours, метод объекта Date 1
  • getUTCMilliseconds, метод объекта Date 1
  • getUTCMinutes, метод объекта Date 1
  • getUTCMonth, метод объекта Date 1
  • getUTCSeconds, метод объекта Date 1
  • getVarDate, метод объекта Date 1
  • getYear, метод объекта Date 1
  • GIF 1
  • global, свойство объекта RegExp 1

H

  • H1 - H6, элементы 1
  • hasOwnProperty, метод объекта Object 1
  • HEAD, элемент HTML 1
  • height, свойство CSS 1
  • HR, элемент HTML 1
  • HTML, язык 1
  • атрибуты 1
  • библиография 1
  • заголовок документа 1
  • интернетография 1
  • комментарии 1
  • поддержка обозревателями 1
  • события 1
  • специальные символы 1 2
  • спецификация HTML 4.01 1
  • структура документа 1
  • теги 1
  • тело документа 1
  • типы данных 1
  • элементы 1
  • HTML, элемент HTML 1
  • HTTP 1
  • спецификация HTTP 1.1 1

I

  • I, элемент HTML 1
  • id, атрибут HTML 1
  • if…else, оператор JavaScript 1
  • IFRAME, элемент HTML 1
  • ignoreCase, свойство объекта RegExp 1
  • IMG, элемент HTML 1
  • in, операция JavaScript 1
  • indexOf, метод объекта String 1
  • Infinity, свойство глобального объекта 1
  • INPUT, элемент HTML 1
  • input, свойство объекта RegExp 1
  • INS, элемент HTML 1
  • instanceof, операция JavaScript 1
  • International Organization for Standartization 1
  • International Telecommunication Union 1
  • International Trademark Association 1
  • Internet Architecture Board 1
  • Internet Assigned Numbers Authority 1
  • Internet Engineering Task Force 1
  • Internet Society 1
  • IP-адрес 1
  • isFinite, метод глобального объекта 1
  • ISINDEX, элемент HTML 1
  • isNaN, метод глобального объекта 1
  • isPrototypeOf, метод объекта Object 1
  • IsReady, свойство объекта Drive 1
  • italics, метод объекта String 1
  • item, метод объекта Enumerator 1
  • Item, свойство объекта Dictionary 1
  • Items, метод объекта Dictionary 1

J

  • Java 1
  • библиография 1
  • интернетография 1
  • спецификация Java 1.1 1
  • JavaScript 1 2
  • библиография 1
  • выражения 1
  • зарезервированные слова 1
  • идентификаторы 1
  • интернетография 1
  • исключения 1
  • комментарии 1
  • константы 1
  • массивы 1
  • метки операторов 1
  • общие сведения 1
  • объекты 1
  • операторы 1
  • операции 1
  • переменные 1
  • преобразование типов 1
  • регулярные выражения 1
  • спецификация ECMA-262 1
  • структура программ 1
  • типы данных 1
  • условная компиляция 1
  • функции 1
  • join, метод объекта Array 1
  • JPEG 1

K

  • KBD, элемент HTML 1
  • Key, свойство объекта Dictionary 1
  • Keys, метод объекта Dictionary 1

L

  • LABEL, элемент HTML 1
  • lang, атрибут HTML 1
  • lastIndex, свойство объекта RegExp 1
  • lastIndexOf, метод объекта String 1
  • lastMatch, свойство объекта RegExp 1
  • lastParen, свойство объекта RegExp 1
  • left, свойство CSS 1
  • leftContext, свойство объекта RegExp 1
  • LEGEND, элемент HTML 1
  • length, свойство объекта Array 1
  • length, свойство объекта Function 1
  • length, свойство объекта String 1
  • letter-spacing, свойство CSS 1
  • LI, элемент HTML 1
  • Line, свойство объекта TextStream 1
  • line-height, свойство CSS 1
  • LINK, элемент HTML 1
  • link, метод объекта String 1
  • list-style, свойство CSS 1
  • list-style-image, свойство CSS 1
  • list-style-position, свойство CSS 1
  • list-style-type, свойство CSS 1
  • LN10, свойство объекта Math 1
  • LN2, свойство объекта Math 1
  • log, метод объекта Math 1
  • LOG10E, свойство объекта Math 1
  • LOG2E, свойство объекта Math 1
  • localeCompare, метод объекта String 1

M

  • MAP, элемент HTML 1
  • margin, свойство CSS 1
  • margin-bottom, свойство CSS 1
  • margin-left, свойство CSS 1
  • margin-right, свойство CSS 1
  • margin-top, свойство CSS 1
  • marker-offset, свойство CSS 1
  • marks, свойство CSS 1
  • match, метод объекта String 1
  • Math, объект JavaScript 1
  • max, метод объекта Math 1
  • max-height, свойство CSS 1
  • max-width, свойство CSS 1
  • MAX_VALUE, свойство объекта Number 1
  • MENU, элемент HTML 1
  • message, свойство объекта Error 1
  • META, элемент HTML 1
  • MIME см. типы файлов MIME
  • min, метод объекта Math 1
  • min-height, свойство CSS 1
  • min-width, свойство CSS 1
  • MIN_VALUE, свойство объекта Number 1
  • Move, метод объекта File 1
  • Move, метод объекта Folder 1
  • MoveFile, метод объекта FileSystemObject 1
  • moveFirst, метод объекта Enumerator 1
  • MoveFolder, метод объекта FileSystemObject 1
  • moveNext, метод объекта Enumerator 1
  • multiline, свойство объекта RegExp 1

N

  • name, свойство объекта Error 1
  • Name, свойство объекта File 1
  • Name, свойство объекта Folder 1
  • NaN, свойство глобального объекта 1
  • NaN, свойство объекта Number 1
  • NEGATIVE_INFINITY, свойство объекта Number 1
  • new, операция JavaScript 1
  • NOBR, элемент HTML 1
  • NOFRAMES, элемент HTML 1
  • NOSCRIPT, элемент HTML 1
  • Null, тип данных JavaScript 1
  • Number, тип данных JavaScript 1
  • Number, объект JavaScript 1
  • Number, метод глобального объекта 1

O

  • Object, тип данных JavaScript 1
  • Object, объект JavaScript 1
  • Object, метод глобального объекта 1
  • OBJECT, элемент HTML 1
  • OL, элемент HTML 1
  • OpenAsTextStream, метод объекта File 1
  • OpenTextFile, метод объекта FileSystemObject 1
  • OPTGROUP, элемент HTML 1
  • OPTION, элемент HTML 1
  • orphans, свойство CSS 1
  • outline, свойство CSS 1
  • outline-color, свойство CSS 1
  • outline-style, свойство CSS 1
  • outline-width, свойство CSS 1
  • overflow, свойство CSS 1

P

  • P, элемент HTML 1
  • padding, свойство CSS 1
  • padding-bottom, свойство CSS 1
  • padding-left, свойство CSS 1
  • padding-right, свойство CSS 1
  • padding-top, свойство CSS 1
  • page, свойство CSS 1
  • page-break-after, свойство CSS 1
  • page-break-before, свойство CSS 1
  • page-break-inside, свойство CSS 1
  • ParentFolder, свойство объекта File 1
  • ParentFolder, свойство объекта Folder 1
  • parse, метод объекта Date 1
  • parseFloat, метод глобального объекта 1
  • parseInt, метод глобального объекта 1
  • Path, свойство объекта Drive 1
  • Path, свойство объекта File 1
  • Path, свойство объекта Folder 1
  • pause, свойство CSS 1
  • pause-after, свойство CSS 1
  • pause-before, свойство CSS 1
  • PERL 1
  • библиография 1
  • интернетография 1
  • спецификация PERL 5.6.0 1
  • PerlScript 1
  • PI, свойство объекта Math 1
  • pitch, свойство CSS 1
  • pitch-range, свойство CSS 1
  • play-during, свойство CSS 1
  • PNG 1
  • pop, метод объекта Array 1
  • position, свойство CSS 1
  • POSITIVE_INFINITY, свойство объекта Number 1
  • pow, метод объекта Math 1
  • PRE, элемент HTML 1
  • propertyIsEnumerable, метод объекта Object 1
  • prototype, свойство объекта Object 1
  • push, метод объекта Array 1

Q

  • Q, элемент HTML 1
  • quotes, свойство CSS 1

R

  • random, метод объекта Math 1
  • Read, метод объекта TextStream 1
  • ReadAll, метод объекта TextStream 1
  • ReadLine, метод объекта TextStream 1
  • RegExp, объект JavaScript 1
  • Remove, метод объекта Dictionary 1
  • RemoveAll, метод объекта Dictionary 1
  • replace, метод объекта String 1
  • Resource Description Framework
  • спецификация синтаксиса 1
  • спецификация схемы 1
  • return, оператор JavaScript 1
  • reverse, метод объекта Array 1
  • richness, свойство CSS 1
  • right, свойство CSS 1
  • rightContext, свойство объекта RegExp 1
  • RootFolder, свойство объекта Drive 1
  • round, метод объекта Math 1

S

  • S, элемент HTML 1
  • SAMP, элемент HTML 1
  • SCRIPT, элемент HTML 1
  • ScriptEngine, функция JScript 1
  • ScriptEngineBuildVersion, функция JScript 1
  • ScriptEngineMajorVersion, функция JScript 1
  • ScriptEngineMinorVersion, функция JScript 1
  • search, метод объекта String 1
  • SELECT, элемент HTML 1
  • SerialNumber, свойство объекта Drive 1
  • setDate, метод объекта Date 1
  • setFullYear, метод объекта Date 1
  • setHours, метод объекта Date 1
  • setMilliseconds, метод объекта Date 1
  • setMinutes, метод объекта Date 1
  • setMonth, метод объекта Date 1
  • setSeconds, метод объекта Date 1
  • setTime, метод объекта Date 1
  • setUTCDate, метод объекта Date 1
  • setUTCFullYear, метод объекта Date 1
  • setUTCHours, метод объекта Date 1
  • setUTCMilliseconds, метод объекта Date 1
  • setUTCMinutes, метод объекта Date 1
  • setUTCMonth, метод объекта Date 1
  • setUTCSeconds, метод объекта Date 1
  • setYear, метод объекта Date 1
  • ShareName, свойство объекта Drive 1
  • shift, метод объекта Array 1
  • ShortName, свойство объекта File 1
  • ShortName, свойство объекта Folder 1
  • ShortPath, свойство объекта File 1
  • ShortPath, свойство объекта Folder 1
  • sin, метод объекта Math 1
  • size, свойство CSS 1
  • Size, свойство объекта File 1
  • Size, свойство объекта Folder 1
  • Skip, метод объекта TextStream 1
  • SkipLine, метод объекта TextStream 1
  • slice, метод объекта Array 1
  • slice, метод объекта String 1
  • SMALL, элемент HTML 1
  • small, метод объекта String 1
  • sort, метод объекта Array 1
  • source, свойство объекта RegExp 1
  • SPAN, элемент HTML 1
  • speak, свойство CSS 1
  • speak-header, свойство CSS 1
  • speak-numeral, свойство CSS 1
  • speak-punctuation, свойство CSS 1
  • speech-rate, свойство CSS 1
  • splice, метод объекта Array 1
  • split, метод объекта String 1
  • sqrt, метод объекта Math 1
  • SQRT1_2, свойство объекта Math 1
  • SQRT2, свойство объекта Math 1
  • stress, свойство CSS 1
  • STRIKE, элемент HTML 1
  • strike, метод объекта String 1
  • String, тип данных JavaScript 1
  • String, объект JavaScript 1
  • String, метод глобального объекта 1
  • STRONG, элемент HTML 1
  • STYLE, элемент HTML 1
  • style, атрибут HTML 1
  • SUB, элемент HTML 1
  • sub, метод объекта String 1
  • SubFolders, свойство объекта Folder 1
  • substr, метод объекта String 1
  • substring, метод объекта String 1
  • SUP, элемент HTML 1
  • sup, метод объекта String 1
  • SVG 1
  • спецификация 1
  • switch, оператор JavaScript 1

T

  • TABLE, элемент HTML 1
  • table-layout, свойство CSS 1
  • tan, метод объекта Math 1
  • TBODY, элемент HTML 1
  • TCL 1
  • TD, элемент HTML 1
  • test, метод объекта RegExp 1
  • TEXTAREA, элемент HTML 1
  • TextStream, объект JScript 1
  • text-align, свойство CSS 1
  • text-decoration, свойство CSS 1
  • text-indent, свойство CSS 1
  • text-shadow, свойство CSS 1
  • text-transform, свойство CSS 1
  • TFOOT, элемент HTML 1
  • The Internet Corporation for Assigned Names and Numbers 1
  • The Internet Engineering Steering Group 1
  • TH, элемент HTML 1
  • THEAD, элемент HTML 1
  • this, операция JavaScript 1
  • throw, оператор JavaScript 1
  • TITLE, элемент HTML 1
  • title, атрибут HTML 1
  • toDateString, метод объекта Date 1
  • toExponential, метод объекта Number 1
  • toFixed, метод объекта Number 1
  • toGMTString, метод объекта Date 1
  • toLocaleDateString, метод объекта Date 1
  • toLocaleLowerCase, метод объекта String 1
  • toLocaleString, метод объекта Array 1
  • toLocaleString, метод объекта Date 1
  • toLocaleString, метод объекта Number 1
  • toLocaleString, метод объекта Object 1
  • toLocaleTimeString, метод объекта Date 1
  • toLocaleUpperCase, метод объекта String 1
  • toLowerCase, метод объекта String 1
  • top, свойство CSS 1
  • toPrecision, метод объекта Number 1
  • toString, метод объекта Array 1
  • toString, метод объекта Boolean 1
  • toString, метод объекта Date 1
  • toString, метод объекта Function 1
  • toString, метод объекта Number 1
  • toString, метод объекта Object 1
  • toString, метод объекта RegExp 1
  • toString, метод объекта String 1
  • TotalSize, свойство объекта Drive 1
  • toTimeString, метод объекта Date 1
  • toUpperCase, метод объекта String 1
  • toUTCString, метод объекта Date 1
  • TR, элемент HTML 1
  • try…catch, оператор JavaScript 1
  • TT, элемент HTML 1
  • Type, свойство объекта File 1
  • Type, свойство объекта Folder 1
  • typeof, операция JavaScript 1

U

  • U, элемент HTML 1
  • UL, элемент HTML 1
  • Undefined, тип данных JavaScript 1
  • undefined, свойство глобального объекта 1
  • unescape, метод глобального объекта 1
  • Unicode 1
  • спецификация Unicode 3.1 1
  • стандартные подмножества 1
  • Unicode Consortium 1
  • unicode-bidi, свойство CSS 1
  • unshift, метод объекта Array 1
  • URI 1
  • кодировка 1
  • относительный 1
  • стандартный синтаксис 1
  • UTC, метод объекта Date 1
  • UTF-16 1
  • UTF-8 1

V

  • valueOf, метод объекта Array 1
  • valueOf, метод объекта Boolean 1
  • valueOf, метод объекта Date 1
  • valueOf, метод объекта Number 1
  • valueOf, метод объекта Object 1
  • valueOf, метод объекта String 1
  • VAR, элемент HTML 1
  • VBScript 1
  • библиография 1
  • vertical-align, свойство CSS 1
  • visibility, свойство CSS 1
  • VML 1
  • спецификация 1
  • voice-family, свойство CSS 1
  • void, операция JavaScript 1
  • volume, свойство CSS 1
  • VolumeName, свойство объекта Drive 1
  • VRML 1
  • спецификация VRML97 1

W

  • WBR, элемент HTML 1
  • while, оператор JavaScript 1
  • white-space, свойство CSS 1
  • widows, свойство CSS 1
  • width, свойство CSS 1
  • with, оператор JavaScript 1
  • word-spacing, свойство CSS 1
  • World Intellectual Property Organization 1
  • World Wide Web см. Веб
  • World Wide Web Consortium 1
  • Write, метод объекта TextStream 1
  • WriteBlankLines, метод объекта TextStream 1
  • WriteLine, метод объекта TextStream 1

X

  • XHTML 1
  • спецификация XHTML 1.0 1
  • XLink 1
  • спецификация 1
  • XML 1
  • библиография 1
  • задание базовых URI 1 2
  • интернетография 1
  • пространства имен 1 2
  • спецификация XML 1.0 1
  • таблицы стилей 1 2
  • XML Schema 1 2
  • спецификация 1 2
  • XPath 1
  • спецификация 1
  • XPointer 1
  • спецификация 1
  • XSL 1
  • спецификация 1

Y

Z

  • z-index, свойство CSS 1

А

  • аббревиатура 1
  • в сетевом общении 1
  • адрес:
  • Веб-узла 1
  • электронной почты 1
  • акроним 1
  • анимированный GIF 1
  • анкер 1
  • аплет 1 2
  • архитектура клиент-сервер 1
  • атрибуты:
  • !important 1
  • элементов HTML 1
  • базовые 1
  • локализующие 1
  • class 1
  • dir 1
  • id 1
  • lang 1
  • style 1
  • title 1

Б

  • безопасность 1
  • библиография 1
  • беседа 1
  • бизнес в Интернете 1

В

  • Веб 1
  • библиография 1
  • интернетография 1
  • Веб-дизайн:
  • библиография 1
  • Веб-обозреватель 1
  • Microsoft Internet Explorer 1
  • Netscape Navigator 1
  • Веб-программирование:
  • библиография 1
  • Веб-сервер 1
  • Apache 1
  • IIS 1
  • библиография 1
  • виртуальная Java-машина 1
  • спецификация 1

Г

  • гиперссылка 1
  • глобальный объект JavaScript 1
  • границы в CSS 1
  • вычисление 1 2
  • слияние 1
  • графический образ 1 2
  • графические файлы, форматы: 1
  • GIF 1
  • JPEG 1
  • PNG 1

Д

  • декларация типа документа:
  • в HTML 1
  • в XHTML 1
  • директивы CSS 1
  • @charset 1
  • @font-face 1
  • @import 1
  • @media 1
  • @page 1
  • домен 1

З

  • закладка 1 2
  • заполнители в CSS 1
  • зарезервированные слова:
  • в JavaScript 1

И

  • игры сетевые 1
  • идентификатор:
  • в JavaScript 1
  • элемента HTML 1
  • Интернет 1
  • библиография 1
  • интернетография 1
  • правила поведения 1
  • ресурсы 1
  • Интранет:
  • библиография 1
  • исключения:
  • в JavaScript 1 2

К

  • карты ссылок 1
  • клиентские 1
  • серверные 1
  • каскадность 1
  • каскадные таблицы стилей 1
  • клавиша быстрого доступа 1
  • класс:
  • элемента HTML 1
  • клиент 1
  • кодировки символов:
  • обозначения 1
  • комментарии:
  • в HTML 1
  • в JavaScript 1
  • константы:
  • в JavaScript 1

Л

М

  • маркер 1
  • метаописатель 1
  • метки операторов
  • в JavaScript 1

Н

  • навигация клавишей Tab 1
  • наследование в CSS 1

О

  • обработка событий в HTML 1
  • объекты JavaScript 1 2 3
  • ActiveXObject 1
  • arguments 1
  • Array 1
  • Boolean 1
  • Date 1
  • Dictionary 1
  • Drive 1
  • Enumerator 1
  • Error 1
  • File 1
  • FileSystemObject 1
  • Folder 1
  • Function 1
  • Math 1
  • Number 1
  • Object 1
  • RegExp 1
  • String 1
  • TextStream 1
  • глобальный 1
  • инициализаторы 1
  • конструкторы 1
  • прототипы 1
  • операторы JavaScript:
  • break 1
  • continue 1
  • do…while 1
  • for 1
  • for…in 1
  • function 1
  • if…else 1
  • return 1
  • switch 1
  • throw 1
  • try…catch 1
  • while 1
  • with 1
  • операции JavaScript:
  • delete 1
  • in 1
  • instanceof 1
  • new 1
  • this 1
  • typeof 1
  • void 1
  • арифметические 1
  • битовые 1
  • запятая 1
  • логические 1
  • порядок выполнения 1
  • присваивания 1
  • прочие 1
  • сравнения 1
  • строковые 1
  • условная 1

П

  • переменные:
  • в JavaScript 1
  • перенос слов в HTML 1
  • пересылка файлов 1
  • позиционирование 1
  • абсолютное 1
  • относительное 1
  • поиск 1
  • порядок выполнения операций:
  • в JavaScript 1
  • правила CSS 1
  • пробелы в HTML 1
  • протоколы стандартные 1
  • библиография 1
  • псевдоклассы CSS 1
  • :active 1
  • :first-child 1
  • :focus 1
  • :hover 1
  • :lang 1
  • :link 1
  • :visited 1
  • псевдоэлементы CSS 1
  • :after 1 2
  • :before 1 2
  • :first-letter 1
  • :first-line 1

Р

  • рамки в CSS 1
  • регулярные выражения:
  • в JavaScript 1
  • запоминание подстрок 1
  • опции поиска 1
  • синтаксис 1
  • специальные символы 1

С

  • свойства CSS 1
  • azimuth 1
  • background 1
  • background-attachment 1
  • background-color 1
  • background-image 1
  • background-position 1
  • background-repeat 1
  • border 1
  • border-bottom 1
  • border-bottom-color 1
  • border-bottom-style 1
  • border-bottom-width 1
  • border-collapse 1
  • border-color 1
  • border-left 1
  • border-left-color 1
  • border-left-style 1
  • border-left-width 1
  • border-right 1
  • border-right-color 1
  • border-right-style 1
  • border-right-width 1
  • border-spacing 1
  • border-style 1
  • border-top 1
  • border-top-color 1
  • border-top-style 1
  • border-top-width 1
  • border-width 1
  • bottom 1
  • caption-side 1
  • clear 1
  • clip 1
  • color 1
  • content 1
  • counter-reset 1
  • counter-increment 1
  • cue 1
  • cue-after 1
  • cue-before 1
  • cursor 1
  • direction 1
  • display 1
  • elevation 1
  • empty-cells 1
  • float 1
  • font 1
  • font-family 1
  • font-size 1
  • font-size-adjust 1
  • font-stretch 1
  • font-style 1
  • font-variant 1
  • font-weight 1
  • height 1
  • left 1
  • letter-spacing 1
  • line-height 1
  • list-style 1
  • list-style-image 1
  • list-style-position 1
  • list-style-type 1
  • margin 1
  • margin-bottom 1
  • margin-left 1
  • margin-right 1
  • margin-top 1
  • marker-offset 1
  • marks 1
  • max-height 1
  • max-width 1
  • min-height 1
  • min-width 1
  • orphans 1
  • outline 1
  • outline-color 1
  • outline-style 1
  • outline-width 1
  • overflow 1
  • padding 1
  • padding-bottom 1
  • padding-left 1
  • padding-right 1
  • padding-top 1
  • page 1
  • page-break-after 1
  • page-break-before 1
  • page-break-inside 1
  • pause 1
  • pause-after 1
  • pause-before 1
  • pitch 1
  • pitch-range 1
  • play-during 1
  • position 1
  • quotes 1
  • richness 1
  • right 1
  • size 1
  • speak 1
  • speak-header 1
  • speak-numeral 1
  • speak-punctuation 1
  • speech-rate 1
  • stress 1
  • table-layout 1
  • text-align 1
  • text-decoration 1
  • text-indent 1
  • text-shadow 1
  • text-transform 1
  • top 1
  • unicode-bidi 1
  • vertical-align 1
  • visibility 1
  • voice-family 1
  • volume 1
  • white-space 1
  • widows 1
  • width 1
  • word-spacing 1
  • z-index 1
  • селектор CSS 1
  • атрибута 1
  • базовый 1
  • идентификатора 1
  • класса 1
  • потомка 1
  • ребенка 1
  • соседа 1
  • столбца 1
  • сервер 1
  • серфинг 1
  • события в HTML 1
  • специальные символы HTML 1 2
  • списки в CSS 1
  • списки в HTML 1
  • маркированные 1
  • нумерованные 1
  • определений 1
  • стиль:
  • элемента HTML 1
  • страны и территории:
  • обозначения 1 2
  • сценарий 1
  • клиента 1
  • сервера 1
  • счетчик 1

Т

  • таблица стилей 1
  • в HTML 1
  • внешняя 1
  • звуковая 1
  • внутренняя 1
  • рекомендуемая 1
  • элемента 1
  • таблицы в CSS 1
  • таблицы в HTML 1
  • теги:
  • в HTML 1
  • текст:
  • направление вывода 1
  • типы данных:
  • в CSS 1
  • в HTML 1
  • в JavaScript 1
  • типы организаций 1
  • типы файлов MIME 1 2
  • титул элемента HTML 1

У

  • устройства отображения:
  • классификация 1
  • названия 1

Ф

  • формы 1
  • фреймы 1
  • обсуждение 1
  • специальные имена 1
  • функции:
  • в JavaScript 1

Ц

  • цвета:
  • базовые 1
  • обозревателей 1
  • системные 1 2

Ш

  • шрифты:
  • дескрипторы свойств 1
  • ascent 1
  • baseline 1
  • bbox 1
  • cap-height 1
  • centerline 1
  • definition-src 1
  • descent 1
  • font-family 1
  • font-size 1
  • font-stretch 1
  • font-style 1
  • font-variant 1
  • font-weight 1
  • mathline 1
  • panose-1 1
  • slope 1
  • src 1
  • stemh 1
  • stemv 1
  • topline 1
  • unicode-range 1
  • units-per-em 1
  • widths 1
  • x-height 1
  • загружаемые 1
  • родовые 1
  • синтезируемые 1

Э

  • электронная почта 1
  • библиография 1
  • элемент HTML 1
  • блочный 1 2
  • морально устаревший 1 2
  • нестандартный 1
  • текстовый 1 2 3
  • устаревший 1
  • фразовый 1
  • A 1
  • ABBR 1
  • ACRONYM 1
  • ADDRESS 1
  • APPLET 1
  • AREA 1
  • B 1
  • BASE 1
  • BASEFONT 1
  • BDO 1
  • BIG 1
  • BLOCKQUOTE 1
  • BODY 1
  • BR 1
  • BUTTON 1
  • CAPTION 1
  • CENTER 1
  • CITE 1
  • CODE 1
  • COL 1
  • COLGROUP 1
  • DD 1
  • DEL 1
  • DFN 1
  • DIR 1
  • DIV 1
  • DL 1
  • DT 1
  • EM 1
  • EMBED 1
  • FIELDSET 1
  • FONT 1
  • FORM 1
  • FRAME 1
  • FRAMESET 1
  • HEAD 1
  • H1 - H6 1
  • HR 1
  • HTML 1
  • I 1
  • IFRAME 1
  • IMG 1
  • INPUT 1
  • INS 1
  • ISINDEX 1
  • KBD 1
  • LABEL 1
  • LEGEND 1
  • LI 1
  • LINK 1
  • MAP 1
  • MENU 1
  • META 1
  • NOBR 1
  • NOFRAMES 1
  • NOSCRIPT 1
  • OBJECT 1
  • OL 1
  • OPTGROUP 1
  • OPTION 1
  • P 1
  • PARAM 1
  • PRE 1
  • Q 1
  • S 1
  • SAMP 1
  • SCRIPT 1
  • SELECT 1
  • SMALL 1
  • SPAN 1
  • STRIKE 1
  • STRONG 1
  • STYLE 1
  • SUB 1
  • SUP 1
  • TABLE 1
  • TBODY 1
  • TD 1
  • TEXTAREA 1
  • TFOOT 1
  • TH 1
  • THEAD 1
  • TITLE 1
  • TR 1
  • TT 1
  • U 1
  • UL 1
  • VAR 1
  • WBR 1
  • эмотикон 1

Я

  • язык элемента HTML 1
  • языки естественные:
  • обозначения 1 2
  • языки программирования сценариев 1


WDH: Глоссарий

Глоссарий

A C D E F G H I J M N O P R S T U V W X
А Б В Г Д З И К Л М Н О П Р С Т У Х Ф Ц Ш Э Я

A

ActiveX
Технология Microsoft, позволяющая программным компонентам, независимо от языка их разработки, совместно работать в сетевом окружении. Основным применением технологии ActiveX является создание интерактивного содержания World Wide Web.
AOL Browser
Популярный Веб-обозреватель. Подробности по адресу http://webmaster.info.aol.com Внешняя ссылка.
Apache
Наиболее популярный Веб-сервер, работающий в операционной среде Unix.
API (Application Programming Interface)
Набор функций, обеспечивающих стандартный доступ к каким-либо функциональным возможностям.
ASP (Active Server Pages)
Технология Microsoft, обеспечивающая открытую среду, в которой Веб-разработчики могут сочетать HTML, сценарии и компоненты Active Server. Технология ASP поддерживает исполнение на сервере сценариев на языке JavaScript.

C

CDF (Channel Definition Format)
Формат описания каналов, основанный на языке XML и дающий публикаторам возможность обеспечить автоматическую доставку информации к обозревателям клиентов.
CGI (Common Gateway Interface)
Соглашение о взаимодействии серверов с локальными приложениями. Шлюзы (gateways) — это сценарии, которые обрабатывают информационные запросы к серверу и возвращают (или генерируют) соответствующий документ.
COM (Component Object Model)
Стандарт Microsoft, определяющий создание и взаимодействие платформо-независимых программных компонентов. Лежит в основе таких технологий, как OLE (документы сложной структуры), ActiveX (программные компоненты WWW), DirectX (управление мультимедиа) и пр.
CORBA (Common Object Request Broker Architecture)
Стандарт, разработанный Object Management Group, определяющий правила совместного использования и взаимодействия распределенных объектов, независимые от языка программирования и платформы.
CPAN (Comprehensive Perl Archive Network)
Общедоступный архив утилит, документации и модулей языка PERL.
CSS (Cascading Style Sheets)
См. каскадные таблицы стилей.

D

DHTML (Dynamic HTML)
Расширение языка HTML, обеспечивающее изменения Веб-страницы после ее загрузки. DHTML поддерживает обработку событий для всех элементов страницы, а также создание, перемещение и модификацию любых ее элементов. См. также Document Object Model.
DOM (Document Object Model)
Набор интерфейсов, независимых от платформы и языка, который позволяет программам и сценариям динамически изменять структуру, содержимое и стиль документов. См. также Dynamic HTML.
DTD (Document Type Definition)
Задает тип SGML-документа, в т. ч. HTML-документа. Тип документа определяет, в частности, набор допустимых в нем элементов и специальных символов.

E

ECMA (European Computer Manufacturers Association)
Некоммерческая ассоциация европейских производителей компьютеров, занимающаяся разработкой стандартов для информационных и коммуникационных систем.
ECMAScript
Стандартизованный ECMA вариант языка программирования JavaScript.
escape-последовательность (escape sequence)
Многие языки программирования (в частности, Java, JavaScript, PERL) содержат специальные обозначения для ряда служебных символов, например, \t обозначает символ горизонтальной табуляции.

F

FTP (File Transfer Protocol)
Протокол передачи файлов между узлами Интернета.

G

Gecko
Платформо-независимое ядро Веб-обозревателей, разрабатываемое Mozilla. Является основой обозревателя Netscape 6.
GIF (Graphics Interchange Format)
Один из стандартов хранения графических образов в Веб. Позволяет сохранять образы, имеющие до 256 цветов.
GMT (Greenwich Mean Time)
См. UTC.

H

HTML (Hypertext Markup Language)
Теговый язык, используемый для создания платформо-независимых гипертекстовых документов. HTML является подмножеством языка SGML, разработанным в качестве стандарта для Веб-страниц, но круг его современных применений гораздо шире.
HTML-документ (HTML document)
Текстовый файл, созданный в соответствии с правилами языка HTML.
HTTP (Hypertext Transfer Protocol)
Протокол прикладного уровня, предназначенный для распределенных систем управления различными объектами путем обмена информацией между обозревателем и сервером.

I

IAB (Internet Architecture Board)
Группа технических советников ISOC, контролирующая процесс создания новых протоколов Интернета и его глобальную архитектуру. IAB также отвечает за редактирование и публикацию RFC.
ICANN (The Internet Corporation for Assigned Names and Numbers)
Организация, отвечающая за присвоение всех уникальных числовых параметров в Интернете и, в частности, регистрирующая все новые доменные имена и соответствующие IP-адреса.
IDL (Interface Definiton Language)
Язык описания интерфейсов, независимый от языка программирования и платформы. Был разработан Open Software Foundation для распределенных систем. В настоящее время используется в стандартах COM, CORBA и Java.
IETF (Internet Engineering Task Force)
Международное сообщество проектировщиков, ученых, операторов и провайдеров сетевых услуг, которое занимается развитием архитектуры и протоколов Интернета.
Intellifont
Формат файлов шрифтов, разработанный фирмой Agfa. Используется принтерами Hewlett-Packard и другими принтерами, работающими в языке PCL5. Кроме того, это формат шрифтов компьютеров Amiga.
Internet Explorer
Наиболее популярный из Веб-обозревателей, созданный корпорацией Microsoft. Подробности по адресу http://www.microsoft.com/windows/ie Внешняя ссылка.
IP-адрес (IP address, от Internet Protocol)
Все доменные имена в Интернете регистрируются в ICANN, где им присваивается уникальный IP-адрес. Этот адрес состоит из четырех десятичных чисел, разделенных точками, и используется серверами Интернета для передачи информации по Сети.
ISOC (Internet Society)
Профессиональная организация специалистов, которая комментирует политику и практику Интернета и осуществляет наблюдение за другими организациями, связанными с вопросами сетевой политики.
ISP (Internet Service Provider)
См. провайдер.

J

JAR (Java ARchive)
Стандартный формат архивирования файлов Java, разработанный Sun Microsystem на основе ZIP-архивов.
Java
Объектно-ориентированный язык программирования, независимый от платформы. Независимость достигается тем, что Java-программы компилируются в стандартный промежуточный код, интерпретируемый виртуальной Java-машиной. В Веб используется для написания аплетов, исполняемых на стороне клиента.
JavaScript
Объектно-ориентированный интерпретируемый язык программирования, независимый от платформы. В Веб используется для написания сценариев.
JPEG (Joint Photographic Experts Group)
Один из стандартов хранения графических образов в Веб. Позволяет сохранять полноцветные образы.

M

MIDI (Musical Instrument Digital Interface)
Язык описания музыки и соответствующий протокол для передачи музыкальной информации электронным музыкальным инструментам.
MIME (Multipurpose Internet Mail Extension)
Дополнение к SMTP, позволяющее включать в сообщения электронной почты файлы мультимедиа и создавать эти сообщения, используя различные кодировки символов. MIME содержит, в частности, стандартные определения различных типов файлов.
Mozilla
Международная группа разработчиков стандартизованного платформо-независимого Веб-обозревателя, создавшая ядро Gecko. Подробности по адресу http://www.mozilla.org Внешняя ссылка.
MPEG (Motion Pictures Expert Group)
Популярный стандарт хранения мультимедийных файлов.
MSHTML
Ядро Веб-обозревателей Internet Explorer.

N

Netscape Navigator
Второй по популярности из Веб-обозревателей, созданный корпорацией Netscape. Подробности по адресу http://www.netscape.com Внешняя ссылка.

O

Open Type
Расширение формата файлов шрифтов TrueType, поддерживающее многоязыковые типографские возможности. Его вариант, Embedded OpenType, используется обозревателями Microsoft Internet Explorer как стандарт для загружаемых шрифтов.
Opera
Популярный Веб-обозреватель. Подробности по адресу http://www.opera.com Внешняя ссылка.
OSD (Open Software Description)
Спецификация XML-словаря для описания программных компонентов, их версий, структуры и связи с другими компонентами. Предназначена для автоматизации процессов первичной инсталяции и последующего обновления версий программ самим программами.

P

PERL (Practical Extraction and Report Language)
Интерпретируемый язык программирования, обеспечивающий мощную обработку текстов. Широко применяется для написания сценариев CGI.
PFR
См. TrueDoc Portable Font Resource.
Python
Объектно-ориентированный интерпретируемый язык программирования, независимый от платформы. В Веб используется для написания сценариев.
PNG (Portable Network Graphics)
Новый стандарт хранения графических образов в Веб, разработанный W3C.
Postscript Type 1
Формат файлов шрифтов, разработанный фирмой Adobe System. Поддерживается многими операционными системами.

R

RDF (Resource Description Framework)
Разрабатываемая в настоящее время W3C объектная модель семантики XML-документов. Она должна обеспечить обобщенный поиск информации и ее представление в виде узлов и графов.
Rexx (Restructured Extended Executor)
Интерпретируемый язык программирования, независимый от платформы и содержащий мощные механизмы макросов. В Веб используется для написания сценариев.
RFC (Request for Comment)
Документ, обсуждающий определенный вопрос, связанный с архитектурой или протоколами Интернета, и предназначенный для обсуждения широким кругом читателей, связанных с Интернетом.

S

SGML (Standard Generalised Markup Language)
Международный стандарт для определения правил описания структуры и содержимого электронных документов. HTML и XML являются подмножествами SGML.
Shockwave Flash
Технология фирмы Macromedia, позволяющая добавить к Веб-странице отдельно разработанные файлы мультипликации. См. также анимация.
SMTP (Simple Mail Transfer Protocol)
Стандарт Интернета для передачи сообщений электронной почты между клиентами.
Speedo
Формат файлов шрифтов, разработанный фирмой Bitstream. Это формат шрифтов компьютеров Atari ST и Falcon, а также компьютеров, работающих в операционной системе X window.

T

TCL (Tool Command Language)
Объектно-ориентированный интерпретируемый язык программирования, независимый от платформы и поддерживающий мощный графический пользовательский интерфейс. В Веб используется для написания сценариев.
TCP/IP (Transmission Control Protocol over Internet Protocol)
Транспортный и сетевой протоколы, определяющие правила взаимодействия сетей, подключенных к Интернету.
TrueDoc Portable Font Resource
Платформо-независимый формат файлов шрифтов, разработанный фирмой Bitstream. Используется обозревателями Netscape Navigator как стандарт для загружаемых шрифтов.
TrueType
Формат файлов шрифтов, разработанный фирмой Apple и развитый корпорацией Microsoft. Это формат шрифтов операционных систем Windows и Macintosh.
Type 1
См. Postscript Type 1.

U

Unicode
Международный стандарт кодировки символов, в котором каждый символ кодируется 16-разрядным словом. Unicode охватывает цифры, буквы и символы практически всех языков мира и благодаря этому поддерживает обработку и хранение многоязычных текстов. См. также UTF-8.
URI (Uniform Resource Identifier)
Стандартизованная строка, указывающая на ресурс Интернета, такой как HTML-документ или дисковый файл. Формат URI для HTML-документов: protocol://server.network.domain/path/resource, для дисковых файлов: file://\\server\sharepoint\path\filename.ext.
URL (Uniform Resource Locator)
Устаревший термин. См. URI.
URN (Uniform Resource Name)
Устаревший термин. См. URI.
UTC (Universal Coordinated Time)
Стандартное мировое время. Ранее называлось временем по Гринвичскому меридиану (GMT, Greenwich Mean Time).
UTF-8 (Unicode Transformation Format)
Преобразование кодов Unicode, предназначенное для хранения и транспортировки текстовой информации в Интернете. Используется для кодировки многоязычных HTML-документов, XML-документов и сообщений MIME.

V

VRML (Virtual Reality Modelling Language)
Язык описания трехмерной интерактивной графики, позволяющий пользователю перемещаться внутри графического образа и взаимодействовать с объектами. Для просмотра в обозревателе Веб-страниц, написанных с применением VRML, необходим соответствующий подключаемый модуль.

W

W3C (World Wide Web Consortium)
Международный консорциум, занимающийся разработкой стандартов, спецификаций и справочных материалов для World Wide Web.
WebTV
Веб-обозреватель корпорации Microsoft, предназначенный для просмотра телевизионных каналов. Подробности по адресу http://www.webtv.com Внешняя ссылка.
WWW (World Wide Web)
См. Веб.

X

XLL (Extensible Link Language)
Теговый язык, используемый для описания ссылок в языке XML.
XML (Extensible Markup Language)
Теговый язык, используемый для создания платформо-независимых форматов хранения данных. XML является предельно упрощенным подмножеством языка SGML, разработанным в качестве Веб-стандарта, но круг его современных применений гораздо шире.
XML-процессор (XML processor)
Программа, производящая синтаксический разбор XML-документа и передающая результаты этого разбора прикладным программам.
XSL (Extensible Style Language)
Язык описания стилей отображения данных в формате XML.

А

Автор (author)
Человек или программа, которые пишут или генерируют HTML-документы. См. также публикатор.
Альтернатива (alt)
Атрибут графического образа, задающий текст, который может быть выведен обозревателем вместо отображения образа.
Анимация (animation)
Включение в Веб-страницу мультфильмов. Для создания мультфильмов обычно используются анимированные GIF'ы, аплеты или Macromedia Shockwave Flash.
Анимированный GIF (GIF animation)
Простой способ создания небольших мультфильмов. Анимированный GIF — это просто набор GIF-образов, сменяющих друг друга с заданной скоростью. См. также анимация.
Анкер (anchor)
Элемент HTML, обозначающий гиперссылку. Анкеры также используются для создания закладок.
Аплет (applet)
Скомпилированная программа, которая включается в Веб-документ и исполняется обозревателем после загрузки страницы.
Атрибут (attribute)
Параметр или свойство элемента, влияющие на его отображение.
Аудио (audio)
Оцифрованная музыка, голос и т. п., которые могут проигрываться компьютером. Наиболее популярными форматами аудиофайлов являются AU, WAV, SND, MPEG, MIDI, AIFF.

Б

Беседа (chat)
Общение в реальном времени между несколькими клиентами с помощью клавиатуры в Интернете или корпоративной сети.
Блочные элементы (block elements)
Элементы HTML, начинающиеся с нового абзаца. Типичными примерами являются заголовки (H1 — H6), абзацы (P), элементы списков (LI) и горизонтальные линии (HR). См. также текстовые элементы.
Брат (sibling)
Элемент A в дереве документа является братом элемента B, если у них общий отец. Если при этом A расположен в документе раньше, чем B, то A является старшим братом, а B младшим.

В

Веб (Web, WWW, W3: сокр. от World Wide Web )
Распределенная система клиент-сервер для поиска информации в Интернете. Клиентом является обозреватель, а сервером — Веб-сервер. Основные протоколы Веба: HTTP и FTP.
Веб-мастер (webmaster)
Администратор Веб-узла. Веб-мастер является посредником между авторами Веб-страниц и системным администратором и отвечает за правильность публикуемых страниц и поддержание узла в рабочем состоянии.
Веб-сервер (Web server)
Программа, которая поставляет ресурсы Веб по запросу обозревателя. Запрашиваемый ресурс обычно указывается с помощью URI.
Веб-страница
См. HTML-документ.
Верификатор (validator)
Программа, проверяющая синтаксическую правильность XML- или HTML-документов.
Видео (video)
Отображение в обозревателе визуальных мультимедийных образов, например учебных фильмов, видеоконференций или видеоброшюр.
Виртуальная реальность (virtual reality)
Компьютерное моделирование реального или воображаемого мира, использующее трехмерные эффекты передачи изображения на двухмерном экране.
Внедрение данных (data binding)
Процесс присоединения внешних данных к приложению, например включение острова данных XML в HTML-документ для их отображения.
Водяной знак (digital watermark)
Информация об авторских правах, закодированная внутри графического образа или звукового файла.
Выгрузка (upload)
Копирование файла с Вашего компьютера на удаленный, например, в узел Веб или узел FTP.
Выравнивание (align)
Атрибут HTML, задающий относительное положение элемента на странице.

Г

Гипермедиа (hypermedia)
Комбинация гипертекста и мультимедиа, которая позволяет пользователю нелинейным образом перемещаться по различным текстам, графическим образам, звукам и другой информации. Именно этот принцип лежит в основе Веб — объединение текстовых и мультимедийных ресурсов в общемировую сеть посредством гиперссылок.
Гиперссылка (hyperlink)
Фрагмент текста или графический образ, который содержит ссылку на другой документ (текст, графический образ, аудио- или видеофайл) где-либо в Веб. При выборе гиперссылки (например, щелчком по ней мыши) производится загрузка и отображение соответствующего документа.
Гипертекст (hypertext)
Набор документов, соединенных гиперссылками так, что пользователь может просматривать эти документы в различном порядке.

Д

Действие (action)
Атрибут формы, задающий имя программы, которая должна обрабатывать данные этой формы. Действие указывается в виде URI. Этот URI обычно указывает на сценарий CGI, обрабатывающий результаты заполнения формы, но может быть, например, и передачей электронной почты.
Директива CSS (at-rule)
Правило языка CSS специального вида; начинается с символа @.
Директива XML (processing instruction)
Специальная конструкция языка XML, содержащая указания программе обработки XML-документа.
Дерево документа (document tree)
Представление HTML-документа или XML-документа в виде дерева, используемое в языке CSS и в объектной модели документа.
Доменное имя (domain name)
Имя узла Веб. См. также URI.

З

Заголовок документа (head)
Элемент HTML, состоящий из других элементов, которые содержат информацию о документе, но не отображаются обозревателем. См. также тело документа.
Загружаемый шрифт (downloadable font, Web font)
Шрифт, который загружается обозревателем с заданного Веб-узла перед отображением документа.
Загрузка (download)
Копирование файла с удаленного компьютера, например, из узла Веб или узла FTP, на Ваш компьютер.
Закладка (fragment identifier)
Позиция в документе, поименованная анкером вида #name, на которую могут ссылаться другие документы.
Запрос (query)
Набор ключевых слов и операторов, передаваемых пользователем поисковой системе.
Звук (sound)
См. аудио.

И

Индексация (indexing)
Процесс анализа Веб-страниц и выделения из них ключевых слов, используемый некоторыми поисковыми системами.
Иконка (icon)
Небольшой графический образ, обозначающий гиперссылку.
Интернет (Internet)
Глобальная компьютерная сеть, на которой базируется Веб.

К

Канал (channel)
Специализированный узел Веб, который доставляет пользователям актуальную и персонифицированную информацию. Для создания каналов используется формат CDF.
Карта ссылок (imagemap)
Разбивка графического образа на области, каждая из которых соответствует отдельной гиперссылке.
Каскадные таблицы стилей (cascading style sheets, CSS)
Язык, который позволяет авторам и пользователям применять единый стиль отображения ко многим элементам многих HTML-документов.
Клиент (client)
Компьютер, который пользуется услугами сервера. Клиент Веб — это компьютер, на котором работает обозреватель, запрашивающий у Веб-сервера различные HTML-документы и отображающий их пользователю.
Ключевое слово (keyword)
Заголовок HTML-документа может содержать список ключевых слов, описывающих его содержание. Эти ключевые слова извлекаются из документа в процессе индексации и в дальнейшем используются поисковыми системами при поиске документов, соответствующих запросу пользователя.
Компонент (component)
Программный объект, для которого определен интерфейс его взаимодействия с операционной средой.
Конечный тег (end-tag)
Условное обозначение конца элемента SGML.
Корень (root)
Головной элемент дерева документа. В HTML-документе корнем всегда является элемент HTML.
Куки (cookie)
Механизм, позволяющий сценариям сохранять информацию на компьютере-клиенте и затем извлекать ее по мере надобности.

Л

Лексикографический порядок (lexicographical order)
Порядок сравнения строк, принятый во многих языках программирования. Строки сравниваются как цепочки символов в кодировке языка (обычно в Unicode); если начала строк совпадает, то более короткая строка считается меньше более длинной.
Локализация (localization)
Внесение изменений в программу или документ, связанные с переводом их на другой язык. Локализация может потребовать изменения таблицы кодировки символов, форматов даты и времени, знака денежной единицы и т. п.

М

Меню (menu)
Элемент формы, используемый для выбора одного или нескольких вариантов из фиксированного набора значений. Обычно реализуется в форме выпадающего меню.
Метапеременная (metavariable)
См. переменная среды.
Метапоисковая система (metasearcher)
Система, которая передает запрос пользователя нескольким поисковым системам одновременно.
Метаэлемент (meta element)
Элемент HTML, который включается в заголовок документа и содержит метаданные об этом документе. Метаданные могут извлекаться различными службами для идентификации, индексации и каталогизации документа. Важным примером метаданных являются ключевые слова.
Метод (method)
В объектно-ориентированных языках программирования функция, ассоциированная с объектом и позволяющая манипулировать его данными.
Мультимедиа (multimedia)
Нетекстовые средства передачи информации пользователю, в частности, аудио и видео.

Н

Наследование (inheritance)
В объектно-ориентированных языках программирования возможность создания производных классов и интерфейсов, наследующих все свойства и методы базового класса или интерфейса.
Начальный тег (start-tag)
Условное обозначение начала элемента SGML, которое содержит его название и атрибуты.

О

Обозреватель (browser)
Программа, работающая на компьютере-клиенте и отображающая HTML-документы. Современный обозреватель состоит из ядра, пользовательского интерфейса и подключаемых модулей, которые вызываются ядром по мере необходимости.
Обработчик события (event handler)
Подпрограмма, которая вызывается при возникновении определенного события и выполняет ответные действия.
Образ (image)
Графический файл, который является либо сканированной фотографией, либо рисунком, созданным с помощью графических программ. Стандартами для хранения образов в Веб являются GIF, JPEG и PNG.
Остров данных (data island)
Формат размещения данных в формате XML внутри HTML-документов. При этом HTML выступает как главный документ или как формат вывода, а XML используется для внедрения данных в этот документ.
Отец (parent)
Элемент A в дереве документа является отцом элемента B, если он является непосредственным предком элемента A.
Отображение (rendering)
Процесс преобразования HTML-документа в визуальную и/или звуковую информацию, производимый обозревателем.

П

Пароль (password)
Секретный код, обеспечивающий доступ пользователя к определенному счету или услуге, а также атрибут поля ввода формы, отличающийся от обычного поля ввода тем, что вводимые символы отображаются как звездочки (*).
Переменная среды (environment variable)
Именованный параметр, в котором сервер передает информацию сценарию CGI.
Переключатель (radio button)
Элемент формы, используемый для выбора одного из нескольких возможных вариантов.
Подключаемый модуль (plugin)
Приложение, которое вызывается ядром обозревателя для отображения файлов определенного типа (например, модуль видеопроигрывания для файлов типа видео). При этом подключаемые модули не могут запускаться как самостоятельные приложения.
Позиционирование (positioning)
Размещение обозревателем элемента в определенном месте Веб-страницы. HTML поддерживает как абсолютное, так и относительное позиционирование. DHTML дополнительно поддерживает динамическое позиционирование, т. е. перемещение элемента по странице после ее загрузки.
Поиск (search)
Передача слова или фразы поисковой системе, которая возвращает список URI страниц, содержащих запрошенный текст.
Поисковая система (search engine)
Программа, которая производит поиск Веб-страниц, содержащих ключевые слова, запрошенные пользователем.
Поле ввода (input)
Элемент формы, предназначенный для ввода пользователем своих данных.
Потомок (desdendant)
Элемент B в дереве документа является потомком элемента A, если элемент B содержится внутри элемента A.
Правило (rule)
Описание стиля отображения какого-либо селектора в языке CSS. Состоит из набора имен свойств и их соответствующих значений.
Предок (ancestor)
Элемент A в дереве документа является предком элемента B, если элемент B содержится внутри элемента A.
Приложение (application)
Прикладная программа. В зависимости от компьютера, на котором они исполняются, приложения подразделяются на приложения клиента и приложения сервера.
Провайдер (provider, от Internet Service Provider)
Предприятие, которое обеспечивает доступ к службам Интернета.
Проверка документа (validation)
Процесс проверки HTML-документа или XML-документа на соответствие стандартам.
Прокси-сервер, сервер полномочий (proxy server)
Программа, предназначенная для защиты от несанкционированного доступа, кэширования Веб-страниц и обеспечения эффективной внутрисетевой адресации.
Пространство имен (namespace)
Набор имен, которые используются в XML-документах в качестве типов элементов и названий атрибутов. Пространство имен идентифицируется своим URI и предназначено для избежания конфликтов между разными словарями.
Протокол (protocol)
Набор стандартов и правил, определяющих порядок коммуникации между разнородными системами.
Публикация (publishing)
Размещение своих Веб-страниц на каком-либо Веб-узле.
Публикатор (publisher)
Лицо, размещающее свои Веб-страницы на каком-либо Веб-узле. См. также автор.

Р

Разрешение (resolution)
Размеры экрана дисплея в пикселях в формате ширина х высота. Наиболее употребительными являются разрешения 640х480, 800х600 и 1024х768.
Рамка (border)
Атрибут таблиц HTML, задающий наличие и ширину рамки, ограничивающей ячейки таблицы.
Распространение события (event bubbling, event propagation)
Механизм передачи информации о возникновении события от исходного объекта к его предкам. При этом каждый из вызываемых обработчиков событий может остановить дальнейшее распространение события.
Реакция (behavior)
Атрибут DHTML, определяющий поведение какого-либо класса элементов HTML при наступлении определенного события. С появлением реакций каскадные таблицы стилей получили возможность описывать не только статические, но и динамические свойства элементов HTML.
Ребенок (child)
Элемент B в дереве документа является сыном элемента A, если он является непосредственным потомком элемента A.
Робот (robot)
Программа обхода узлов Веб с целью сбора информации о их содержимом и составления каталога для поисковой системы.

С

Свойство (property)
Конструкция языка CSS, обозначающая какое-либо свойство стиля отображения (например, цвет шрифта или его размер).
Селектор (selector)
Конструкция языка CSS, указывающая к каким именно элементам дерева документа применимо данное правило.
Сервер (server)
Сетевой компьютер, который предоставляет клиентам различные услуги. См. также Веб-сервер.
Скриптлет (scriptlet)
Объектный компонент Веб-страницы, оформленный в виде сценария. В настоящее время вытесняются реакциями DHTML.
Словарь XML (XML vocabulary)
Совокупность имен элементов и атрибутов, используемых в XML-документе.
Событие (event)
Действие, которое объект может распознать и соответствующим образом на него отреагировать. Типичными примерами событий являются щелчок кнопкой мыши или нажатие клавиши на клавиатуре.
Сокет (socket)
Абстракция, соответствующая временному соединению двух хостов сети, образующему канал для обмена данными.
Специальный символ (entity)
HTML содержит обозначения для ряда специальных символов, например, &copy; обозначает символ авторского права ©.
Средства безопасности (security)
Программное и аппаратное обеспечение, предназначенное для защиты данных и программ от несанкционированного доступа.
Стиль (style)
Набор свойств, определяющих внешний вид и поведение элемента или класса элементов. К таким свойствам относятся, например, шрифт и цвет текста, позиция элемента на странице, его реакция на различные события и т. п.
Схема (schema)
Формальная спецификация имен элементов, написанная на XML и указывающая, какие имена элементов и в каких сочетаниях допустимы в XML-документе.
Сценарий (script)
Небольшая программа, написанная на интерпретируемом языке, таком, как JavaScript или PERL.
Сын
См. ребенок.

Т

Таблица (table)
Элемент HTML, позволяющий отображать в табличной форме другие элементы (текст, графические образы и т. д.).
Тег (tag)
См. начальный тег и конечный тег.
Тело документа (body)
Элемент HTML, состоящий из других элементов, которые отображаются обозревателем. См. также заголовок документа.
Текстовые элементы (inline elements)
Элементы HTML, отображаемые как текст и не начинающиеся с нового абзаца. Текстовый элемент может содержать другие текстовые элементы, но не может содержать блочных элементов.
Тип файла (media type)
Стандартная спецификация содержимого файла, по которой обозреватель или программа электронной почты может распознать способ его обработки. Например, "text/html" обозначает HTML-документ, а "video/mpeg" — видеофайл в формате MPEG. См. также MIME.
Титул (title)
Элемент HTML, размещаемый в заголовке документа и определяющий его имя.

У

Узел Веб (Web site)
Группа взаимосвязанных Веб-страниц, расположенных в одном домене Интернета.

Ф

Фильтр (filter)
Разновидность обработчика событий в DHTML. Невизуальные фильтры могут применяться для изменения различных атрибутов таблиц стилей, таких, как цвет, размер шрифта или позиция элемента. Визуальные фильтры являются расширением реакций и создают различные эффекты при отображении документа.
Флажок (checkbox)
Элемент формы, имеющий два состояния: выбран и не выбран.
Фон (background)
Атрибут HTML, задающий цвет или графический образ фона Веб-страницы.
Форма (form)
Набор элементов HTML, предназначенных для ввода пользователем данных на Веб-странице. Формы позволяют пользователям передавать свои данные сценариям.
Форум (forum)
Общее название групп, обсуждающих в сети какой-либо круг вопросов. Форум может быть списком адресов электронной почты (mailing list), доской сообщений (message board), доской объявлений (bulletin board) или комнатой для беседы (chat room).
Фрейм (frame)
Элемент HTML, позволяющий разбить окно обозревателя на несколько независимых областей отображения документа.

Х

Хост (host)
Компьютер, позволяющий пользователям обмениваться данными с другими хостами сети.

Ц

Цвет (color)
Атрибут, задающий цвет элемента HTML. Может задаваться либо именем, либо 16-разрядным RGB-кодом.

Ш

Шрифт (font)
Набор символов, имеющих общую гарнитуру (face). Шрифты одной гарнитуры различаются наклоном (прямой и курсив), насыщенностью (светлый, полужирный, жирный) и размером.

Э

Элемент (element)
Составная часть Веб-документа. Обычно состоит из начального тега, содержимого элемента и конечного тега.
Электронная почта (electronic mail, e-mail)
Механизм пересылки сообщений от одного клиента Интернета к другому, пользуясь временным хранилищем таких сообщений на сервере адресата. См. также SMTP.

Я

Ядро обозревателя (browser engine)
Центральный компонент обозревателя, выполняющий отображение HTML-документа в клиентской области экрана.
Язык (language)
Компьютерные языки, применяемые в Веб, подразделяются на теговые языки (SGML, HTML, XML) и языки программирования (Java, JavaScript, PERL).


WDH: Условные обозначения

Условные обозначения

В тексте справочника используются следующие соглашения:

Синтаксис:
 Синтаксическая конструкция описываемого языка.
Поддержка:
 Информация о поддержке данной конструкции обозревателями.

margin-top: 0

Фрагмент текста на данном языке.

BODY

Ключевые слова языка.

document.write()

Константы и названия встроенных объектов.

WDH+

Ссылка на раздел веб-мастерской WDH+.

Внешняя ссылка

Ссылка за пределы нашего справочника.

В синтаксических конструкциях используются следующие условные обозначения:

A B | A, за которым следует B (именно в этом порядке).
A | B | Либо A, либо B должны присутствовать.
A || B | A или B или оба должны присутствовать в любом порядке.
[ ... ] | Группировка объектов.
A* | A может повторяться нуль или более раз.
A+ | A может повторяться один или более раз.
A? | A не является обязательным (может быть опущено).
A {m,n} | A должно повторяться не менее m и не более n раз.

Веб-обозреватели обозначаются следующим образом:

Internet Explorer | Microsoft Internet Explorer и другие обозреватели с ядром MSHTML.
Netscape Navigator | Netscape Navigator (версии, предшествующие Netscape 6).
Gecko | Обозреватели с ядром Gecko (Mozilla/5.0, Netscape 6).


WDH: Перечень таблиц

Перечень таблиц

Таблица 1.1. Типы ссылок в HTML

Таблица 1.2. Имена устройств отображения

Таблица 1.3. Специальные имена фреймов

Таблица 1.4. Стандартные события в HTML

Таблица 1.5. Атрибуты ссылок в картах ссылок

Таблица 1.6. Полосы прокрутки окна фрейма

Таблица 1.7. Языки программирования сценариев

Таблица 2.1. Директивы языка CSS

Таблица 2.2. Абсолютные единицы измерения

Таблица 2.3. Относительные единицы измерения

Таблица 2.4. Системные цвета CSS

Таблица 2.5. Типы устройств отображения

Таблица 2.6. Форматы загружаемых шрифтов

Таблица 3.1. Операции сравнения

Таблица 3.2. Арифметические операции

Таблица 3.3. Битовые операции

Таблица 3.4. Логические операции

Таблица 3.5. Операции присваивания

Таблица 3.6. Приоритеты операций

Таблица 3.7. Специальные символы в регулярных выражениях

Таблица 3.8. Объектная модель JavaScript

Таблица 3.9. Исключения ECMAScript

Таблица 4.1. Структура дерева документа

Таблица 4.2. Стандартные исключения DOM

Таблица 4.3. Типы узлов DOM

Таблица 4.4. Свойства узлов DOM

Таблица 4.5. Типы операторов CSS

Таблица 4.6. Типы значений свойств CSS

Таблица 4.7. Типы примитивных значений свойств CSS

Таблица 6.1. Операции сравнения

Таблица 6.2. Логические операции

Таблица 6.3. Битовые операции

Таблица 6.4. Аддитивные операции

Таблица 6.5. Мультипликативные операции

Таблица 6.6. Операции присваивания

Таблица 6.7. q-операции

Таблица 6.8. Приоритеты операций

Таблица 6.9. Метасимволы в регулярных выражениях

Таблица 6.10. Классы символов

Таблица 6.11. Модификаторы простых операторов

Таблица 6.12. Встроенные атрибуты подпрограмм

Таблица П2.1. Имена стандартных протоколов

Таблица П2.2. Зарегистрированные типы организаций

Таблица П2.3. Зарегистрированные обозначения стран и территорий

Таблица П3.1. Стандартные подмножества Unicode 3.0

Таблица П4.1. Подтипы типа application

Таблица П4.2. Подтипы типа audio

Таблица П4.3. Подтипы типа image

Таблица П4.4. Подтипы типа message

Таблица П4.5. Подтипы типа model

Таблица П4.6. Подтипы типа multipart

Таблица П4.7. Подтипы типа text

Таблица П4.8. Подтипы типа video

Таблица П5.1. Общие поля заголовка

Таблица П5.2. Поля заголовка запроса

Таблица П5.3. Поля заголовка отклика

Таблица П5.4. Поля заголовка тела

Таблица П5.5. Коды состояния HTTP

Таблица П6.1. Символы латиницы

Таблица П6.2. Специальные символы

Таблица П6.3. Математические символы и греческие буквы

Таблица П7.1. Стандартные кодировки символов

Таблица П7.2. Нестандартные кодировки символов в Internet Explorer

Таблица П8.1. Коды языков в HTML

Таблица П9.1. Базовые цвета HTML

Таблица П9.2. Цвета Internet Explorer и Netscape Navigator

Таблица П9.3. Системные цвета CSS в Windows по умолчанию

Таблица П10.1. Морально устаревшие атрибуты HTML

Таблица П11.1. Поддержка элементов HTML обозревателями

Таблица П11.2. Поддержка атрибутов HTML обозревателями

Таблица П13.1. Поддержка селекторов CSS обозревателями

Таблица П13.2. Поддержка директив CSS обозревателями

Таблица П13.3. Поддержка свойств CSS обозревателями

Таблица П14.1. Синтаксические ошибки JScript

Таблица П14.2. Ошибки JScript времени выполнения

Таблица П15.1. Поддержка объектов ECMAScript обозревателями

Таблица П16.1. Поддержка динамических свойств CSS обозревателями

Таблица П17.1. Свойства объекта event в обозревателях

Таблица П17.2. Типы событий DHTML в обозревателях

Таблица П18.1. Виртуальные коды клавиш

Таблица П19.1. Стандартные пакеты java.*

Таблица П19.2. Стандартные пакеты javaх.*

Таблица П19.3. Стандартные пакеты org.omg.*

Таблица П21.1. Встроенные функции PERL

Таблица П22.1. Специальные переменные PERL

Таблица П23.1. Директивные модули

Таблица П23.2. Стандартные модули

Таблица П24.1. Стандартные метапеременные CGI


WDH+: Дополнения и примеры

Дополнения и примеры

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

Лукиан

Общие вопросы | Организации | Сети и протоколы
HTML и CSS | Dynamic HTML | XML
C++ | Java | JavaScript
VBScript | COM и ActiveX | CGI и PERL
Веб-серверы | Веб-дизайн | Прочие вопросы

По мере написания справочника стало ясно, что он требует дополнений. Основных причин тому две. Во-первых, некоторые важные вопросы освещены в нем либо по необходимости слишком кратко, либо "размазаны" по тексту, поскольку относятся сразу к нескольким рассматриваемым нами темам. Во-вторых, веб-мастерская Санклауда накопила серьезный объем материалов, которые могут служить прекрасными примерами и практическими приложениями описанных здесь технологий. Наиболее интересные из этих материалов публикуются в нашей рассылке «Солнечный ветер», но она физически не способна переварить всю информацию, лежащую в веб-мастерской.

Осознание сказанного привело к созданию нового раздела веб-мастерской WDH+, призванного обеспечить наших читателей разнообразными дополнительными материалами. Основные отличия WDH+ от WDH состоят в следующем:

  • WDH+ — это коллекция отдельных статей, иллюстрирующих тонкости Веб-программирования или содержащих полезные сведения общего характера.
  • Статьи WDH+ связаны взаимными ссылками с основным корпусом справочника, но не входят в его состав.
  • Статьи WDH+ пишутся многими авторами нашей веб-мастерской (а по сути дела, всеми, кто пожелает в этом участвовать).

Эта страница автоматически обновляется при каждой ревизии справочника и содержит список всех материалов WDH+, отсортированных по основным темам Веб-разработки. Учтите, что часть этих материалов аннотирована, но еще не написана (готовые статьи помечены значком [image], аннотированные — значком [image]).

Общие вопросы

  • Богач, бедняк... (о Netscape 6)
  • Версии сценарных языков
  • Для какого браузера мы пишем?
  • О кодировках символов
  • Unicode и письменности мира

Организации

  • Адресное пространство Интернета
  • Организации Интернета
  • Присвоение уникальных номеров в Интернете

Сети и протоколы

  • Адресное пространство Интернета
  • Круговое обслуживание IP-адресов
  • Протоколы Интернета
  • Формирование HTTP-пакетов при передаче форм HTML

HTML и CSS

  • <!DOCTYPE ...> начинает работать
  • Ностальгия по табуляции (вывод пунктирной табуляции)
  • Один на один (рисование точек и тонких линий)

Dynamic HTML

  • Включение и выключение скролбаров
  • Влияние DHTML на трафик
  • Все о клиенте
  • Динамические картинки
  • Идентификация браузера
  • Полнофункциональная проверка формы
  • Прерывание скрипта (об обработке событий в IE и NS6)
  • Программы просмотра дерева объектов
  • Техника цитирования
  • Управление загрузкой (динамическая подкачка фрагментов)
  • FrameView (двухфреймовый просмотр документа)

XML

  • Доступ к данным XML из HTML-документа
  • Сравнение XSLT-процессоров

C++

  • Доступ к объектной модели документа из C++
  • Системные функции
  • Типовой OLE-клиент

Java

  • Так будет Java или .NET?
  • TreeView на Веб-странице (Java-версия вызова TreeView)

JavaScript

  • Когда компьютер отказывается считать?
  • Метод concat работает правильно
  • Оператор try…catch в IE4
  • Последний бит (о битовых операциях JScript)
  • Сравнение возможностей VBScript и JScript
  • ANSI и Unicode

VBScript

  • Когда компьютер отказывается считать?
  • Сортировка массивов в VBScript
  • Сравнение возможностей VBScript и JScript

COM и ActiveX

  • Доступ к объектной модели документа из C++
  • Системные функции
  • Типовой OLE-клиент
  • Типы данных Automation и сценарные языки (передача данных между языками)
  • Удаление объектов ActiveX
  • TreeView на Веб-странице

CGI и PERL

  • Зоны безопасности PERL
  • Примеры получения данных на веб-сервере
  • Скорость обработки регулярных выражений в PerlScript и JavaScript

Веб-серверы

  • Идентификация браузера со стороны сервера
  • Компонента PageCounter
  • Настройка IIS при помощи скриптов
  • Примеры получения данных на веб-сервере
  • То ли свойство, то ли метод (об объектной модели IIS)

Веб-дизайн

  • Веб — живой и полуживой

Прочие вопросы

  • Веб-специалисты: классификация и требования
  • О технической документации в Рунете
  • Объем знаний современных компьютерных наук
  • Windows Script Components


WDH: Вопросы и ответы

Приложение 1.
Вопросы и ответы

"Я не даю друзьям советы,
мир дик, нелеп и бестолков,
и на вопросы есть ответы
лишь у счастливых мудаков."

Игорь Губерман

Новые пользователи, присоединяющиеся к Сети, обычно сталкиваются с теми же вопросами, что и все их предшественники. В этом приложении собраны такие вопросы и ответы на них. Мы использовали список вопросов из FYI 4 Внешняя ссылка и FYI 7 Внешняя ссылка, но несколько изменили его с учетом новых реалий и особенностей русской Сети. Мы надеемся, что, ознакомившись с этим приложением, вы сможете легко читать книги, перечисленные в Библиографии.

Что такое Интернет?

Группа соединенных между собой компьютеров называется сетью. Подключение компьютера к сети позволяет пользователю обмениваться информацией с другими пользователями сети. При этом одни компьютеры подключены к сети непосредственно, а другие — посредством телефонной линии через коммуникационное устройство, называющееся модемом. Следующим шагом является соединение отдельных сетей между собой через специализированные компьютеры, называемые рутерами. Взаимосвязанная группа сетей всех стран мира и называется Интернетом (INTERNET = INTER-connected group of NETworks) или просто Сетью (с большой буквы, в отличие от всех остальных сетей).

Что такое World Wide Web?

World Wide Web (Всемирная паутина) или просто Веб — это набор источников различной информации в Сети (которые называются узлами Веб), оформленных в виде гипертекстовых документов. Такой документ называется Веб-страницей и представляет собой текстовый файл специального формата, который может содержать текст, графические изображения, видеоизображения и звук. Кроме того, гипертекстовый документ может содержать гиперссылки на другие документы такого же формата. Эта структура хранения информации обеспечила возможность серфинга и поиска информации, описанных ниже, и сделала Веб настолько популярным, что в глазам многих пользователей он стал отождествляться с Интернетом, что принципиально неверно.

Что я могу делать в Интернете?

Пользователи Интернета имеют доступ к широкому кругу услуг и возможностей. Перечислим основные из них.

Серфинг
Один из наиболее популярных видов использования Интернета. Для серфинга необходимо, чтобы на вашем компьютере работала специальная программа — обозреватель. Обозреватель позволяет вам связываться с Веб-узлами Сети, просматривать (и прослушивать) содержащиеся в них информацию, а также перемещаться к другим узлам, щелкая мышью на гиперссылки, содержащиеся в просматриваемом на экране документе и выделенные тем или иным способом. Новый документ может, в свою очередь, содержать дальнейшие ссылки, что позволяет вам как бы "плыть" по этому океану информации — отсюда и название серфинг.
Поиск
Поиск предполагает обращение к специальной программе, называемой поисковой системой. В Интернете расположено много таких поисковых систем, причем обозреватели содержат информацию о местоположении наиболее популярных из них. Поиск состоит в том, что вы сообщаете поисковой системе какие-либо сведения о разыскиваемой информации, и получаете в ответ список Веб-узлов, которые могут содержать такую информацию. Точнее говоря, вы получаете список ссылок на узлы, которые можете просматривать щелчком кнопки мыши. При этом разные поисковые системы в ответ на один и тот же запрос выдадут, скорее всего, различные списки ссылок.
Электронная почта
Это еще одна очень популярная услуга. Она подобна посылке обычных писем по почте: вы набираете на компьютере текст письма и указываете специальной программе, кому нужно его переслать. После получения ответа та же программа позволяет вам прочитать его, распечатать и т. п. Кроме того, многие пользователи Сети участвуют в почтовых списках, которые обычно посвящены определенной тематике. Посылка своего письма в адрес списка означает его рассылку всем участникам списка. Помните, что злоупотребление почтовыми списками является основным источником замусоривания электронных почтовых ящиков ненужной информацией (это явление называют сленговым словом spam)!
Пересылка файлов
Существует несколько способов пересылки файлов. Наиболее распространенным способом пересылки файлов между отдельными пользователями является присоединение их к сообщению электронной почты. Для пересылки файлов от узла к пользователю используются команда обозревателя "Сохранить файл" или протокол передачи файлов (FTP). Последний способ позволяет пользователям загружать программы, документы, аудиофайлы и видеофайлы.
Беседа
Беседа проводится группой пользователей на специальных узлах, называемых комнатами для бесед (chat rooms). При этом один пишет сообщение, которое остальные могут прочесть и, при желании, на него ответить. Начинающим следует помнить две вещи. Во-первых, в комнате могут находиться люди, которые в беседе не участвуют, а только слушают. Во-вторых, ваши собеседники могут представиться совершенно не тем, кто они на самом деле.
Игры
Некоторые люди пользуются Интернетом для игр. Это могут быть ролевые игры, приключенческие игры или старые добрые игры типа шахмат. Одни игры требуют покупки копии игры и установки ее на вашем компьютере, в другие играют, непосредственно взаимодействуя с узлом.
Коммерческая и финансовая деятельность
Сюда относятся электронная покупка товаров, банковские операции и инвестиции. Электронные покупки состоят в выборе товара по Интернет-каталогам, их заказе и оплате кредитной картой или чеком. Сюда же входят покупка авиабилетов, бронирование мест в гостиницах и т. п. Многие банки предоставляют клиентам возможность перечислять деньги, получать выписки со счетов, оплачивать счета и т .п. через Интернет. Предупреждение: если вы собираетесь оплачивать услугу кредитной картой, посмотрите, что данный узел сообщает о средствах защиты вашей информации. Если эти средства защиты вызывают у вас сомнения или о них ничего не говорится, не пользуйтесь кредитной картой на этом узле.

Что такое адрес?

В наши дни стал обычным вопрос: "Каков твой адрес в Интернете?" На самом деле, таких адресов может быть два: адрес электронной почты (e-mail address) и адрес Веб-узла (Web site URI).

Адрес электронной почты
Адрес электронной почты выглядит следующим образом: myname@company.com (по-русски обычно произносится как MYNAME собачка COMPANY точка COM). Мы видим, что он состоит из двух частей, разделенных символом @ (at, неформально собачка). Левая часть указывает на имя конкретного пользователя и обычно составлена из его имени и фамилии, например автор мог бы назвать себя либо yury_lukach, либо yury.lukach, либо yurylukach, либо lukachyury. Обычно пользователь сам выбирает это имя и сообщает его системному администратору при регистрации почтового ящика. Справа от символа @ указывается доменное имя компьютерной системы (хост-компьютера), предоставляющей почтовые услуги. Это имя обычно состоит из названия организации — владельца этой компьютерной системы, точки и имени домена высшего уровня. Последнее выбирается из определенного списка и должно быть либо типом организации, либо обозначением страны. В России домен высшего уровня — это либо ru (Россия), либо один из стандартных типов: com, edu, net, org (подробности см. в Таблице П2.2). При посылке почты по указанному выше адресу она сначала будет передана компьютеру с именем company.com, а затем этот компьютер перешлет ее в свой почтовый ящик с именем myname.
Адрес Веб-узла
Адрес Веб-узла (строго называемый URI — Uniform Resource Identifier, т. е. унифицированный идентификатор ресурса) обычно выглядит так: http://www.newspaper.com/sports/article1.html. Этот адрес состоит из трех частей. Левая часть (http), отделенная символами ://, указывает на то, что данный ресурс Интернета является Веб-узлом. Средняя часть (www.newspaper.com), от // до первого /, — это доменное имя хост-компьютера, на котором расположен данный Веб-узел (оно образовано так же, как в адресе электронной почты). Наконец, оставшаяся справа часть (/sports/article1.html) указывает местонахождение нашего Веб-узла на этом компьютере.

Как работает Интернет?

Все возможности Интернета, описанные выше, основываются на одном принципе, а именно на том, что компьютеры обмениваются между собой информацией. Когда компьютер передает информацию, он называется источником, а когда принимает — получателем. Обмен информацией состоит в том, что один и тот же компьютер по очереди становится то источником, то получателем.

Каждый компьютер в Интернете имеет уникальный адрес, который называется его IP-адресом. IP-адрес — это четыре байта, которые принято записывать в виде nnn.nnn.nnn.nnn, где nnn — десятичное число от 0 до 255. Такая форма адреса хороша для компьютеров, но не для людей, поэтому Интернет содержит специальную службу доменных имен (DNS, Domain Name Service), которая позволяет нам приписывать компьютерам символьные доменные имена, удобные для запоминания. Следует, однако, понимать, что доменное имя всегда преобразуется в IP-адрес перед тем, как начнется поиск компьютера с заданным именем. Интернет содержит специальные компьютеры, называемые рутерами, которые и выполняют этот поиск. Точнее говоря, они строят маршрут от источника до получателя, который может состоять из десятков рутеров, передающих информацию по цепочке.

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

Каковы правила поведения в Интернете?

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

Особо следует остановиться на электронной почте, которая способна вызывать недоразумения. Следует помнить, что вы передаете адресату только текст, в котором отсутствуют речевая интонация и язык телодвижений (подмигивание, пожатие плеч и т. п.). Для выражения эмоций пользователи Интернета разработали несколько соглашений:

  • написание текста прописными буквами;
  • т. н. эмотиконы или, на жаргоне, смайли (smilies), которые представляют собой определенные сочетания символов: например :-) обозначает улыбку, а :-( грусть;
  • использование стандартных аббревиатур, например, IMHO (In My Humble Opinion — по моему скромному мнению) или ROFL (Rolling On Floor, Laughing — катаясь по полу от смеха).

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

Кто управляет Интернетом?

Никто. Интернет существует благодаря сотрудничеству между провайдерами Интернет-услуг, компаниями — разработчиками программного обеспечения, объединениями энтузиастов и несколькими службами, которые увязывают все это воедино. Провайдеры и разработчики совершенно независимы в своих действиях и часто находятся в отношениях конкуренции. Единственное, что их объединяет, это следование определенным стандартам, которые определяют правила взаимодействия компьютеров и правила передачи данных между ними (т. н. протоколы). Существуют несколько международных организаций, которые разрабатывают и утверждают эти стандарты, а также ведут учет и регистрацию Интернет-адресов и имен пользователей и их групп. Подробнее см. раздел Организации.

Безопасен ли Интернет?

Мнения по этому вопросу охватывают весь спектр возможных ответов: от заверений в полной безопасности Интернета до жутких историй о том, как некто пострадал от подключения к Сети. На самом деле, существуют несколько основных правил, следование которым обеспечивает достаточную безопасность вашего компьютера.

  1. Никогда не пользуйтесь общими паролями с кем-либо другим. Знание пароля — это простейший путь взлома любой системы. Большинство пользователей справедливо считает, что их файлы никому не интересны, но знание одного вполне безобидного учетного имени может послужить основой для доступа к другим частям той же компьютерной системы.
  2. Помните, что существуют способы отслеживания содержимого почтовых сообщений, загружаемых файлов и имен Веб-узлов, посещенных пользователем. Такими полномочиями обладают по роду службы системные администраторы и сетевые инженеры, а значит нельзя гарантировать невозможность злоупотреблений. Для большинства из нас это не имеет значения, но следует всегда помнить, что такие вещи, как почта, посланная вами год назад, или список посещенных вами Веб-узлов могут храниться в системных архивах, а значит, могут быть легко извлечены и опубликованы.
  3. Перед тем как, посылать свои личные данные по Интернету (например, заполняя форму на Веб-странице), следует помнить, что никаких гарантий конфиденциальности не существует. Хотя многие сетевые службы ответственно подходят к полученной ими из Веба или электронной почты информации, заранее этого не проверить.
  4. Не желая морализировать по поводу незаконной загрузки из Интернета чужих программных средств, напомним одно. Загрузка с пиратского узла взломанной программы чревата теми же последствиями, что и установка ее с нелицензионного диска. Если вы готовы к тому, что после установки такой программы ваш компьютер превратится в колонию вирусов, то дерзайте.


WDH: Унифицированные идентификаторы ресурсов

Приложение 2.
Унифицированные идентификаторы ресурсов

Полные URI

Любой ресурс в Сети, будь то HTML-документ, графический образ, видеоклип или программа, имеет уникальный адрес, по которому этот ресурс может быть найден. Такой универсальный адрес называется унифицированным идентификатором ресурса (URI, Universal Resource Identifier). Общий вид URI таков:

протокол://авторизация/путь?запрос

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

  • протокол — именованная схема доступа к ресурсу;
  • авторизация — авторизация доступа к ресурсу;
  • путь — путь доступа к ресурсу на сервере;
  • запрос — строка информации, передаваемая ресурсу для интерпретации.
Таблица П2.1. Имена стандартных протоколов
Название | Описание | Порт IP
file | Дисковые файлы сервера или клиента |
ftp | Протокол передачи файлов (FTP, File Transfer Protocol) | 20, 21
gopher | Протоколы Gopher и Gopher+ |
http | Протокол передачи гипертекста (HTTP, HyperText Transfer Protocol) | 80
mailto | Электронная почта (SMTP, Simple Mail Transfer Protocol) | 25
news | Группы новостей USENET | 144
nntp | Группы новостей USENET с доступом NNTP (Network News Transfer Protocol) | 119
prospero | Служба каталогов Prospero |
telnet | Интерактивные сеансы TELNET | 23
wais | Информационная система WAIS (Wide Area Information Servers) |

Авторизация в общем виде выглядит так:

пользователь@сервер:порт

где

  • пользователь — имя пользователя и, возможно, его пароль, определяющие права доступа к ресурсу;
  • сервер — имя сервера, на котором расположен ресурс;
  • порт — номер IP-порта.

Обязательным компонентом авторизации является только сервер. Сервер может быть задан либо именем домена, либо IP-адресом. Порт указывается крайне редко, т. к. TCP/IP определяет стандартные номера портов для всех основных протоколов (см. Таблицу П2.1 и RFC 1700 Внешняя ссылка).

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

Проиллюстрируем приведенное описание на типичных примерах:

file://\D:\Doc\HTML4\intro\intro.html
доступ к локальному файлу Windows
ftp://ftp.is.co.za/rfc/rfc1808.txt
доступ к файлу по протоколу FTP
gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles
доступ к службам Gopher и Gopher+
http://www.math.uio.no/faq/compression-faq/part1.html
доступ к HTML-документу по протоколу HTTP
http://www.webdev.com/cgi-bin/load.cgi?name=xxx&id=56789
запуск CGI-сценария с двумя параметрами
mailto:mduerst@ifi.unizh.ch
доступ к адресу электронной почты
news:comp.infosystems.www.servers.unix
доступ к группам новостей USENET
telnet://melvyl.ucop.edu/
доступ к интерактивным службам по протоколу TELNET
wais://quake.think.com/wais-discussion-archives?salinger
поиск на информационном сервере WAIS ключевого слова salinger

Примечание. И в литературе, и в устном общении часто употребляются термины URL (Uniform Resource Locator) и URN (Uniform Resource Name). Мы используем вместо них единый термин URI, как это рекомендовано в RFC 2396 Внешняя ссылка; этот же термин употребляется во всех документах W3C.

Относительные URI

Относительные URI отличаются от полных тем, что не содержат элемента протокол. Они применяются в тех случаях, когда тем или иным способом определен базовый URI для набора ресурсов, и URI этих ресурсов указываются относительно базового URI. Например, в HTML-документе базовый URI задается элементом BASE в заголовке документа, либо совпадает с URI самого документа, если элемента BASE нет. Не описывая алгоритм приведения относительных URI к полным, приведем три простых примера, дающих понимание этого алгоритма, достаточное для практического применения. Пусть базовый URI имеет вид

http://www.web.com/faq/part1.html

Тогда

part2.html эквивалентен http://www.web.com/faq/part2.html
next-faq/part3.html эквивалентен http://www.web.com/faq/next-faq/part3.html
../images/logo.gif эквивалентен http://www.web.com/images/logo.gif

Две точки с последующей дробной чертой (../) означают, что нужно перейти по дереву каталогов на один уровень вверх.

Закладки

Если ресурс является HTML-документом, то его URI может содержать дополнительный элемент:

http://сервер/путь#закладка

Закладка — это поименованная позиция в HTML-документе, на которую могут ссылаться другие документы. Для создания закладки используется анкер вида

<A name="имя_закладки">...</A>

Пример ссылки на закладку в документе:

<A href="http://www.math.uio.no/faq/compression-faq/part1.html#ref1">
   Щелкните для перехода к ссылке 1 части 1</A>

В простейшем случае URI может состоять только из закладки. Это означает, что поиск закладки должен производиться в текущем документе:

<A href="#glossary">Глоссарий</A>

Кодировка и декодировка URI

Все элементы URI должны состоять только из символов базовой латиницы. Для того, чтобы включить в них другие символы (например, при передаче CGI-сценарию запроса на поиск русской фразы), следует преобразовать каждый символ, не принадлежащий к базовой латинице, в формат UTF-8, и полученные байты представить в виде %xx, где xx — шестнадцатеричный код байта. Например, символ тильда ("~") должен быть представлен как %7e.

Программы, которые формируют URI ресурсов в виде текстовых строк, должны кодировать URI согласно описанным правилам перед тем, как передавать их любому протоколу Интернета, и декодировать их после получения.

Имена доменов

Имя домена в Интернете — это последовательность имен, разделенных точками, например www.faqs.org. Эти имена выбираются создателями доменов достаточно произвольным образом, за одним исключением. Крайнее справа имя (в нашем примере org) называется доменом высшего уровня и должно быть либо типом организации-владельца домена, либо обозначением страны, где расположен домен.

Таблица П2.2. Зарегистрированные типы организаций
com | Коммерческие организации
edu | Учреждения образования
int | Международные организации и базы данных
net | Компьютеры сетевых провайдеров
org | Неправительственные и некоммерческие организации
gov | Учреждения и организации правительства США
mil | Вооруженные силы США
Таблица П2.3. Зарегистрированные обозначения стран и территорий
Австралия | au | Мадагаскар | mg
Австрия | at | Макао (Аомынь) (Порт.) | mo
Азербайджан | az | Македония | mk
Албания | al | Малави | mw
Алжир | dz | Малайзия | my
Ангилья (Брит.) | ai | Мали | ml
Ангола | ao | Мальдивская Республика | mv
Андорра | ad | Мальта | mt
Антарктика | aq | Маоре (Майотта) (Фр.) | yt
Антигуа и Барбуда | ag | Марокко | ma
Антильские острова (Нид.) | an | Мартиника (Фр.) | mq
Аргентина | ar | Маршалловы Острова (опека США) | mh
Армения | am | Мексика | mx
Аруба, остров (Нид.) | aw | Мелкие отдаленные острова США | um
Афганистан | af | Микронезия (опека США) | fm
Багамские Острова | bs | Мозамбик | mz
Бангладеш | bd | Молдова | md
Барбадос | bb | Монако | mc
Бахрейн | bh | Монголия | mn
Беларусь | by | Монтсеррат (Брит.) | ms
Белиз | bz | Мьянма (Бирма) | mm
Бельгия | be | Намибия (ЮАР) | na
Бенин | bj | Науру | nr
Бермудские Острова (Брит.) | bm | Непал | np
Болгария | bg | Нигер | ne
Боливия | bo | Нигерия | ng
Босния и Герцеговина | ba | Нидерланды | nl
Ботсвана | bw | Никарагуа | ni
Бразилия | br | Ниуэ (Н. Зел.) | nu
Британская территория в Индийском океане | io | Новая Зеландия | nz
Бруней | bn | Новая Каледония (Фр.) | nc
Буве, остров | bv | Норвегия | no
Буркина-Фасо | bf | Норфолк, остров (Австрал.) | nf
Бурунди | bi | Объединенные Арабские Эмираты | ae
Бутан | bt | Оман | om
Вануату | vu | Пакистан | pk
Ватикан | va | Палау (опека США) | pw
Великобритания | gb | Панама | pa
Венгрия | hu | Папуа-Новая Гвинея | pg
Венесула | ve | Парагвай | py
Виргинские острова (Брит.) | vg | Перу | pe
Виргинские острова (США) | vi | Питкэрн (Брит.) | pn
Восточное Самоа (США) | as | Польша | pl
Восточный Тимор | tp | Португалия | pt
Вьетнам | vn | Пуэрто-Рико (США) | pr
Габон | ga | Реюньон (Фр.) | re
Гаити | ht | Рождества (Кристмас), остров (Австрал.) | cx
Гайана | gy | Российская Федерация | ru
Гамбия | gm | Руанда | rw
Гана | gh | Румыния | ro
Гваделупа (Фр.) | gp | Сальвадор | sv
Гватемала | gt | Сан-Марино | sm
Гвиана (Фр.) | gf | Сан-Томе и Принсипи | st
Гвинея | gn | Саудовская Аравия | sa
Гвинея-Бисау | gw | Свазиленд | sz
Германия | de | Свальбард и Ян-Майен, острова (Норв.) | sj
Гибралтар (Брит.) | gi | Святой Елены, остров (Брит.) | sh
Гондурас | hn | Северные Марианские Острова (опека США) | mp
Гонконг (Сянган) (Брит.) | hk | Сейшельские Острова | sc
Гренада | gd | Сенегал | sn
Гренландия (Дат.) | gl | Сен-Пьер и Микелон (Фр.) | pm
Греция | gr | Сент-Винсент и Гренадины | vc
Грузия | ge | Сент-Китс и Невис | kn
Гуам, остров (США) | gu | Сент-Люсия | lc
Дания | dk | Сингапур | sg
Джибути | dj | Сирия | sy
Доминика | dm | Словакия | sk
Доминиканская Республика | do | Словения | si
Египет | eg | Соединенные Штаты Америки | us
Заир | cd | Соломоновы Острова | sb
Замбия | zm | Сомали | so
Западная Сахара | eh | Судан | sd
Западное Самоа | ws | Суринам | sr
Зимбабве | zw | Сьерра-Леоне | sl
Израиль | il | Таджикистан | tj
Индия | in | Таиланд | th
Индонезия | id | Тайвань (провинция Китая) | tw
Иордания | jo | Танзания | tz
Ирак | iq | Теркс и Кайкос, острова (Брит.) | tc
Иран | ir | Того | tg
Ирландия | ie | Токелау (Юнион) (Н. Зел.) | tk
Исландия | is | Тонга | to
Испания | es | Тринидад и Тобаго | tt
Италия | it | Тувалу | tv
Йемен | ye | Тунис | tn
Кабо-Верде (Острова Зеленого Мыса) | cv | Туркменистан | tm
Казахстан | kz | Турция | tr
Кайман, острова (Брит.) | ky | Уганда | ug
Камбоджа | kh | Узбекистан | uz
Камерун | cm | Украина | ua
Канада | ca | Уоллис и Футуна, острова (Фр.) | wf
Катар | qa | Уругвай | uy
Кения | ke | Фарерские острова (Дат.) | fo
Кипр | cy | Фиджи | fj
Кирибати | ki | Филлипины | ph
Китай | cn | Финляндия | fi
Кокосовые (Килинг) острова (Австрал.) | cc | Фолклендские (Мальвинские) острова (Брит.) | fk
Колумбия | co | Франция | fr
Коморские Острова | km | Французская Полинезия | pf
Конго | cg | Французские Южные Территории | tf
Корейская Народно-Демократическая Республика | kp | Херд и Макдональд, острова | hm
Корея, Республика (Южная Корея) | kr | Хорватия | hr
Коста-Рика | cr | Центральноафриканская республика | cf
Кот-д'Ивуар (Берег Слоновой Кости) | ci | Чад | td
Куба | cu | Чешская Республика | cz
Кувейт | kw | Чили | cl
Кука острова (Н. Зел.) | ck | Швейцария | ch
Кыргызстан | kg | Швеция | se
Лаос | la | Шри-Ланка | lk
Латвия | lv | Эквадор | ec
Лесото | ls | Экваториальная Гвинея | gq
Либерия | lr | Эритрея | er
Ливан | lb | Эстония | ee
Ливия | ly | Эфиопия | et
Литва | lt | Югославия | yu
Лихтенштейн | li | Южная Георгия и Южные Сандвичевы острова | gs
Люксембург | lu | Южно-Африканская Республика | za
Маврикий | mu | Ямайка | jm
Мавритания | mr | Япония | jp


WDH: Стандарт Unicode 3.0

Приложение 3. Стандарт Unicode 3.0

Общее описание

Стандарт Unicode был разработан с целью создания единой кодировки символов всех современных и многих древних письменных языков. Каждый символ в этом стандарте кодируется 16 битами, что позволяет ему охватить несравненно большее количество символов, чем принятые ранее 7- и 8-битовые кодировки. Еще одним важным отличием Unicode от других систем кодировки является то, что он не только приписывает каждому символу уникальный код, но и определяет различные характеристики этого символа, например:

  • тип символа (прописная буква, строчная буква, цифра, знак препинания и т. д.);
  • атрибуты символа (отображение слева направо или справа налево, пробел, разрыв строки и т. д.);
  • соответствующая прописная или строчная буква (для строчных и прописных букв соответственно);
  • соответствующее числовое значение (для цифровых символов).

Подробное описание стандарта Unicode можно найти по адресу http://www.unicode.org/ Внешняя ссылка.

WDH+ См. также WDH+: О кодировках символов и Unicode и письменности мира.

Стандартные подмножества

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

  • IPA = International Phonetical Alphabet = Международная фонетическая транскрипция;
  • CJK = China, Japan & Korea = Китай, Япония и Корея.
Таблица П3.1. Стандартные подмножества Unicode 3.0
Диапазон | Описание |  | Коды UTF-8
00 — 7F | Basic Latin | Базовая латиница | 00 — 7F
80 — FF | Latin-1 Supplement | Латиница-1 дополнительная | C2 80 — C3 BF
100 — 17F | Latin Extended-A | Расширенная латиница-A | C4 80 — C5 BF
180 — 24F | Latin Extended-B | Расширенная латиница-B | C6 80 — C9 8F
250 — 2AF | IPA Extensions | Фонетические знаки | C9 90 — CA AF
2B0 — 2FF | Spacing Modifier Letters | Символы изменения пробела | CA B0 — CB BF
300 — 36F | Combining Diacritical Marks | Диакритические знаки | CC 80 — CD AF
370 — 3FF | Greek | Греческое и коптское письмо | CD B0 — CF BF
400 — 4FF | Cyrillic | Кириллица | D0 80 — D3 BF
500 — 52F | резерв |  | D4 80 — D4 AF
530 — 58F | Armenian | Армянское письмо | D4 B0 — D6 8F
590 — 5FF | Hebrew | Ивритское письмо | D6 90 — D7 BF
600 — 6FF | Arabic | Арабское письмо | D8 80 — DB BF
700 — 74F | Syriac | Сирийское письмо | DC 80 — DD 8F
750 — 77F | резерв |  | DD 90 — DD BF
780 — 7BF | Thaana | Тана (мальдивское письмо) | DE 80 — DE BF
7C0 — 8FF | резерв |  | DF 80 — E0 A3 BF
900 — 97F | Devanagari | Деванагари | E0 A4 80 — E0 A5 BF
980 — 9FF | Bengali | Бенгали | E0 A6 80 — E0 A7 BF
A00 — A7F | Gurmukhi | Гурмукхи | E0 A8 80 — E0 A9 BF
A80 — AFF | Gujarati | Гуджарати | E0 AA 80 — E0 AB BF
B00 — B7F | Oriya | Ория | E0 AC 80 — E0 AD BF
B80 — BFF | Tamil | Тамили | E0 AE 80 — E0 AF BF
C00 — C7F | Telugu | Телугу | E0 B0 80 — E0 B1 BF
C80 — CFF | Kannada | Каннада | E0 B2 80 — E0 B3 BF
D00 — D7F | Malayalam | Малаялам | E0 B4 80 — E0 B5 BF
D80 — DFF | Sinhala | Сингальское письмо | E0 B6 80 — E0 B7 BF
E00 — E7F | Thai | Тайское (сиамское) письмо | E0 B8 80 — E0 B9 BF
E80 — EFF | Lao | Лаосское письмо | E0 BA 80 — E0 BB BF
F00 — FFF | Tibetan | Тибетское письмо | E0 BC 80 — E0 BF BF
1000 — 109F | Myanmar | Бирманское письмо | E1 80 80 — E1 82 9F
10A0 — 10FF | Georgian | Грузинское письмо | E1 82 A0 — E1 83 BF
1100 — 11FF | Hangul Jamo | Корейское письмо | E1 84 80 — E1 87 BF
1200 — 137F | Ethiopic | Эфиопское письмо | E1 88 80 — E1 8D BF
1380 — 139F | резерв |  | E1 8E 80 — E1 8E 9F
13A0 — 13FF | Cherokee | Чероки письмо | E1 8E A0 — E1 8F BF
1400 — 167F | Unified Canadian Aboriginal Syllabics | Слоговое письмо алгонкинских народов | E1 90 80 — E1 99 BF
1680 — 169F | Ogham | Огамическое письмо | E1 9A 80 — E1 9A 9F
16A0 — 16FF | Runic | Руническое письмо | E1 9A A0 — E1 9B BF
1700 — 177F | резерв |  | E1 9C 80 — E1 9D BF
1780 — 17FF | Khmer | Кхмерское письмо | E1 9E 80 — E1 9F BF
1800 — 18AF | Mongolian | Монгольское письмо | E1 A0 80 — E1 A2 AF
18B0 — 1DFF | резерв |  | E1 A2 B0 — E1 B7 BF
1E00 — 1EFF | Latin Extended Additional | Дополнительная латиница | E1 B8 80 — E1 BB BF
1F00 — 1FFF | Greek Extended | Греческое расширенное письмо | E1 BC 80 — E1 BF BF
2000 — 206F | General Punctuation | Знаки пунктуации | E2 80 80 — E2 81 AF
2070 — 209F | Subscripts and Superscripts | Верхние и нижние индексы | E2 81 B0 — E2 82 9F
20A0 — 20CF | Currency Symbols | Денежные символы | E2 82 A0 — E2 83 8F
20D0 — 20FF | Combining Diacritical Marks for Symbols | Диакритические знаки для символов | E2 83 90 — E2 83 BF
2100 — 214F | Letterlike Symbols | Буквенные символы | E2 84 80 — E2 85 8F
2150 — 218F | Number Forms | Числовые символы | E2 85 90 — E2 86 8F
2190 — 21FF | Arrows | Стрелки | E2 86 90 — E2 87 BF
2200 — 22FF | Mathematical Operators | Математические операторы | E2 88 80 — E2 8B BF
2300 — 23FF | Miscellaneous Technical | Технические символы | E2 8C 80 — E2 8F BF
2400 — 243F | Control Pictures | Значки управляющих кодов | E2 90 80 — E2 90 BF
2440 — 245F | Optical Character Recognition | Оптическое распознавание образов | E2 91 80 — E2 91 9F
2460 — 24FF | Enclosed Alphanumerics | Буквы и цифры в кружочках | E2 91 A0 — E2 93 BF
2500 — 257F | Box Drawing | Символы рамок | E2 94 80 — E2 95 BF
2580 — 259F | Block Elements | Символы заполнения | E2 96 80 — E2 96 9F
25A0 — 25FF | Geometric Shapes | Геометрические символы | E2 96 A0 — E2 97 BF
2600 — 26FF | Miscellaneous Symbols | Различные значки | E2 98 80 — E2 9B BF
2700 — 27BF | Dingbats | Значки Dingbats | E2 9C 80 — E2 9E BF
27C0 — 27FF | резерв |  | E2 9F 80 — E2 9F BF
2800 — 28FF | Braille Patterns | Шрифт Брайля | E2 A0 80 — E2 A3 BF
2900 — 2E7F | резерв |  | E2 A4 80 — E2 B9 BF
2E80 — 2EFF | CJK Radicals Supplement | Дополнительные ключи к иероглифам | E2 BA 80 — E2 BB BF
2F00 — 2FDF | Kangxi Radicals | Кандзи (ключи к иероглифам) | E2 BC 80 — E2 BF 9F
2FE0 — 2FEF | резерв |  | E2 BF A0 — E2 BF AF
2FF0 — 2FFF | Ideographic Description Characters | Описания идеограмм | E2 BF B0 — E2 BF BF
3000 — 303F | CJK Symbols and Punctuation | Идеографические символы и знаки препинания | E3 80 80 — E3 80 BF
3040 — 309F | Hiragana | Хирагана (японское письмо) | E3 81 80 — E3 82 9F
30A0 — 30FF | Katakana | Катакана (японское письмо) | E3 82 A0 — E3 83 BF
3100 — 312F | Bopomofo | Китайское слоговое письмо | E3 84 80 — E3 84 AF
3130 — 318F | Hangul Compatibility Jamo | Корейское совместимое письмо | E3 84 B0 — E3 86 8F
3190 — 319F | Kanbun | Камбун | E3 86 90 — E3 86 9F
31A0 — 31BF | Bopomofo Extended | Китайское расширенное слоговое письмо | E3 86 A0 — E3 86 BF
31C0 — 31FF | резерв |  | E3 87 80 — E3 87 BF
3200 — 32FF | Enclosed CJK Letters and Months | Дальневосточные буквы и месяцы в кружочках | E3 88 80 — E3 8B BF
3300 — 33FF | CJK Compatibility | Дальневосточные совместимые символы | E3 8C 80 — E3 8F BF
3400 — 4DB5 | CJK Unified Ideographs Extension A | Унифицированные иероглифы, расширение А | E3 90 80 — E4 B6 B5
4DB6 — 4DFF | резерв |  | E4 B6 B6 — E4 B7 BF
4E00 — 9FFF | CJK Unified Ideographs | Унифицированные иероглифы | E4 B8 80 — E9 BF BF
A000 — A48F | Yi Syllables | Слоговое письмо ицзу (и) | EA 80 80 — EA 92 8F
A490 — A4CF | Yi Radicals | Ключи письма ицзу (и) | EA 92 90 — EA 93 8F
A4D0 — ABFF | резерв |  | EA 93 90 — EA AF BF
AC00 — D7A3 | Hangul Syllables | Корейское слоговое письмо | EA B0 80 — ED 9E A3
D7A4 — D7FF | резерв |  | ED 9E A4 — ED 9F BF
D800 — DB7F | High Surrogates | Первый байт суррогатных символов | ED A0 80 — ED AD BF
DB80 — DBFF | High Private Use Surrogates | Первый байт личных суррогатных символов | ED AE 80 — ED AF BF
DC00 — DFFF | Low Surrogates | Второй байт суррогатных символов | ED B0 80 — ED BF BF
E000 — F8FF | Private Use Area | Область личных символов | EE 80 80 — EF A3 BF
F900 — FAFF | CJK Compatibility Ideographs | Совместимые иероглифы | EF A4 80 — EF AB BF
FB00 — FB4F | Alphabetic Presentation Forms | Декоративные варианты букв | EF AC 80 — EF AD 8F
FB50 — FDFF | Arabic Presentation Forms-A | Арабское декоративное письмо-A | EF AD 90 — EF B7 BF
FE00 — FE1F | резерв |  | EF B8 80 — EF B8 9F
FE20 — FE2F | Combining Half Marks | Диакритические знаки половинной ширины | EF B8 A0 — EF B8 AF
FE30 — FE4F | CJK Compatibility Forms | Декоративные дальневосточные формы | EF B8 B0 — EF B9 8F
FE50 — FE6F | Small Form Variants | Малые варианты символов | EF B9 90 — EF B9 AF
FE70 — FEFE | Arabic Presentation Forms-B | Арабское декоративное письмо-B | EF B9 B0 — EF BB BE
FEFF | Zero Width No-break Space | Неразрывный пробел нулевой ширины | EF BB BF
FF00 — FFEF | Halfwidth and Fullwidth Forms | Символы полной и половинной ширины | EF BC 80 — EF BF AF
FFF0 — FFFD | Specials | Специальные символы | EF BF B0 — EF BF BD
FFFE — FFFF | не используются |  | EF BF BE — EF BF BF

Формат UTF-8

Стандарт Unicode является основой для хранения и текста во многих современных компьютерных системах. Однако, он не совместим с большинством Интернет-протоколов, поскольку его коды могут содержать любые байтовые значения, а протоколы обычно используют байты 00 - 1F и FE - FF в качестве служебных. Для достижения совместимости были разработаны несколько форматов преобразования Unicode (UTFs, Unicode Transformation Formats), из которых на сегодня наиболее распространенным является UTF-8. Этот формат определяет следующие правила преобразования каждого кода Unicode в набор байтов (от одного до трех), пригодных для транспортировки Интернет-протоколами.

Диапазон Unicode | Двоичный код символа | Байты UTF-8 (двоичные)
0000 - 007F | 00000000 0zzzzzzz | 0zzzzzzzz
0080 - 07FF | 00000yyy yyzzzzzz | 110yyyyy 10zzzzzz
0800 - FFFF | xxxxyyyy yyzzzzzz | 1110xxxx 10yyyyyy 10zzzzzz

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

Подробное описание формата UTF-8 содержится в RFC 2279 Внешняя ссылка.

Формат UTF-16

Дальнейшее развитие стандарта Unicode связано с добавлением новых языковых плоскостей, т. е. символов в диапазонах 10000 - 1FFFF, 20000 - 2FFFF и т. д., куда предполагается включать кодировку для письменностей мертвых языков, не попавших в таблицу, приведенную выше. Для кодирования этих дополнительных символов был разработан новый формат UTF-16 (см. RFC 2781 Внешняя ссылка). Мы не приводим его подробного описания по единственной причине: для базовой языковой плоскости, т. е. для символов с кодами от 0000 до FFFF, он совпадает с Unicode. Поэтому, если вы не собираетесь писать Веб-страницы на языке шумеров или майя, можете смело отождествлять два эти формата.


WDH: Типы файлов MIME

Приложение 4. Типы файлов MIME

Аббревиатура MIME расшифровывается как Multipurpose Internet Mail Extension (многоцелевые расширения почты Интернет), но на сегодня она отражает свое назначение не совсем точно. Дело в том, что MIME-типы были введены для того, чтобы обеспечить присоединение к письмам электронной почты файлов различных типов; задание типа файла позволяет программе, принимающей почту, определить, какая именно программа должна использоваться для просмотра вложенного файла.

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

Данное приложение содержит полный список типов файлов, зарегистированных в качестве допустимых типов MIME. Тип файла в MIME имеет вид "базовый тип/подтип", причем базовые типы определены стандартом, а подтипы создаются и регистрируются по мере необходимости. Базовыми типами MIME являются:

application (Таблица П4.1) | Двоичные данные. Простейшим является подтип octet-stream (поток байтов). Остальные подтипы – это двоичные данные, предназначенные для обработки определенной программой.
audio (Таблица П4.2) | Аудиофайлы. Для их прослушивания требуется звуковое устройство, такое, как громкоговоритель или телефон. Основным является подтип basic.
image (Таблица П4.3) | Графические образы. Для их просмотра требуется графическое устройство, такое, как дисплей, принтер или факс. Основные подтипы: jpeg и gif.
message (Таблица П4.4) | Сообщения электронной почты (инкапсулированные объекты строго определенной структуры).
model (Таблица П4.5) | Модели, т. е. многомерные структуры, состоящие из объектов.
multipart (Таблица П4.6) | Составные файлы, состоящие из нескольких наборов данных разных типов.
text (Таблица П4.7) | Текстовые файлы. Основным является подтип plain, а остальные подтипы рассматриваются как тексты, содержащие дополнительные директивы форматирования.
video (Таблица П4.8) | Видеофайлы. Для их просмотра необходимо оборудование, поддерживающее вывод движущихся изображений. Основным является подтип mpeg.

Подтипы, в свою очередь, могут образовывать деревья вида "тип/корень.подтип". MIME определяет три стандартных корня:

  • личные подтипы (personal tree), начинающиеся с prs.
  • корпоративные подтипы (vendor tree), начинающиеся с vnd.
  • подтипы индексации (index tree), начинающиеся с index.

Для локального и корпоративного использования допускаются незарегистрированные типы MIME. При этом имя подтипа должно начинаться с x-. Например, скриптлеты Microsoft Internet Explorer 5.x имеют тип text/x-scriptlet.

Таблица П4.1. Подтипы типа application
activemessage | запросы доступа к приложению Active Mail
andrew-inset | потоки мультимедийных данных формата Andrew
applefile | файлы формата AppleSingle (Macintosh)
atomicmail | сообщения на языке ATOMICMAIL
batch-SMTP | контейнеры транзакции SMTP/ESMTP на стороне клиента
cals-1840 | данные формата MIL-STD-1840 (Министерство обороны США)
commonground | документы формата Common Ground
cybercash | сообщения CyberCash
dca-rft | Document Content Architecture/Revisable Form Text (IBM)
dec-dx | Digital Document Transmission (DEC)
EDI-Consent | объекты EDI
Edifact | сообщения формата EDIFACT
Edi-x12 | объекты EDI (ASC X12)
eshop | файлы eShop Inc.
http | HyperText Transfer Protocol
hyperstudio | файлы HyperStudio
iges | заменен на model/iges
index | корень дерева файлов CIP (Common Indexing Protocol)
index.cmd | команды CIP
index.obj | объекты CIP
index.response | отклики CIP
index.vnd | поставщики CIP
ipp | Internet Printing Protocol
mac-binhex40 | файлы формата BinHex (Macintosh)
macwriteii | документы MacWrite II
marc | библиографические файлы формата MARC
mathematica | записные книжки формата Mathematica 3 и 4
mathematica-old | записные книжки формата Mathematica 2.x
msword | документы Microsoft Word
news-message-id | идентификаторы почтовых сообщений новостей
news-transmission | почтовых сообщения новостей
ocsp-request | запросы формата OCSP
ocsp-response | отклики формата OCSP
octet-stream | неструктурированные потоки байтов
oda | документы формата ODA
pdf | документы формата PDF (Adobe Systems)
pgp-encrypted | шифрованные данные PGP (Pretty Good Privacy)
pgp-keys | ключи PGP
pgp-signature | сигнатуры PGP
pkcs10 | запросы сертификации Secure/MIME согласно PCKS #10
pkcs7-mime | сообщения Secure/MIME согласно PCKS #7
pkcs7-signature | сигнатуры Secure/MIME согласно PCKS #7
pkix-cert | сертификаты Public-Key Infrastructure
pkixcmp | сообщения Public-Key Infrastructure
pkix-crl | списки отмен сертификатов Public-Key Infrastructure
postscript | файлы формата PostScript
prs.alvestrand.titrax-sheet | файлы формата TimeTracker
prs.cww | документы формата CU-Writer
prs.nprend | файлы формата NPREND
remote-printing | данные для удаленной печати
riscos | файлы операционной системы Acorn RISC
sdp | Session Description Protocol
set-payment | платежи SET (Secure Electronic Transaction)
set-payment-initiation | инициализация платежей SET
set-registration | регистрация платежей SET
set-registration-initiation | инициализация регистрации платежей SET
sgml-open-catalog | открытые каталоги SGML
slate | документы формата BBN/Slate
vemmi | VErsatile MultiMedia Interface (Интернет)
vnd.3M.Post-It-Notes | заметки формата Post-It (3M Company)
vnd.accpac.simply.aso | Simply Accounting (ACCPAC Intl.)
vnd.accpac.simply.imp | Simply Accounting (ACCPAC Intl.)
vnd.acucobol | исполняемые модули ACUCOBOL-GT
vnd.anser-web-certificate-issue-initiation | сертификация клиента ANSER-WEB
vnd.anser-web-funds-transfer-initiation | банковская транзакция с клиентом ANSER-WEB
vnd.audiograph | мультимедиа формата AudioGraph
vnd.bmi | чертежи формата BMI
vnd.businessobjects | файлы формата BusinessObjects
vnd.claymore | файлы данных Claymore
vnd.commerce-battelle | транзакции Smart Card Commerce
vnd.commonspace | документы формата CommonSpace
vnd.cosmocaller | удаленный запуск программы CosmoCaller
vnd.cups-postscript | файлы PostScript для Common Unix Printing System
vnd.cups-raster | графические файлы для Common Unix Printing System
vnd.cups-raw | двоичные файлы для Common Unix Printing System
vnd.cybank | файлы формата Cybank
vnd.dna | прикладные пакеты New Moon Liftoff/DNA
vnd.dpgraph | файлы формата DPGraph
vnd.dxr | Digital Xpress Reports (PSI Technologies)
vnd.ecdis-update | морские карты Electronic Navigational Chart and Display Systems
vnd.ecowin.chart | диаграммы формата EcoWin
vnd.ecowin.filerequest | запросы файлов формата EcoWin
vnd.ecowin.fileupdate | обновления файлов формата EcoWin
vnd.ecowin.series | временные ряды формата EcoWin
vnd.ecowin.seriesrequest | запросы временных рядов формата EcoWin
vnd.ecowin.seriesupdate | обновления временных рядов формата EcoWin
vnd.enliven | мультимедийные файлы формата Enliven
vnd.epson.msf | файлы формата QUASS Stream
vnd.epson.quickanime | файлы формата QuickAnime
vnd.epson.salt | файлы формата SimpleAnimeLite
vnd.epson.ssf | файлы формата QUASS Stream
vnd.ericsson.quickcall | файлы формата QuickCall
vnd.eudora.data | почтовые сообщения Eudora
vnd.fdf | формы формата FDF (Adobe Systems)
vnd.ffsns | сообщения Smart Notification Server
vnd.FloGraphIt | файлы формата FloGraphIt
vnd.framemaker | документы формата FrameMaker
vnd.froove-tool-message | сообщения программы Groove
vnd.fujitsu.oasis | файлы формата OASIS
vnd.fujitsu.oasis2 | файлы формата OASIS
vnd.fujitsu.oasis3 | файлы формата OASIS
vnd.fujitsu.oasisgp | файлы формата OASIS GraphPro
vnd.fujitsu.oasisprs | файлы формата OASIS Presentation
vnd.fujixerox.ddd | чертежи формата DDD
vnd.fujixerox.docuworks | файлы формата DocuWorks
vnd.fujixerox.docuworks.binder | подшивки формата DocuWorks
vnd.fut-misnet | запуск прикладной программы на сервере
vnd.grafeq | файлы формата GraphEq
vnd.groove-account | файлы формата Groove
vnd.groove-identity-message | файлы формата Groove
vnd.groove-injector | файлы формата Groove
vnd.groove-tool-message | файлы формата Groove
vnd.groove-tool-template | файлы формата Groove
vnd.hp-HPGL | файлы печати HP-GL
vnd.hp-hpid | файлы для Hewlett Packard Instant Delivery
vnd.hp-hps | файлы для Hewlett-Packard's WebPrintSmart
vnd.hp-PCL | файлы печати HP-PCL
vnd.hp-PCLXL | файлы печати HP-PCLXL
vnd.hzn-3d-crossword | файлы формата 3d Crossword
vnd.ibm.MiniPay | файлы формата MiniPay (IBM)
vnd.ibm.modcap | файлы формата MO:DCA-P (IBM)
vnd.intercon.formnet | файлы формата Intercon FormNet
vnd.intertrust.digibox | сообщения InterTrust-DigiBox
vnd.intertrust.nncp | файлы формата NNCP (InterTrust)
vnd.intu.qbo | файлы формата QBO для QiuckBooks
vnd.intu.qfx | файлы формата QFX для Quicken
vnd.is-xpr | файлы Infoseek
vnd.japannet-directory-service | служебные сообщения JapanNet
vnd.japannet-jpnstore-wakeup | служебные сообщения JapanNet
vnd.japannet-payment-wakeup | служебные сообщения JapanNet
vnd.japannet-registration | служебные сообщения JapanNet
vnd.japannet-registration-wakeup | служебные сообщения JapanNet
vnd.japannet-setstore-wakeup | служебные сообщения JapanNet
vnd.japannet-verification | служебные сообщения JapanNet
vnd.japannet-verification-wakeup | служебные сообщения JapanNet
vnd.koan | музыкальные файлы Koan (SSEYO Ltd)
vnd.lotus-1-2-3 | книги Lotus 1-2-3
vnd.lotus-approach | файлы Lotus Approach
vnd.lotus-freelance | файлы Lotus Freelance
vnd.lotus-notes | базы данных Lotus Notes
vnd.lotus-organizer | файлы Lotus Organizer
vnd.lotus-screencam | файлы Lotus ScreenCam
vnd.lotus-wordpro | документы Lotus Word Pro
vnd.mediastation.cdkey | файлы формата CDKey (Media Station, Inc.)
vnd.meridian-slingshot | сообщения для программы Slingshot (Meridian Data, Inc.)
vnd.mif | документы формата MIF (FrameMaker Interchange Format)
vnd.minisoft-hp3000-save | файлы операционной системы HP3000
vnd.mitsubishi.misty-guard.trustweb | файлы программы Misty Guard для TRUSTWEB
vnd.Mobius.DAF | универсальные архивы формата DAF
vnd.Mobius.DIS | базы данных формата DIS
vnd.Mobius.MSL | сценарии на языке MSL
vnd.Mobius.PLC | файлы формата PLC
vnd.Mobius.TXF | файлы формата TXF
vnd.motorola.flexsuite | протоколы FLEXsuite
vnd.motorola.flexsuite.adsi | протокол ADSI (FLEXsuite)
vnd.motorola.flexsuite.fis | протокол FIS (FLEXsuite)
vnd.motorola.flexsuite.gotap | протокол GOTAP (FLEXsuite)
vnd.motorola.flexsuite.kmr | протокол KMR (FLEXsuite)
vnd.motorola.flexsuite.ttc | протокол TTC (FLEXsuite)
vnd.motorola.flexsuite.wem | протокол WEM (FLEXsuite)
vnd.ms-artgalry | файлы Microsoft Art Gallery
vnd.ms-asf | файлы формата ASF (Active Streaming Format)
vnd.ms-excel | книги Microsoft Excel
vnd.ms-powerpoint | презентации Microsoft PowerPoint
vnd.ms-project | файлы Microsoft Project
vnd.ms-tnef | Microsoft MAPI Transport Neutral Encoding Format
vnd.ms-works | файлы Microsoft Works
vnd.musician | файлы формата MUSICIAN (RenaiScience Corp.)
vnd.music-niff | файлы формата NIFF
vnd.netfpx | файлы формата FlashPix
vnd.noblenet-directory | файлы NobleNet
vnd.noblenet-sealer | файлы NobleNet
vnd.noblenet-web | файлы NobleNet
vnd.novadigm.EDM | файлы формата EDM
vnd.novadigm.EDX | файлы формата EDX
vnd.novadigm.EXT | файлы формата EXT
vnd.osa.netdeploy | файлы формата netDeploy (Open Software Associates Inc.)
vnd.pg.format | стандартные отчеты Procter & Gamble
vnd.pg.osasli | стандартные отчеты Procter & Gamble
vnd.powerbuilder6 | исполняемые модули PowerBuilder 6 (Sybase, Inc.)
vnd.powerbuilder6-s | защищенные исполняемые модули PowerBuilder 6
vnd.powerbuilder7 | исполняемые модули PowerBuilder 7
vnd.powerbuilder7-s | защищенные исполняемые модули PowerBuilder 7
vnd.powerbuilder75 | исполняемые модули PowerBuilder 7.5
vnd.powerbuilder75-s | защищенные исполняемые модули PowerBuilder 7.5
vnd.previewsystems.box | файлы системы ZipLock/VBox (Preview Systems)
vnd.publishare-delta-tree | документы PubliShare(Capella Computers Ltd.)
vnd.rapid | исполняемые модули Rapid (Emultek)
vnd.seemail | почтовые сообщения SeeMail (Wyndemere)
vnd.shana.informed.formdata | данные форм для Informed Filler (Shana Corp.)
vnd.shana.informed.formtemp | шаблоны форм для Informed Filler
vnd.shana.informed.interchange | документы в формате обмена Informed Filler
vnd.shana.informed.package | пакеты Informed Filler
vnd.streat-stream | потоки данных Street Technologies
vnd.svd | документы SourceView (Dataware Electronics Inc.)
vnd.swiftview-ics | файлы формата ICS (SwiftView)
vnd.triscape.msx | файлы для Triscape Map Explorer
vnd.truedoc | документы TrueDoc (Bitstream Inc.)
vnd.ufdl | формы на языке UFDL
vnd.uplanet.alert | файлы Unwired Planet
vnd.uplanet.alert-wbxml | файлы Unwired Planet
vnd.uplanet.bearer-choice | файлы Unwired Planet
vnd.uplanet.bearer-choi-wbxml | файлы Unwired Planet
vnd.uplanet.cacheop | файлы Unwired Planet
vnd.uplanet.cacheop-wbxml | файлы Unwired Planet
vnd.uplanet.channel | файлы Unwired Planet
vnd.uplanet.channel-wbxml | файлы Unwired Planet
vnd.uplanet.list | файлы Unwired Planet
vnd.uplanet.listcmd | файлы Unwired Planet
vnd.uplanet.listcmd-wbxml | файлы Unwired Planet
vnd.uplanet.list-wbxml | файлы Unwired Planet
vnd.uplanet.signal | файлы Unwired Planet
vnd.vcx | файлы формата VCX (NTT Data Corp.)
vnd.vectorworks | документы VectorWorks (Diehl Graphsoft, Inc.)
vnd.visio | файлы Visio
vnd.wap.sic | Service Indication (формат XML)
vnd.wap.slc | Service Loading (формат XML)
vnd.wap.wbxml | WBXML-документы (формат XML)
vnd.wap.wmlc | WML-документы (формат XML)
vnd.wap.wmlscriptc | сценарии на языке WMLScript
vnd.webturbo | файлы WebTurbo (Sapient Corp.)
vnd.wt.stf | файлы формата STF (Worldtalk Corp.)
vnd.wrq-hp3000-labelled | файлы WRQ операционной системы HP3000
vnd.xara | графические файлы Xara
vnd.xfdl | формы на языке XFDL
vnd.yellowriver-custom-menu | файлы CustomMenu (Yellow River Software Inc.)
wita | Wang Information Transfer Architecture (Wang Labs)
wordperfect5.1 | документы формата WordPerfect
x400-bp | тела сообщений X.400
xml | XML-документы как данные
zip | ZIP-архивы
Таблица П4.2. Подтипы типа audio
32kadpcm | аудиоданные формата ADPCM 32 Кбит/с
basic | одноканальные аудиоданные 8-битной кодировки ISDN на частоте 8000 Гц
L16 | аудиофайлы формата L16
vnd.digital-winds | музыка формата Digital Winds (MIDI)
vnd.cns.anp1 | аудиофайлы Comverse Network Systems
vnd.cns.inf1 | аудиофайлы Comverse Network Systems
vnd.lucent.voice | оцифрованный голос формата Lucent Voice Player
vnd.nortel.vbk | аудиофайлы Nortel Networks Voice Block
vnd.octel.sbc | оцифрованный голос формата Octel Messaging Division
vnd.qcelp | оцифрованный голос формата QCELP
vnd.rhetorex.32kadpcm | оцифрованный голос формата Rhetorex
vnd.vmx.cvsd | оцифрованный голос формата Octel Messaging Division
wav | аудиофайлы формата WAV
Таблица П4.3. Подтипы типа image
cgm | образы формата CGM
g3fax | образы формата G3 Facsimile
gif | образы формата GIF
ief | образы в Internet Exchange Format
jpeg | образы формата JPEG
naplps | образы формата NAPLPS
png | образы формата PNG
prs.btif | банковские чеки формата TIFF
prs.pti | образы формата PTI
tiff | образы формата TIFF
vnd.cns.inf2 | образы факсов Comverse Network Systems
vnd.dwg | образы формата DWG
vnd.dxf | образы формата DXF
vnd.fastbidsheet | чертежи формата FastBid Sheet
vnd.fpx | образы формата FlashPix
vnd.mix | образы формата MIX
vnd.net-fpx | фрагменты образов формата FlashPix
vnd.svf | образы формата SVF
vnd.xiff | образы формата XIFF
vnd.fujixerox.edmics-mmr | образы формата MMR
vnd.fujixerox.edmics-rlc | образы формата RLC
vnd.wap.wbmp | образы формата WBMP
Таблица П4.4. Подтипы типа message
delivery-status | статус доставки почты
disposition-notification | извещение о результатах передачи сообщения адресату
external-body | сообщение со ссылкой на тело данных
http | запрос/отклик протокола HTTP
news | почтовый формат новостей
partial | фрагмент сообщения
rfc822 | сообщение, содержащее тело данных
s-http | сообщение Secure HyperText Transfer Protocol
Таблица П4.5. Подтипы типа model
iges | CAD-модели формата IGES
mesh | mesh-модели
vnd.dwf | CAD-модели формата DWF (AutoCAD)
vnd.flatland.3dml | 3DML-документы
vnd.gtw | трехмерные модели формата GTW (Gen-Trix)
vnd.mts | трехмерные модели формата MTS (Virtue Ltd.)
vnd.vtu | трехмерные модели формата VTU (Virtue Ltd.)
vrml | VRML-документы
Таблица П4.6. Подтипы типа multipart
alternative | файлы, состоящие из альтернативных версий данных
appledouble | файлы формата AppleDouble (Macintosh)
byteranges | служебные сообщения HTTP
digest | файлы, состоящие из независимых наборов почтовых сообщений
encrypted | шифрованные сообщения
form-data | результаты заполнения формы пользователем
header-set | файлы, состоящие из заголовка и набора данных
mixed | файлы, состоящие из независимых наборов данных
parallel | файлы, состоящие из наборов данных, просмативаемых параллельно
related | файлы, состоящие из взаимосвязанных наборов данных
report | отчеты электронной почты
signed | сообщения, защищенные цифровой сигнатурой
voice-message | голосовые сообщения
Таблица П4.7. Подтипы типа text
calendar | календари и расписания
css | каскадные таблицы стилей
directory | каталоги и картотеки
enriched | минимально форматированные тексты
html | HTML-документы
plain | неформатированный текст
prs.lines.tag | теговый формат почтовых сообщений
rfc822-headers | заголовки почтовых сообщений
richtext | форматированные тексты (SGML)
rtf | файлы формата RTF
sgml | SGML-документы
tab-separated-values | поля данных, разделенных табуляциями
uri-list | списки URI
vnd.abc | записи народной музыки на языке ABC
vnd.fly | CGI-сценарии для Apache
vnd.fmi.flexstor | данные формата Flexstor
vnd.in3d.3dml | 3DML-документы
vnd.in3d.spot | 3DML-документы
vnd.latex-z | документы LaTeX в z-нотации
vnd.motorola.reflex | текстовые сообщения для устройств ReFLEX
vnd.wap.si | Service Indication (формат XML)
vnd.wap.sl | Service Loading (формат XML)
vnd.wap.wml | WML-документы (формат XML)
vnd.wap.wmlscript | сценарии на языке WMLScript
xml | XML-документы как тексты
Таблица П4.8. Подтипы типа video
mpeg | видеофайлы формата MPEG
msvideo | видеофайлы формата AVI
quicktime | видеофайлы формата QuickTime
vnd.motorola.video | видеофайлы формата Motorola ISG
vnd.motorola.videop | видеофайлы формата Motorola ISG
vnd.vivo | видеофайлы формата Vivo


WDH: Протокол HTTP

Приложение 5.
Протокол HTTP

Введение

Протокол HTTP (Hypertext Transfer Protocol, протокол передачи гипертекстов) — это протокол прикладного уровня для распределенных гипертекстовых информационных систем. Помимо передачи гипертекстов он может применяться и в других областях, таких, как серверы имен и распределенные системы управления объектами, но для наших целей важно то, что на этом протоколе с момента своего появления в 1990 г. и по сей день базируется World Wide Web. Приведенное ниже краткое его описание основано на спецификации HTTP/1.1 (RFC 2616 Внешняя ссылка, июнь 1999 г.). Место HTTP в иерархии протоколов Сети показано на рисунке.

Иерархия протоколов Интернета

HTTP является протоколом типа запрос/отклик. Клиент посылает серверу запрос, состоящий из типа запроса, URI и версии протокола, за которыми следует сообщение, содержащее модификаторы запроса, клиентскую информацию и, возможно, тело запроса. Сервер отвечает строкой состояния, содержащей версию протокола и код состояния, за которой следует сообщение, содержащее серверную информацию, метаинформацию и, возможно, тело сообщения.

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

  • Прокси-сервер (или сервер полномочий) принимает запрос клиента, включая полный URI, переписывает все сообщение или часть его и передает исправленный запрос серверу, указанному в URI.
  • Шлюз располагается над сервером и при необходимости транслирует запросы в протокол более низкого уровня, поддерживаемый сервером.
  • Туннель не изменяет передаваемых сообщений, а используется при передаче данных через посредника типа брандмауэра (firewall).

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

Сообщения HTTP

Сообщения HTTP состоят из запросов клиента к серверу и откликов сервера к клиенту. Оба типа сообщений состоят из:

  • стартовой строки, определяющей тип сообщения;
  • нуля или более полей заголовка (кратко называемых просто заголовки);
  • пустой строки, содержащей только символы CR LF и указывающей на конец заголовков;
  • необязательного тела сообщения.

Каждое из полей заголовков имеет формат

имя_поля ":" значение_поля

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

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

имя_поля ":" значение1 "," значение2

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

Поля заголовка

Таблица П5.1. Общие поля заголовка
Поле | Описание
Cache-Control | Задает директивы управления механизмами кэширования. Пример: Cache-Control: no-cache.
Connection | Задает параметры конкретного соединения. Пример: Connection: close.
Date | Дата и время посылки данного сообщения. Пример: Date: Tue, 15 Nov 1999 08:12:31 GMT.
Pragma | Используется для задания директив, зависящих от реализации. Пример: Pragma: no-cache.
Trailer | Указывает, какие поля заголовка прицеплены к телу сообщения и закодированы согласно Transfer-Encoding. См. поле TE. Пример: Trailer: Authorization.
Transfer-Encoding | Задает способ кодировки тела сообщения. Пример: Transfer-Encoding: chunked.
Upgrade | Указывает, какие дополнительные протоколы поддерживает клиент или на какой протокол переключился сервер. Пример: Upgrade: SHTTP/1.3, IRC/6.9, RTA/x11.
Via | Используется шлюзами и прокси-серверами для задания промежуточных протоколов и получателей. Пример: Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1).
Warning | Содержит дополнительную информацию о текущем состоянии или о сообщении. Пример: Warning: 112 ricky Disconnected operation.
Таблица П5.2. Поля заголовка запроса
Поле | Описание
Accept | Задает типы файлов MIME, приемлемые в отклике. Пример: Accept: text/*, text/html.
Accept-Charset | Задает кодировки символов, приемлемые в отклике. Пример: Accept-Charset: iso-8859-5, unicode-1-1.
Accept-Encoding | Задает кодировки содержимого, приемлемые в отклике. Пример: Accept-Encoding: compress, gzip.
Accept-Language | Задает естественные языки, приемлемые в отклике. Пример: Accept-Language: ru, en-us, en.
Authorization | Задает имя и пароль пользователя для авторизации доступа к ресурсу согласно RFC 2617 Внешняя ссылка .
Expect | Указывет, что клиент ожидает от сервера определенной реакции. Пример: Expect: 100-continue.
From | Задает адрес электронной почты администратора клиента. Пример: From: webmaster@w3.org.
Host | Задает имя и, возможно, порт хост-компьютера, на котором расположен запрашиваемый ресурс.Пример: Host: www.mysite.com.
If-Match | Используется в условных методах: запрошенный ресурс передается, только если он содержит один из заданных тегов. Пример: If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz".
If-Modified-Since | Используется в условных методах: запрошенный ресурс передается, только если он был изменен после указанной даты. Пример: If-Modified-Since: Sat, 29 Oct 1999 19:43:31 GMT.
If-None-Match | Используется в условных методах: запрошенный ресурс передается, только если он не содержит ни одного из заданных тегов. Пример: If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz".
If-Range | Используется в условных методах: запрошенный ресурс передается целиком, если он был изменен после указанной даты: иначе передается недостающая часть ресурса. Пример: If-Range: Sat, 29 Oct 1999 19:43:31 GMT.
If-Unmodified-Since | Используется в условных методах: запрошенный ресурс передается, только если он не был изменен после указанной даты. Пример: If-Unmodified-Since: Sat, 29 Oct 1999 19:43:31 GMT.
Max-Forwards | Задает максимальное количество шлюзов и прокси-серверов, которые могут быть использованы для передачи сообщения следующему серверу. Пример: Max-Forwards: 5.
Proxy-Authorization | Задает имя и пароль пользователя для авторизации доступа к прокси-серверу согласно RFC 2617 Внешняя ссылка .
Range | Задает диапазон номеров байтов в теле сообщения. Пример: Range: bytes=0-499.
Referer | Задает URI ресурса, из которого был получен URI запроса. Позволяет серверу создавать списки обратных ссылок и отслеживать устаревшие ссылки. Пример: Referer: http://www.mysite.com/index.html.
TE | Указывает, какие кодировки расширений принимаются в отклике, и принимаются ли кодированные прицепные поля. Пример: TE: trailers, deflate.
User-Agent | Информация об обозревателе, пославшем запрос. Пример: User-Agent: CERN-LineMode/2.15 libwww/2.17b3.
Таблица П5.3. Поля заголовка отклика
Поле | Описание
Accept-Ranges | Указывает, может ли сервер передавать диапазоны байтов. Пример: Accept-Ranges: none.
Age | Возвращает время в секундах, прошедшее с генерации отклика исходным сервером. Пример: Age: 230.
ETag | Содержит тег текущего сообщения. Пример: ETag: "xyzzy".
Location | Возвращает полный URI запрошенного ресурса. Пример: Location: http://www.mysite.com/index.html.
Proxy-Authenticate | Сообщает, что прокси-сервер требует авторизации, и возвращает схему авторизации согласно RFC 2617 Внешняя ссылка .
Retry-After | Сообщает, как долго еще ресурс будет недоступен. Пример: Retry-After: Fri, 31 Dec 1999 23:59:59 GMT.
Server | Содержит информацию о программном обеспечении сервера, пославшего отклик. Пример: Server: CERN/3.0 libwww/2.17.
Vary | Содержит набор полей заголовка запроса, который полностью определяет возможность использования кэша. Пример: Vary: *.
WWW-Authenticate | Сообщает, что ресурс требует авторизации, и возвращает схему авторизации согласно RFC 2617 Внешняя ссылка .
Таблица П5.4. Поля заголовка тела
Поле | Описание
Allow | Содержит список методов, поддерживаемых запрошенным ресурсом. Пример: Allow: GET, HEAD, PUT.
Content-Encoding | Задает способ кодирования тела сообщения. Пример: Content-Encoding: gzip.
Content-Language | Задает естественный язык, на котором написано тело сообщения. Пример: Content-Language: ru.
Content-Length | Задает размер тела в байтах. Пример: Content-Length: 3495.
Content-Location | Содержит URI тела сообщения, когда он отличен от URI запроса. Пример: Content-Location: images/1234.gif.
Content-MD5 | Содержит контрольное значение MD5, используемое для проверки целостности тела сообщения согласно RFC 1864 Внешняя ссылка .
Content-Range | Содержит диапазон байтов в теле сообщения. Пример: Content-Range: bytes 0-499/1234.
Content-Type | Содержит тип MIME тела сообщения. Пример: Content-Type: text/html; charset=ISO-8859-4.
Expires | Дата и время, после которых содержание отклика становится устаревшим. Пример: Expires: Thu, 01 Dec 1999 16:00:00 GMT.
Last-Modified | Дата и время последней модификации передаваемого ресурса. Пример: Last-Modified: Tue, 15 Nov 1999 12:45:26 GMT.

Типы запросов

Строка запроса имеет вид

метод " " URI_запроса " " версия_HHTP CR LF

Здесь метод — это название типа запроса, URI_запроса — это либо URI запрашиваемого ресурса, либо символ "*" в тех случаях, когда запрос не связан с конкретным ресурсом, а версия_HHTP выглядит так:

"HTTP/" цифра "." цифра

Типичные примеры строк запроса:

GET http://www.mysite.com/index.html HTTP/1.1
OPTIONS * HTTP/1.1

Запрос OPTIONS

Метод OPTIONS представляет собой запрос информации об условиях коммуникации, доступных в цепочке запрос/отклик для данного URI запроса. Он позволяет клиенту определить опции и/или требования, связанные с данным ресурсом, не выполняя никаких операций с ресурсом.

Если URI запроса задано символом "*", то запрос относится к серверу, а не к конкретному ресурсу, и позволяет запросить возможности сервера.

Запрос GET

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

Этот метод является условным, если в его заголовке заданы поля If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match или If-Range. Условный метод отличается тем, что запрошенный ресурс будет возвращен только в том случае, когда он удовлетворяет заданному условию.

Запрос HEAD

Метод HEAD полностью аналогичен методу GET, но по нему сервер возвращает только метаинформацию, связанную с запрошенным документом, а не полностью весь документ. Обычно этот метод используется клиентами, которые поддерживают кэширование ресурсов, для проверки того, следует ли обновить информацию в кэше и перезагрузить документ.

Запрос POST

Метод POST используется в следующих случаях:

  • создание аннотаций к имеющимся ресурсам;
  • посылка сообщения на доску объявлений, в группу новостей, список почтовой рассылки и т. п.;
  • передача блока данных, например, результата заполнения формы, программе обработки данных;
  • добавление записей в базу данных.

Суть данного метода состоит в том, что тело запроса передается серверу, и тот интерпретирует его в зависимости от URI запроса (обычно это адрес программы, которая должна обработать данные, содержащиеся в теле запроса). Например, если URI запроса содержит имя CGI-сценария, то этот сценарий будет запущен на сервере и в качестве параметра ему будет передано тело запроса POST.

Запрос PUT

Метод PUT используется для создания нового ресурса с заданным в запросе URI. Если ресурс с таким URI уже существует, то тело запроса рассматривается как его обновленная версия.

Запрос DELETE

Метод DELETE используется для удаления ресурса, имеющего заданный URI.

Запрос TRACE

Метод TRACE используется в целях отладки и диагностики. Он состоит в посылке сообщения по заданной цепочке и в приеме обратного квитирования этого сообщения.

Запрос CONNECT

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

Формат отклика

После получения запроса и его интерпретации сервер отправляет клиенту отклик следующего формата

строка_состояния
заголовки
CR LF
тело_сообщения

где строка_состояния имеет вид

версия_HTTP " " код_состояния " " описание CR LF

Здесь версия_HTTP имеет тот же формат, что и в запросе, коды состояния описаны ниже, а описание — это строка, содержащая краткое текстовое описание кода_состояния.

Типичный пример отклика, возвращающего запрошенный HTML-документ:

HTTP/1.1 200 OK
Date: Wednesday, 02-Feb-00 23:04:12 GMT
Server: NCSA/1.3
MIME-version: 1.0
Last-modified: Monday, 15-Nov-99 23:33:16 GMT
Content-type: text/html
Content-length: 2345
 пустая строка
<HTML><HEAD>…</HTML>

Коды состояния

Код состояния — это целое число из трех цифр, которое указывает на результат выполнения запроса. Первая цифра этого числа определяет класс отклика:

  1. Информационные сообщения (запрос получен, идет его обработка).
  2. Успех (запрос был получен, понят и понят сервером).
  3. Перенаправление (для завершения запроса необходимы дальнейшие действия обозревателя).
  4. Ошибка клиента (запрос неверно составлен или не может быть выполнен).
  5. Ошибка сервера (сервер не смог исполнить, по-видимому, верный запрос).

Оставшиеся две цифры кода состояния определяют его конкретное значение в рамках данного класса. Следующая таблица содержит полный перечень кодов состояния, предусмотренных в HTTP/1.1.

Таблица П5.5. Коды состояния HTTP
Код | Название | Описание
100 | Продолжайте | Клиент должен продолжать передачу запроса. Уже переданная им часть запроса получена и не была отвергнута сервером.
101 | Переключение протоколов | Сервер предлагает изменить протокол на указанный в поле заголовка отклика Update. Обычно это предложение о переходе на более новую версию HTTP.
110 | Отклик мог устареть | Отклик является устаревшим (используется в заголовке Warning).
111 | Обновление не удалось | Отклик от кэша не является свежим, т. к. попытка обновить его закончилась неудачей (используется в заголовке Warning).
112 | Разрыв соединения | Кэш был умышленно отсоединен от остальной сети на некоторое время (используется в заголовке Warning).
113 | Эвристическое устаревание | Кэш эвристически выбрал период обновления, больший 24 часов, и возраст отклика более 24 часов (используется в заголовке Warning).
199 | Различные предупреждения | Дополнительные предупреждения, не содержащиеся в данном списке (используется в заголовке Warning).
200 | OK | Запрос был успешно обработан. Содержимое отклика зависит от типа запроса.
201 | Создано | Запрос был успешно обработан и в результате был создан новый ресурс. Его URI указан в поле заголовка отклика Location.
202 | Принято | Запрос был принят и его обработка началась другим асинхронным процессом, поэтому сервер не сможет сообщить о ее завершении.
203 | Неавторитетная информация | Возвращаемая метаинформация получена не от сервера ее происхождения, а из локальной копии.
204 | Нет содержимого | Сервер выполнил запрос, но ему нечего возвращать клиенту. Обозреватель не должен изменять отображение документа.
205 | Сброс содержимого | Сервер выполнил запрос, и обозреватель должен сбросить отображение документа.
206 | Частичное содержимое | Сервер выполнил частичный запрос GET для ресурса.
214 | Применено преобразование | Применено преобразование, изменившее кодировку или тип MIME отклика (используется в заголовке Warning).
299 | Различные настойчивые предупреждения | Дополнительные предупреждения, не содержащиеся в данном списке (используется в заголовке Warning).
300 | Несколько вариантов | Запрошенный ресурс имеет несколько представлений, и клиент должен выбрать одно из них.
301 | Ресурс перенесен | Запрошенный ресурс сменил свой URI. Его новый URI указан в поле заголовка отклика Location.
302 | Найдено | Запрошенный ресурс временно сменил свой URI.
303 | Смотри другое | Отклик на данный запрос может быть найден под другим URI, указанным в поле заголовка отклика Location.
304 | Не изменено | Клиент выполнил условный запрос GET, доступ разрешен, но документ не был изменен.
305 | Используйте прокси | Доступ к запрошенному ресурсу возможен только через прокси-сервер, указанный в поле заголовка отклика Location.
306 | зарезервирован |
307 | Временное перенаправление | Запрошенный ресурс временно находится под другим URI, указанном в поле заголовка отклика Location.
400 | Неверный запрос | Запрос не был понят сервером из-за его неверного синтаксиса.
401 | Нет права доступа | Запрос требует авторизации доступа, тип которой указан в поле заголовка отклика WWW-Authenticate.
402 | Требуется платеж | Зарезервировано для следующих версий HTTP.
403 | Запрещено | Сервер понял запрос, но отказался его выполнять.
404 | Не найдено | Ресурс, заданный в URI запроса, не найден.
405 | Недопустимый метод | Данный тип запроса не применим к ресурсу, заданному в URI запроса.
406 | Неприемлемо | Ресурс, заданный в URI запроса, может генерировать только отклики, не приемлемые для клиента.
407 | Прокси требует авторизации доступа | Прокси-сервер требует авторизации доступа, тип которой указан в поле заголовка отклика Proxy-Authenticate.
408 | Таймаут запроса | Клиент не послан ни одного запроса в течение отведенного ему интервала.
409 | Конфликт | Запрос не может быть выполнен из-за конфликта с текущим состоянием ресурса.
410 | Ресурс исчез | Запрошенного ресурса больше нет на сервере, и сервер не знает его нового URI.
411 | Требуется длина запроса | В запросе не задано поле заголовка Content-Length.
412 | Условие ложно | Условие, заданное в заголовке условного запроса, не может быть выполнено.
413 | Слишком длинное тело запроса | Тело запроса длиннее, чем допускает сервер.
414 | Слишком длинное URI запроса | URI запроса длиннее, чем допускает сервер.
415 | Не поддерживаемый тип устройства | Формат тела запроса не поддерживается данным ресурсом для данного типа запроса.
416 | Запрошенный диапазон пуст | Запрошенный ресурс не содержит значений в диапазоне, заданном в поле заголовка запроса Range.
417 | Предположение не оправдалось | Предположение, указанное в поле заголовка запроса Expect, отвергнуто сервером.
500 | Внутренняя ошибка сервера | Запрос не исполнен из-за неожиданной ошибки сервера.
501 | Не реализовано | Сервер не поддерживает данный тип запросов.
502 | Плохой шлюз | Сервер, выступающий в роли шлюза или прокси-сервера, получил неверный отклик от следующего сервера.
503 | Служба недоступна | Сервер временно не может исполнить запрос из-за перегрузки.
504 | Таймаут шлюза | Сервер, выступающий в роли шлюза или прокси-сервера, не получил своевременного отклика от следующего сервера.
505 | Версия HTTP не поддерживается | Сервер не поддерживает версию HTTP, указанную в заголовке запроса.


WDH: Специальные символы HTML

Приложение 6.
Специальные символы HTML

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

  • Таблица П6.1 содержит символы латиницы (Latin-1 или ISO-8859-1, см. Приложение 7);
  • Таблица П6.2 содержит специальные символы;
  • Таблица П6.3 содержит математические символы и греческие буквы.
Таблица П6.1. Символы латиницы
Описание символа | Обозначение | 10-ный код | 16-ный код | Вид
неразрывный пробел | &nbsp; | &#160; | &#xA0; |
перевернутый восклицательный знак | &iexcl; | &#161; | &#xA1; | ¡
цент | &cent; | &#162; | &#xA2; | ¢
фунт стерлингов | &pound; | &#163; | &#xA3; | £
знак денежной единицы | &curren; | &#164; | &#xA4; | ¤
йена | &yen; | &#165; | &#xA5; | ¥
вертикальная черта | &brvbar; | &#166; | &#xA6; | ¦
параграф | &sect; | &#167; | &#xA7; | §
диереза | &uml; | &#168; | &#xA8; | ¨
знак авторского права | &copy; | &#169; | &#xA9; | ©
показатель женского рода | &ordf; | &#170; | &#xAA; | ª
открывающая двойная угловая кавычка | &laquo; | &#171; | &#xAB; | «
знак отрицания | &not; | &#172; | &#xAC; | ¬
мягкий перенос | &shy; | &#173; | &#xAD; |
охраняемый знак | &reg; | &#174; | &#xAE; | ®
надчеркивание | &macr; | &#175; | &#xAF; | ¯
градус | &deg; | &#176; | &#xB0; | °
плюс-минус | &plusmn; | &#177; | &#xB1; | ±
вторая степень | &sup2; | &#178; | &#xB2; | ²
третья степень | &sup3; | &#179; | &#xB3; | ³
острое ударение | &acute; | &#180; | &#xB4; | ´
знак микро | &micro; | &#181; | &#xB5; | µ
конец абзаца | &para; | &#182; | &#xB6; | ¶
средняя точка | &middot; | &#183; | &#xB7; | ·
седиль | &cedil; | &#184; | &#xB8; | ¸
единица в верхнем индексе | &sup1; | &#185; | &#xB9; | ¹
показатель мужского рода | &ordm; | &#186; | &#xBA; | º
закрывающая двойная угловая кавычка | &raquo; | &#187; | &#xBB; | »
одна четвертая | &frac14; | &#188; | &#xBC; | ¼
одна вторая | &frac12; | &#189; | &#xBD; | ½
три четверти | &frac34; | &#190; | &#xBE; | ¾
перевернутый вопросительный знак | &iquest; | &#191; | &#xBF; | ¿
A с тупым ударением | &Agrave; | &#192; | &#xC0; | À
A с острым ударением | &Aacute; | &#193; | &#xC1; | Á
A с циркумфлексом | &Acirc; | &#194; | &#xC2; | Â
A с тильдой | &Atilde; | &#195; | &#xC3; | Ã
A с диерезой | &Auml; | &#196; | &#xC4; | Ä
A с кружком | &Aring; | &#197; | &#xC5; | Å
лигатура AE | &AElig; | &#198; | &#xC6; | Æ
C с седилем | &Ccedil; | &#199; | &#xC7; | Ç
E с тупым ударением | &Egrave; | &#200; | &#xC8; | È
E с острым ударением | &Eacute; | &#201; | &#xC9; | É
E с циркумфлексом | &Ecirc; | &#202; | &#xCA; | Ê
E с диерезой | &Euml; | &#203; | &#xCB; | Ë
I с тупым ударением | &Igrave; | &#204; | &#xCC; | Ì
I с острым ударением | &Iacute; | &#205; | &#xCD; | Í
I с циркумфлексом | &Icirc; | &#206; | &#xCE; | Î
I с диерезой | &Iuml; | &#207; | &#xCF; | Ï
ETH | &ETH; | &#208; | &#xD0; | Ð
N с тильдой | &Ntilde; | &#209; | &#xD1; | Ñ
O с тупым ударением | &Ograve; | &#210; | &#xD2; | Ò
O с острым ударением | &Oacute; | &#211; | &#xD3; | Ó
O с циркумфлексом | &Ocirc; | &#212; | &#xD4; | Ô
O с тильдой | &Otilde; | &#213; | &#xD5; | Õ
O с диерезой | &Ouml; | &#214; | &#xD6; | Ö
знак умножения | &times; | &#215; | &#xD7; | ×
O перечеркнутое | &Oslash; | &#216; | &#xD8; | Ø
U с тупым ударением | &Ugrave; | &#217; | &#xD9; | Ù
U с острым ударением | &Uacute; | &#218; | &#xDA; | Ú
U с циркумфлексом | &Ucirc; | &#219; | &#xDB; | Û
U с диерезой | &Uuml; | &#220; | &#xDC; | Ü
Y с острым ударением | &Yacute; | &#221; | &#xDD; | Ý
THORN | &THORN; | &#222; | &#xDE; | Þ
двойное s | &szlig; | &#223; | &#xDF; | ß
a с тупым ударением | &agrave; | &#224; | &#xE0; | à
a с острым ударением | &aacute; | &#225; | &#xE1; | á
a с циркумфлексом | &acirc; | &#226; | &#xE2; | â
a с тильдой | &atilde; | &#227; | &#xE3; | ã
a с диерезой | &auml; | &#228; | &#xE4; | ä
a с кружком | &aring; | &#229; | &#xE5; | å
лигатура ae | &aelig; | &#230; | &#xE6; | æ
c с седилем | &ccedil; | &#231; | &#xE7; | ç
e с тупым ударением | &egrave; | &#232; | &#xE8; | è
e с острым ударением | &eacute; | &#233; | &#xE9; | é
e с циркумфлексом | &ecirc; | &#234; | &#xEA; | ê
e с диерезой | &euml; | &#235; | &#xEB; | ë
i с тупым ударением | &igrave; | &#236; | &#xEC; | ì
i с острым ударением | &iacute; | &#237; | &#xED; | í
i с циркумфлексом | &icirc; | &#238; | &#xEE; | î
i с диерезой | &iuml; | &#239; | &#xEF; | ï
eth | &eth; | &#240; | &#xF0; | ð
n с тильдой | &ntilde; | &#241; | &#xF1; | ñ
o с тупым ударением | &ograve; | &#242; | &#xF2; | ò
o с острым ударением | &oacute; | &#243; | &#xF3; | ó
o с циркумфлексом | &ocirc; | &#244; | &#xF4; | ô
o с тильдой | &otilde; | &#245; | &#xF5; | õ
o с диерезой | &ouml; | &#246; | &#xF6; | ö
знак деления | &divide; | &#247; | &#xF7; | ÷
o перечеркнутое | &oslash; | &#248; | &#xF8; | ø
u с тупым ударением | &ugrave; | &#249; | &#xF9; | ù
u с острым ударением | &uacute; | &#250; | &#xFA; | ú
u с циркумфлексом | &ucirc; | &#251; | &#xFB; | û
u с диерезой | &uuml; | &#252; | &#xFC; | ü
y с острым ударением | &yacute; | &#253; | &#xFD; | ý
thorn | &thorn; | &#254; | &#xFE; | þ
y с диерезой | &yuml; | &#255; | &#xFF; | ÿ
Таблица П6.2. Специальные символы
Описание символа | Обозначение | 10-ный код | 16-ный код | Вид
кавычка | &quot; | &#34; | &#x22; | "
амперсант | &amp; | &#38; | &#x26; | &
левая угловая скобка | &lt; | &#60; | &#x3C; | <
правая угловая скобка | &gt; | &#62; | &#x3E; | >
лигатура OE | &OElig; | &#338; | &#x152; | Œ
лигатура oe | &oelig; | &#339; | &#x153; | œ
S с птичкой | &Scaron; | &#352; | &#x160; | Š
s с птичкой | &scaron; | &#353; | &#x161; | š
Y с диерезой | &Yuml; | &#376; | &#x178; | Ÿ
циркумфлекс | &circ; | &#710; | &#x2C6; | ˆ
малая тильда | &tilde; | &#732; | &#x2DC; | ˜
короткий пробел | &ensp; | &#8194; | &#x2002; |
длинный пробел | &emsp; | &#8195; | &#x2003; |
узкий пробел | &thinsp; | &#8201; | &#x2009; |
разделитель нулевой ширины | &zwnj; | &#8204; | &#x200C; | ‌
соединитель нулевой ширины | &zwj; | &#8205; | &#x200D; | ‍
указатель слева направо | &lrm; | &#8206; | &#x200E; | ‎
указатель справа налево | &rlm; | &#8207; | &#x200F; | ‏
короткое тире | &ndash; | &#8211; | &#x2013; | –
длинное тире | &mdash; | &#8212; | &#x2014; | —
открывающая одинарная кавычка | &lsquo; | &#8216; | &#x2018; | ‘
закрывающая одинарная кавычка | &rsquo; | &#8217; | &#x2019; | ’
нижняя одинарная кавычка | &sbquo; | &#8218; | &#x201A; | ‚
открывающая двойная кавычка | &ldquo; | &#8220; | &#x201C; | “
закрывающая двойная кавычка | &rdquo; | &#8221; | &#x201D; | ”
нижняя двойная кавычка | &bdquo; | &#8222; | &#x201E; | „
кинжал | &dagger; | &#8224; | &#x2020; | †
двойной кинжал | &Dagger; | &#8225; | &#x2021; | ‡
знак промилле | &permil; | &#8240; | &#x2030; | ‰
открывающая угловая кавычка | &lsaquo; | &#8249; | &#x2039; | ‹
закрывающая угловая кавычка | &rsaquo; | &#8250; | &#x203A; | ›
евро | &euro; | &#8364; | &#x20AC; | €
Таблица П6.3. Математические символы и греческие буквы
Описание символа | Обозначение | 10-ный код | 16-ный код | Вид
курсивное f | &fnof; | &#402; | &#x192; | ƒ
прописная альфа | &Alpha; | &#913; | &#x391; | Α
прописная бета | &Beta; | &#914; | &#x392; | Β
прописная гамма | &Gamma; | &#915; | &#x393; | Γ
прописная дельта | &Delta; | &#916; | &#x394; | Δ
прописной эпсилон | &Epsilon; | &#917; | &#x395; | Ε
прописная дзета | &Zeta; | &#918; | &#x396; | Ζ
прописная эта | &Eta; | &#919; | &#x397; | Η
прописная тета | &Theta; | &#920; | &#x398; | Θ
прописная иота | &Iota; | &#921; | &#x399; | Ι
прописная каппа | &Kappa; | &#922; | &#x39A; | Κ
прописная ламбда | &Lambda; | &#923; | &#x39B; | Λ
прописная мю | &Mu; | &#924; | &#x39C; | Μ
прописная ню | &Nu; | &#925; | &#x39D; | Ν
прописная кси | &Xi; | &#926; | &#x39E; | Ξ
прописной омикрон | &Omicron; | &#927; | &#x39F; | Ο
прописная пи | &Pi; | &#928; | &#x3A0; | Π
прописная ро | &Rho; | &#929; | &#x3A1; | Ρ
прописная сигма | &Sigma; | &#931; | &#x3A3; | Σ
прописная тау | &Tau; | &#932; | &#x3A4; | Τ
прописная ипсилон | &Upsilon; | &#933; | &#x3A5; | Υ
прописная фи | &Phi; | &#934; | &#x3A6; | Φ
прописная хи | &Chi; | &#935; | &#x3A7; | Χ
прописная пси | &Psi; | &#936; | &#x3A8; | Ψ
прописная омега | &Omega; | &#937; | &#x3A9; | Ω
строчная альфа | &alpha; | &#945; | &#x3B1; | α
строчная бета | &beta; | &#946; | &#x3B2; | β
строчная гамма | &gamma; | &#947; | &#x3B3; | γ
строчная дельта | &delta; | &#948; | &#x3B4; | δ
строчная эпсилон | &epsilon; | &#949; | &#x3B5; | ε
строчная дзета | &zeta; | &#950; | &#x3B6; | ζ
строчная эта | &eta; | &#951; | &#x3B7; | η
строчная тета | &theta; | &#952; | &#x3B8; | θ
строчная иота | &iota; | &#953; | &#x3B9; | ι
строчная каппа | &kappa; | &#954; | &#x3BA; | κ
строчная ламбда | &lambda; | &#955; | &#x3BB; | λ
строчная мю | &mu; | &#956; | &#x3BC; | μ
строчная ню | &nu; | &#957; | &#x3BD; | ν
строчная кси | &xi; | &#958; | &#x3BE; | ξ
строчный омикрон | &omicron; | &#959; | &#x3BF; | ο
строчная пи | &pi; | &#960; | &#x3C0; | π
строчная ро | &rho; | &#961; | &#x3C1; | ρ
строчная сигма конечная | &sigmaf; | &#962; | &#x3C2; | ς
строчная сигма | &sigma; | &#963; | &#x3C3; | σ
строчная тау | &tau; | &#964; | &#x3C4; | τ
строчная ипсилон | &upsilon; | &#965; | &#x3C5; | υ
строчная фи | &phi; | &#966; | &#x3C6; | φ
строчная хи | &chi; | &#967; | &#x3C7; | χ
строчная пси | &psi; | &#968; | &#x3C8; | ψ
строчная омега | &omega; | &#969; | &#x3C9; | ω
символ строчная тета | &thetasym; | &#977; | &#x3D1; | ϑ
ипсилон с крючком | &upsih; | &#978; | &#x3D2; | ϒ
символ пи | &piv; | &#982; | &#x3D6; | ϖ
маркер списка | &bull; | &#8226; | &#x2022; | •
многоточие | &hellip; | &#8230; | &#x2026; | …
знак прим | &prime; | &#8242; | &#x2032; | ′
знак двойной прим | &Prime; | &#8243; | &#x2033; | ″
надчеркивание | &oline; | &#8254; | &#x203E; | ‾
дробная черта | &frasl; | &#8260; | &#x2044; | ⁄
рукописная P | &weierp; | &#8472; | &#x2118; | ℘
мнимая часть числа | &image; | &#8465; | &#x2111; | ℑ
действительная часть числа | &real; | &#8476; | &#x211C; | ℜ
торговая марка | &trade; | &#8482; | &#x2122; | ™
алеф | &alefsym; | &#8501; | &#x2135; | ℵ
стрелка влево | &larr; | &#8592; | &#x2190; | ←
стрелка вверх | &uarr; | &#8593; | &#x2191; | ↑
стрелка вправо | &rarr; | &#8594; | &#x2192; | →
стрелка вниз | &darr; | &#8595; | &#x2193; | ↓
стрелка влево-вправо | &harr; | &#8596; | &#x2194; | ↔
возврат каретки | &crarr; | &#8629; | &#x21B5; | ↵
двойная стрелка влево | &lArr; | &#8656; | &#x21D0; | ⇐
двойная стрелка вверх | &uArr; | &#8657; | &#x21D1; | ⇑
двойная стрелка вправо | &rArr; | &#8658; | &#x21D2; | ⇒
двойная стрелка вниз | &dArr; | &#8659; | &#x21D3; | ⇓
двойная стрелка влево-вправо | &hArr; | &#8660; | &#x21D4; | ⇔
квантор всеобщности | &forall; | &#8704; | &#x2200; | ∀
знак дифференциала | &part; | &#8706; | &#x2202; | ∂
квантор существования | &exist; | &#8707; | &#x2203; | ∃
пустое множество | &empty; | &#8709; | &#x2205; | ∅
набла | &nabla; | &#8711; | &#x2207; | ∇
принадлежит множеству | &isin; | &#8712; | &#x2208; | ∈
не принадлежит множеству | &notin; | &#8713; | &#x2209; | ∉
является членом | &ni; | &#8715; | &#x220B; | ∋
n-арное произведение | &prod; | &#8719; | &#x220F; | ∏
n-арная сумма | &sum; | &#8721; | &#x2211; | ∑
знак минус | &minus; | &#8722; | &#x2212; | −
оператор звездочка | &lowast; | &#8727; | &#x2217; | ∗
радикал | &radic; | &#8730; | &#x221A; | √
пропорционально | &prop; | &#8733; | &#x221D; | ∝
бесконечность | &infin; | &#8734; | &#x221E; | ∞
угол | &ang; | &#8736; | &#x2220; | ∠
логическое И | &and; | &#8743; | &#x2227; | ∧
логическое ИЛИ | &or; | &#8744; | &#x2228; | ∨
пересечение | &cap; | &#8745; | &#x2229; | ∩
объединение | &cup; | &#8746; | &#x222A; | ∪
интеграл | &int; | &#8747; | &#x222B; | ∫
следовательно | &there4; | &#8756; | &#x2234; | ∴
оператор тильда | &sim; | &#8764; | &#x223C; | ∼
приблизительно равно | &cong; | &#8773; | &#x2245; | ≅
асимптотически равно | &asymp; | &#8776; | &#x2248; | ≈
не равно | &ne; | &#8800; | &#x2260; | ≠
тождественно равно | &equiv; | &#8801; | &#x2261; | ≡
меньше или равно | &le; | &#8804; | &#x2264; | ≤
больше или равно | &ge; | &#8805; | &#x2265; | ≥
подмножество | &sub; | &#8834; | &#x2282; | ⊂
надмножество | &sup; | &#8835; | &#x2283; | ⊃
не подмножество | &nsub; | &#8836; | &#x2284; | ⊄
подмножество или равно | &sube; | &#8838; | &#x2286; | ⊆
надмножество или равно | &supe; | &#8839; | &#x2287; | ⊇
прямая сумма | &oplus; | &#8853; | &#x2295; | ⊕
векторное произведение | &otimes; | &#8855; | &#x2297; | ⊗
перпендикулярно | &perp; | &#8869; | &#x22A5; | ⊥
оператор точка | &sdot; | &#8901; | &#x22C5; | ⋅
левый верхний угол | &lceil; | &#8968; | &#x2308; | ⌈
правый верхний угол | &rceil; | &#8969; | &#x2309; | ⌉
левый нижний угол | &lfloor; | &#8970; | &#x230A; | ⌊
правый нижний угол | &rfloor; | &#8971; | &#x230B; | ⌋
левая угловая скобка | &lang; | &#9001; | &#x2329; | ⟨
правая угловая скобка | &rang; | &#9002; | &#x232A; | ⟩
ромб | &loz; | &#9674; | &#x25CA; | ◊
пики | &spades; | &#9824; | &#x2660; | ♠
трефы | &clubs; | &#9827; | &#x2663; | ♣
червы | &hearts; | &#9829; | &#x2665; | ♥
бубны | &diams; | &#9830; | &#x2666; | ♦


WDH: Кодировки символов

Приложение 7.
Стандартные кодировки символов

Следующие таблицы содержат все допустимые значения параметра charset в метаописателе HTML-документов <META http-equiv="Content-Type" content="text/html; charset=идентификатор"> и в атрибуте encoding пролога XML-документов.

Для каждой кодировки приведены ее название, рекомендуемый в MIME идентификатор, допустимые синонимы этого идентификатора и номер соответствующей кодовой страницы в Windows.

WDH+ См. также WDH+: О кодировках символов и Unicode и письменности мира.

Таблица П7.1. Стандартные кодировки символов
Наименование | Идентификатор | Синонимы | Кодовая страница
Unicode (UTF-7) | utf-7 | csUnicode11UTF7, unicode-utf_7, unicode-1-1-utf-7, unicode-2-0-utf-7, x-unicode-2-0-utf-7 | 65000
Unicode (UTF-8) | utf-8 | unicode-utf_8, unicode-utf_8-1_1, unicode-1-1-utf-8, unicode-2-0-utf-8, x-unicode-2-0-utf-8 | 65001
Unicode (UTF-16) | unicode-utf_16 | csUnicode11, csUnicodeASCII, csUnicodeLatin1, ISO-10646-UCS-2, ISO-10646-UCS-BASIC, ISO-10646-Unicode-Latin1, ISO-10646, ISO-10646-J-1, unicode-utf_16-1.1 |
Unicode (UTF-32) | unicode-utf_32 | ISO-10646-UCS-4 |
Арабский (ASMO 708) | ASMO-708 |  | 708
Арабский (DOS) | DOS-720 |  | 720
Арабский (ISO) | iso-8859-6 | csISOLatinArabic, iso-ir-127, ISO_8859-6, ISO_8859-6:1987, iso-8859_6-1999, ECMA-114, arabic | 28596
Арабский (Windows) | windows-1256 | cp1256, windows-1256-2000 | 1256
Балтийские языки (Latin-4) | iso-8859-4 | csISOLatin4, iso-ir-110, ISO_8859-4, ISO_8859-4:1988, iso-8859_4-1988, l4, latin4 | 28594
Балтийские языки (Windows) | windows-1257 | windows-1257-2000 | 1257
Вьетнамский (Windows) | windows-1258 | windows-1258-2000 | 1258
Греческий (ISO) | iso-8859-7 | csISOLatinGreek, iso-ir-126, ISO_8859-7, ISO_8859-7:1987, iso-8859_7-1987, ECMA-118, ELOT_928, greek, greek8 | 28597
Греческий (Windows) | windows-1253 | windows-1253-2000, x-cp1253 | 1253
Европа (Latin-3) | iso-8859-3 | iso-8859_3-1999 | 28593
Европа (Latin-6) | iso-8859-10 | iso-8859_10-1999 |
Европа (Latin-7) | iso-8859-13 | iso-8859_13-1999 |
Европа (Latin-9) | iso-8859-15 | iso-8859_15-1999 | 28605
Западная Европа (ASCII) | us-ascii | ANSI_X3.4-1968, ANSI_X3.4-1986, cp367, csASCII, IBM367, iso-ir-6, ISO646-US, ISO_646.irv:1991, ascii, us, us-ascii-1968, x-ansi | 20127
Западная Европа (Latin-1) | iso-8859-1 | cp819, ibm819, iso-ir-100, iso8859-1, iso_8859-1, iso_8859-1:1987, iso-8859_1-1998, ISO-8859-1-Windows-3.0-Latin-1, ISO-8859-1-Windows-3.1-Latin-1, latin1, l1 | 29591
Западная Европа (Mac) | mac-roman-2000 | x-mac-roman | 10000
Западная Европа (Windows) | windows-1252 |  | 1252
Иврит (DOS) | DOS-862 |  | 862
Иврит (ISO–визуальный) | iso-8859-8 | csISOLatinHebrew, iso-ir-138, ISO_8859-8, iso-8859_8-1999, ISO-8859-8 Visual, visual, hebrew | 28598
Иврит (ISO–логический) | iso-8859-8-i |  | 38598
Иврит (Windows) | windows-1255 | ISO_8859-8:1988, iso-ir-138, logical, windows-1255-2000 | 1255
Кельтские языки (Latin-8) | iso-8859-14 | iso-8859_14-1999 |
Кириллица (DOS) | cp866 | ibm866 | 866
Кириллица (ISO) | iso-8859-5 | csISOLatinCyrillic, iso-ir-144, ISO_8859-5, ISO_8859-5:1988, iso-8859_5-1999, cyrillic | 28595
Кириллица (Mac) | mac-cyrillic-2000 | x-mac-cyrillic | 10007
Кириллица (Windows) | windows-1251 | csWindows31Latin5, iso-8859-5-windows-latin-5, windows-1251-2000, x-cp1251 | 1251
Кириллица (КОИ8-Р) | koi8-r | csKOI8R, koi, ru-koi8_r-2000 | 20866
Китайский – традиционное письмо (EUC) | x-euc-tw | osf-euc_tw-2000 | 51950
Китайский – традиционное письмо (Windows) | big5 | csBig5, CN-Big5, windows-950, windows-950-2000, x-x-big5 | 950
Китайский – упрощенное письмо (GB2312) | gb2312 | csGB2312, csISO58GB23128, iso-ir-58, GB2312, GBK, GB_2312-80, gb-3212-2000, chinese, CN-GB, CN-GB-ISOIR165 | 936
Китайский – упрощенное письмо (HZ) | hz-gb-2312 |  | 52936
Корейский (EUC) | euc-kr | csEUCKR, ks_c_5601, kcs5601, osf-euc_kr-2000 | 51949
Корейский (ISO) | iso-2022-kr | csISO2022KR, posix-2022_kr | 50225
Корейский (Windows) | ks_c_5601-1987 | csKSC56011987, korean, windows-949, windows-949-2000 | 949
Тайский (Windows) | iso-8859-11 | windows-874, windows-874-2000 | 874
Турецкий (ISO) | iso-8859-9 | csISOLatin5, iso-ir-148, l5, ISO_8859-9, ISO_8859-9:1989, iso-8859_9-1999, latin5 | 28599
Турецкий (Windows) | windows-1254 | windows-1254-2000, x-cp1254 | 1254
Украинский (КОИ8-У) | koi8-u |  | 21866
Центральная Европа (DOS) | ibm852 | cp852 | 852
Центральная Европа (Latin-2) | iso-8859-2 | csISOLatin2, iso-ir-101, iso8859-2, iso_8859-2, iso_8859-2:1987, iso_8859_2-1999, ISO-8859-2-Windows-Latin-2, l2, latin2 | 28592
Центральная Европа (Mac) | mac-ce-2000 | x-mac-ce | 10029
Центральная Европа (Windows) | windows-1250 | x-cp1250 | 1250
Японский (EUC) | euc-jp | csEUCPkdFmtJapanese, Extended_UNIX_Code_Packed_Format_for_Japanese, osf-euc_jp-2000, x-euc, x-euc-jp | 51932
Японский (JIS) | iso-2022-jp | csISO2022JP, csISO2022JP2, iso-2022-jp-2, posix-2022_jp-2000 | 50220
Японский (JIS – допускающий однобайтовую кану – SO/SI) | iso-2022-jp | csISO2022JP, _iso-2022-jp$SIO | 50222
Японский (JIS – допускающий однобайтовую кану) | csISO2022JP | _iso-2022-jp$ESC | 50221
Японский (Windows) | shift_jis | csShiftJIS, csWindows31J, ms_Kanji, shift-jis, x-ms-cp932, x-sjis, Windows-31J, windows-932-2000 | 932
Таблица П7.2. Нестандартные кодировки символов в Internet Explorer
Наименование | Идентификатор | Кодовая страница
Unicode | unicode | 1200
Unicode (левый байт старший) | unicodeFEFF | 1201
Определенный пользователем | x-user-defined | 50000
Автоматический выбор | _autodetect_all | 50001
Корейский (автовыбор) | _autodetect_kr | 50949
Японский (автовыбор) | _autodetect | 50932


WDH: Коды языков

Приложение 8.
Коды языков в HTML

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

Таблица П8.1. Коды языков в HTML
Язык | Код | Язык | Код
Абхазский | ab | Малайский | ms
Азербайджанский | az | Малаялям | ml
Аймара | ay | Мальтийский | mt
Албанский | sq | Маорийский | mi
Амхарский | am | Маратхи | mr
Английский
  • Австралия
  • Белиз
  • Великобритания
  • Ирландия
  • Канада
  • Карибские о-ва
  • Новая Зеландия
  • США
  • Тринидад и Тобаго
  • ЮАР
  • Ямайка
 en
  • en-au
  • en-bz
  • en-gb
  • en-ie
  • en-ca
  • en
  • en-nz
  • en-us
  • en-tt
  • en-za
  • en-jm
 Молдавский mo
Арабский
  • Алжир
  • Бахрейн
  • Египет
  • Иордания
  • Ирак
  • Йемен
  • Катар
  • Кувейт
  • Ливан
  • Ливия
  • Марокко
  • ОАЭ
  • Оман
  • Саудовская Аравия
  • Сирия
  • Тунис
 ar
  • ar-dz
  • ar-bh
  • ar-eg
  • ar-jo
  • ar-iq
  • ar-ye
  • ar-qa
  • ar-kw
  • ar-lb
  • ar-ly
  • ar-ma
  • ar-ae
  • ar-om
  • ar-sa
  • ar-sy
  • ar-tn
 Монгольский mn
Армянский | hy | Науру | na
Ассамский as Немецкий
  • Австрия
  • Германия
  • Лихтенштейн
  • Люксембург
  • Швейцария
 de
  • de-at
  • de
  • de-li
  • de-lu
  • de-ch
Афан (оромо) | om | Непальский | ne
Афар | aa | Норвежский | no
Афганский (пушту) | ps | Окситанский (провансальский) | oc
Африкаанс | af | Ория | or
Баскский | eu | Панджаби | pa
Башкирский | ba | Персидский (фарси) | fa
Белорусский | be | Польский | pl
Бенгали bn Португальский
  • Бразилия
  • Португалия
 pt
  • pt-br
  • pt
Бирманский | my | Ретороманский | rm
Бислама bi Румынский
  • Молдавия
  • Румыния
 ro
  • ro-mo
  • ro
Бихари bh Русский
  • Молдавия
  • Россия
 ru
  • ru-mo
  • ru
Болгарский | bg | Саами | sz
Бретонский | br | Самоанский | sm
Валлийский | cy | Санскрит | sa
Венгерский | hu | Саньё | sg
Волапюк | vo | Сербохорватский | sh
Волоф | wo | Сербский | sr
Вьетнамский | vi | Сесото | st
Галисийский | gl | Сетсвана | tn
Голландский
  • Бельгия
  • Нидерланды
 nl
  • nl-be
  • nl
 Сингальский si
Гренландский | kl | Синдхи | sd
Греческий | el | Сисвази | ss
Грузинский | ka | Словацкий | sk
Гуарани | gn | Словенский | sl
Гуджарати | gu | Сомали | so
Гэльский
  • Ирландия
  • Шотландия
 gd
  • gd-ie
  • gd
 Суахили sw
Датский | da | Сунданский | su
Джуанг | za | Тагальский | tl
Дзонг-кэ | dz | Таджикский | tg
Зулу | zu | Тайский (сиамский) | th
Иврит | he | Тамильский | ta
Идиш | yi | Татарский | tt
Индонезийский | id | Тви | tw
Интерлингва | ia | Телугу | te
Интерлингве | ie | Тибетский | bo
Ирландский | ga | Тигринья | ti
Исландский | is | Тонганский | to
Испанский
  • Аргентина
  • Боливия
  • Венесуэла
  • Гватемала
  • Гондурас
  • Доминиканская р-ка
  • Испания
  • Колумбия
  • Коста-Рика
  • Мексика
  • Никарагуа
  • Панама
  • Парагвай
  • Перу
  • Пуэрто-Рико
  • Сальвадор
  • Уругвай
  • Чили
  • Эквадор
 es
  • es-ar
  • es-bo
  • es-ve
  • es-gt
  • es-hn
  • es-do
  • es
  • es-co
  • es-cr
  • es-mx
  • es-ni
  • es-pa
  • es-py
  • es-pe
  • es-pr
  • es-sv
  • es-uy
  • es-cl
  • es-ec
 Тсонга (шангаан) ts
Итальянский
  • Италия
  • Швейцария
 it
  • it
  • it-ch
 Турецкий tr
Йоруба | yo | Туркменский | tk
Казахский | kk | Узбекский | uz
Каннада | kn | Уйгурский | ug
Каталанский | ca | Украинский | uk
Кашмири | ks | Урду | ur
Кечуа | qu | Фарерский | fo
Киньяруанда | rw | Фиджийский | fj
Киргизский | ky | Финский | fi
Китайский
  • Гонконг
  • КНР
  • Сингапур
  • Тайвань
 zh
  • zh-hk
  • zh-cn
  • zh-sg
  • zh-tw
 Французский
  • Бельгия
  • Канада
  • Люксембург
  • Франция
  • Швейцария
 fr
  • fr-be
  • fr-ca
  • fr-lu
  • fr
  • fr-ch
Корейский | ko | Фризский | fy
Корсиканский | co | Хауса | ha
Коса | xh | Хинди | hi
Курдский | ku | Хорватский | hr
Курунди | rn | Чешский | cs
Кхмерский | km | Чивенда | ve
Лаосский | lo | Чишона | sn
Латвийский lv Шведский
  • Финляндия
  • Швеция
 sv
  • sv-fi
  • sv
Латинский | la | Эскимосский (инуитский) | iu
Лингала | ln | Эскимосский (юитский) | ik
Литовский | lt | Эсперанто | eo
Лужицкий (сорбский) | sb | Эстонский | et
Македонский | mk | Яванский | jv
Малагасийский | mg | Японский | ja


WDH: Коды цветов

Приложение 9.
Коды цветов в HTML и CSS

Следующие таблицы содержат все допустимые значения атрибута color в HTML. Для каждого цвета приведены его название, соответствующий шестнадцатеричный RGB-код и его десятичное представление, удобное для работы в графических редакторах.

  • Таблица П9.1 содержит наименования базовых цветов HTML, соответствующих палитре VGA-мониторов;
  • Таблица П9.2 содержит наименования всех цветов, поддерживаемых Internet Explorer и Netscape Navigator;
  • Таблица П9.3 содержит наименования системных цветов CSS и их значения в Windows по умолчанию (они могут быть изменены пользователем в панели управления).

Примечание. Мы настоятельно рекомендуем не пользоваться названиями цветов из Таблицы П9.2, а использовать вместо них соответствующие RGB-коды. Дело в том, что обозреватели, отличные от Microscape, либо не поддерживают эти названия, либо отображают их в другие цвета. Так, например, в Miscroscape цвету aliceblue соответствует значение #F0F8FF, а в WebTV — #A0CE00.

Таблица П9.1. Базовые цвета HTML
black (#000000) (0, 0, 0) | silver (#C0C0C0) (192, 192, 192) | gray (#808080) (128, 128, 128) | white (#FFFFFF) (255, 255, 255)
maroon (#800000) (128, 0, 0) | red (#FF0000) (255, 0, 0) | purple (#800080) (128, 0, 128) | fuchsia (#FF00FF) (255, 0, 255)
green (#008000) (0, 128, 0) | lime (#00FF00) (0, 255, 0) | olive (#808000) (128, 128, 0) | yellow (#FFFF00) (255, 255, 0)
navy (#000080) (0, 0, 128) | blue (#0000FF) (0, 0, 255) | teal (#008080) (0, 128, 128) | aqua (#00FFFF) (0, 255, 255)
Таблица П9.2. Цвета Internet Explorer и Netscape Navigator
aliceblue (#F0F8FF) (240, 248, 255) | antiquewhite (#FAEBD7) (250, 235, 215) | aqua (#00FFFF) (0, 255, 255) | aquamarine (#7FFFD4) (127, 255, 212)
azure (#F0FFFF) (240, 255, 255) | beige (#F5F5DC) (245, 245, 220) | bisque (#FFE4C4) (255, 228, 196) | black (#000000) (0, 0, 0)
blanchedalmond (#FFEBCD) (255, 235, 205) | blue (#0000FF) (0, 0, 255) | blueviolet (#8A2BE2) (138, 43, 226) | brown (#A52A2A) (165, 42, 42)
burlywood (#DEB887) (222, 184, 135) | cadetblue (#5F9EA0) (95, 158, 160) | chartreuse (#7FFF00) (127, 255, 0) | chocolate (#D2691E) (210, 105, 30)
coral (#FF7F50) (255, 127, 80) | cornflowerblue (#6495ED) (100, 149, 237) | cornsilk (#FFF8DC) (255, 248, 220) | crimson (#DC143C) (220, 20, 60)
cyan (#00FFFF) (0, 255, 255) | darkblue (#00008B) (0, 0, 139) | darkcyan (#008B8B) (0, 139, 139) | darkgoldenrod (#B8860B) (184, 134, 11)
darkgray (#A9A9A9) (169, 169, 169) | darkgreen (#006400) (0, 100, 0) | darkkhaki (#BDB76B) (189, 183, 107) | darkmagenta (#8B008B) (139, 0, 139)
darkolivegreen (#556B2F) (85, 107, 47) | darkorange (#FF8C00) (255, 140, 0) | darkorchid (#9932CC) (153, 50, 204) | darkred (#8B0000) (139, 0, 0)
darksalmon (#E9967A) (233, 150, 122) | darkseagreen (#8FBC8B) (143, 188, 143) | darkslateblue (#483D8B) (72, 61, 139) | darkslategray (#2F4F4F) (47, 79, 79)
darkturquoise (#00CED1) (0, 206, 209) | darkviolet (#9400D3) (148, 0, 211) | deeppink (#FF1493) (255, 20, 147) | deepskyblue (#00BFFF) (0, 191, 255)
dimgray (#696969) (105, 105, 105) | dodgerblue (#1E90FF) (30, 144, 255) | firebrick (#B22222) (178, 34, 34) | floralwhite (#FFFAF0) (255, 250, 240)
forestgreen (#228B22) (34, 139, 34) | fuchsia (#FF00FF) (255, 0, 255) | gainsboro (#DCDCDC) (220, 220, 220) | ghostwhite (#F8F8FF) (248, 248, 255)
gold (#FFD700) (255, 215, 0) | goldenrod (#DAA520) (218, 165, 32) | gray (#808080) (128, 128, 128) | green (#008000) (0, 128, 0)
greenyellow (#ADFF2F) (173, 255, 47) | honeydew (#F0FFF0) (240, 255, 240) | hotpink (#FF69B4) (255, 105, 180) | indianred (#CD5C5C) (205, 92, 92)
indigo (#4B0082) (75, 0, 130) | ivory (#FFFFF0) (255, 255, 240) | khaki (#F0E68C) (240, 230, 140) | lavender (#E6E6FA) (230, 230, 250)
lavenderblush (#FFF0F5) (255, 240, 245) | lawngreen (#7CFC00) (124, 252, 0) | lemonchiffon (#FFFACD) (255, 250, 205) | lightblue (#ADD8E6) (173, 216, 230)
lightcoral (#F08080) (240, 128, 128) | lightcyan (#E0FFFF) (224, 255, 255) | lightgoldenrodyellow (#FAFAD2) (250, 250, 210) | lightgreen (#90EE90) (144, 238, 144)
lightgray (#D3D3D3) (211, 211, 211) | lightpink (#FFB6C1) (255, 182, 193) | lightsalmon (#FFA07A) (255, 160, 122) | lightseagreen (#20B2AA) (32, 178, 170)
lightskyblue (#87CEFA) (135, 206, 250) | lightslategray (#778899) (119, 136, 153) | lightsteelblue (#B0C4DE) (176, 196, 222) | lightyellow (#FFFFE0) (255, 255, 224)
lime (#00FF00) (0, 255, 0) | limegreen (#32CD32) (50, 205, 50) | linen (#FAF0E6) (250, 240, 230) | magenta (#FF00FF) (255, 0, 255)
maroon (#800000) (128, 0, 0) | mediumaquamarine (#66CDAA) (102, 205, 170) | mediumblue (#0000CD) (0, 0, 205) | mediumorchid (#BA55D3) (186, 85, 211)
mediumpurple (#9370DB) (147, 112, 219) | mediumseagreen (#3CB371) (60, 179, 113) | mediumslateblue (#7B68EE) (123, 104, 238) | mediumspringgreen (#00FA9A) (0, 250, 154)
mediumturquoise (#48D1CC) (72, 209, 204) | mediumvioletred (#C71585) (199, 21, 133) | midnightblue (#191970) (25, 25, 112) | mintcream (#F5FFFA) (245, 255, 250)
mistyrose (#FFE4E1) (255, 228, 255) | moccasin (#FFE4B5) (255, 228, 181) | navajowhite (#FFDEAD) (255, 222, 183) | navy (#000080) (0, 0, 128)
oldlace (#FDF5E6) (253, 245, 230) | olive (#808000) (128, 128, 0) | olivedrab (#6B8E23) (107, 142, 35) | orange (#FFA500) (255, 165, 0)
orangered (#FF4500) (255, 69, 0) | orchid (#DA70D6) (218, 112, 214) | palegoldenrod (#EEE8AA) (238, 232, 170) | palegreen (#98FB98) (152, 251, 152)
paleturquoise (#AFEEEE) (175, 238, 238) | palevioletred (#DB7093) (219, 112, 147) | papayawhip (#FFEFD5) (255, 239, 213) | peachpuff (#FFDAB9) (255, 218, 185)
peru (#CD853F) (205, 133, 63) | pink (#FFC0CB) (255, 192, 203) | plum (#DDA0DD) (221, 160, 221) | powderblue (#B0E0E6) (176, 224, 230)
purple (#800080) (128, 0, 128) | red (#FF0000) (255, 0, 0) | rosybrown (#BC8F8F) (188, 143, 143) | royalblue (#4169E1) (65, 105, 225)
saddlebrown (#8B4513) (139, 69, 19) | salmon (#FA8072) (250, 128, 114) | sandybrown (#F4A460) (244, 164, 96) | seagreen (#2E8B57) (46, 139, 87)
seashell (#FFF5EE) (255, 245, 238) | sienna (#A0522D) (160, 82, 45) | silver (#C0C0C0) (192, 192, 192) | skyblue (#87CEEB) (135, 206, 235)
slateblue (#6A5ACD) (106, 90, 205) | slategray (#708090) (112, 128, 144) | snow (#FFFAFA) (255, 250, 250) | springgreen (#00FF7F) (0, 255, 127)
steelblue (#4682B4) (70, 130, 180) | tan (#D2B48C) (210, 180, 140) | teal (#008080) (0, 128, 128) | thistle (#D8BFD8) (216, 191, 216)
tomato (#FF6347) (255, 99, 71) | turquoise (#40E0D0) (64, 224, 208) | violet (#EE82EE) (238, 130, 238) | wheat (#F5DEB3) (245, 222, 179)
white (#FFFFFF) (255, 255, 255) | whitesmoke (#F5F5F5) (245, 245, 245) | yellow (#FFFF00) (255, 255, 0) | yellowgreen (#9ACD32) (154, 205, 50)
Таблица П9.3. Системные цвета CSS в Windows по умолчанию
activeborder | activecaption | appworkspace | background
buttonface | buttonhighlight | buttonshadow | buttontext
captiontext | graytext | highlight | highlighttext
inactiveborder | inactivecaption | inactivecaptiontext | infobackground
infotext | menu | menutext | scrollbar
threeddarkshadow | threedface | threedhighlight | threedlightshadow
threedshadow | window | windowframe | windowtext


WDH: Устаревшие и нестандартные элементы HTML

Приложение 10.
Устаревшие и нестандартные
элементы HTML

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

Морально устаревшие элементы

Аплеты Java: элемент APPLET

Синтаксис: <APPLET>…</APPLET> (блочный элемент)
Атрибуты:  id, class, style, title, события
           code = CDATA (имя файла класса)
           codebase = URI (базовый URI для файлов класса)
           width = размер (ширина окна аплета)
           height = размер (высота окна аплета)
           archive = CDATA (список библиотек классов)
           object = CDATA (сериализованный аплет)
           name = CDATA (имя аплета для взаимодействия с другими аплетами)
           alt = текст (альтернативный текст)
           align = top | middle | bottom | left |right (выравнивание аплета)
           hspace = пиксели (горизонтальный промежуток)
           vspace = пиксели (вертикальный промежуток)
Поддержка:   Internet Explorer  Атрибуты archive и object игнорируются (5.0+)
             Netscape Navigator  Атрибут object игнорируется (4.0+)

Элемент APPLET описывает аплет на языке Java. Его содержимым являются один или несколько элементов PARAM, за которыми следуют блочные и/или текстовые элементы, которые отображаются, если указанный аплет не удается запустить. Этот морально устаревший элемент следует заменять на элемент OBJECT, который имеет все атрибуты данного элемента, но является более общим. Пример: следующий морально устаревший фрагмент HTML-кода

<APPLET code="Animate.class" width="100" height="100">
  <PARAM name="img1" VALUE="/images/1.jpg">
  <PARAM name="img2" VALUE="/images/2.jpg">
  <IMG src="animation.gif" alt="" width="100" height="100">
</APPLET>

следует заменить на

<OBJECT classid="java:Animate.class" codetype="application/java"
  width="100" height="100">
  <PARAM name="img1" VALUE="/images/1.jpg">
  <PARAM name="img2" VALUE="/images/2.jpg">
  <IMG src="animation.gif" alt="" width="100" height="100">
</OBJECT>

Базовый шрифт: элемент BASEFONT

Синтаксис: <BASEFONT> (конечного тега и содержимого нет)
Атрибуты:  id
           size = CDATA (размер шрифта)
           color = цвет (цвет шрифта)
           face = CDATA (гарнитура шрифта)
Поддержка:   Internet Explorer  Соответствует стандарту (5.0+)
             Netscape Navigator  Атрибуты id, color и face игнорируются (4.0+)

Элемент BASEFONT изменяет параметры базового шрифта, т. е. влияет на внешний вид всех последующих за ним элементов, кроме заголовков. Обязательным атрибутом является size, который может принимать значения от 1 до 7 (по умолчанию он равен 3). Вместо использования этого морального устаревшего элемента следует пользоваться таблицами стилей.

Горизонтальное центрирование: элемент CENTER

Синтаксис: <CENTER>…</CENTER> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Соответствует стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (4.0+)

Элемент CENTER определяет блок, содержимое которого центрируется обозревателями по горизонтали. Этот морально устаревший элемент следует заменять на эквивалентную конструкцию <DIV style="text-align: center">…</DIV>.

Каталожный список: элемент DIR

Синтаксис: <DIR>…</DIR> (блочный элемент)
Атрибуты:  id, class, style, title, события
Поддержка:   Internet Explorer  Соответствует стандарту (5.0+)
             Netscape Navigator  Атрибут title игнорируется (4.0+)

Элемент DIR (directory list) определяет каталожный список, состоящий из элементов списка LI. Этот морально устаревший элемент следует заменять на элемент UL.

Задание шрифта: элемент FONT

Синтаксис: <FONT>…</FONT> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           size = CDATA (размер шрифта)
           color = цвет (цвет шрифта)
           face = CDATA (гарнитура шрифта)
Поддержка:   Internet Explorer  Соответствует стандарту (5.0+)
             Netscape Navigator  Атрибуты title, class, id, dir и lang игнорируются (4.0+)

Элемент FONT задает параметры шрифта для отображения своего содержимого. Вместо использования этого морального устаревшего элемента следует пользоваться таблицами стилей.

Ввод строки текста: элемент ISINDEX

Синтаксис: <ISINDEX> (конечного тега и содержимого нет)
Атрибуты:  id, class, style, title, lang, dir, события
           prompt = текст (метка поля ввода)
Поддержка:   Internet Explorer  Атрибуты title, dir и lang игнорируются (5.0+)
             Netscape Navigator  Атрибуты title, dir и lang игнорируются (4.0+)

Элемент ISINDEX определяет ввод одной строки текста. Этот морально устаревший элемент следует заменять на элемент INPUT, например

<ISINDEX prompt="Введите искомый текст:">

следует заменить на

<FORM action="URI документа, содержащего ISINDEX" method="get">
  <P>Введите искомый текст: <INPUT type="text"></P>
</FORM>

Список меню: элемент MENU

Синтаксис: <MENU>…</MENU> (блочный элемент)
Атрибуты:  id, class, style, title, события
Поддержка:   Internet Explorer  Соответствует стандарту (5.0+)
             Netscape Navigator  Атрибут title игнорируется (4.0+)

Элемент MENU (menu list) определяет список меню, состоящий из элементов списка LI. Этот морально устаревший элемент следует заменять на элемент UL.

Перечеркнутый текст: элементы S и STRIKE

Синтаксис: <S>…</S> (текстовый элемент)
           <STRIKE>…</STRIKE> (текстовый элемент)
Атрибуты:  id, class, style, title, события
Поддержка:   Internet Explorer  Соответствует стандарту (4.0+)
             Netscape Navigator  Соответствует стандарту (3.0+)

Элементы S и STRIKE являются синонимами и указывают, что содержащийся в них текст должен быть перечеркнут при отображении. Эти морально устаревшие элементы следует заменять на эквивалентную конструкцию <SPAN style="text-decoration: line-through">…</SPAN>.

Подчеркнутый текст: элемент U

Синтаксис: <U>…</U> (текстовый элемент)
Атрибуты:  id, class, style, title, события
Поддержка:   Internet Explorer  Соответствует стандарту (4.0+)
             Netscape Navigator  Соответствует стандарту (3.0+)

Элемент U указывает, что содержащийся в нем текст должен быть подчеркнут при отображении. Этот морально устаревший элемент следует заменять на эквивалентную конструкцию: <SPAN style="text-decoration: underline">…</SPAN>.

Нестандартные элементы

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

Вложенные объекты: элемент EMBED

Синтаксис: <EMBED> (блочный элемент, конечного тега и содержимого нет)
Атрибуты:  id, class, style, title, события
           code = CDATA (имя файла, содержащего Java-аплет)
           src = URI (URI загружаемого файла)
           width = размер (ширина окна объекта)
           height = размер (высота окна объекта)
           units = px | em (единица измерения высоты и щирины)
           name = CDATA (имя аплета)
           alt = текст (альтернативный текст)
           align = top | middle | bottom | left |right (выравнивание объекта)
           hspace = пиксели (горизонтальный промежуток)
           vspace = пиксели (вертикальный промежуток)
           pluginspage = URI (URI загружаемого модуля)
           accesskey = символ (имя клавиши быстрого доступа)
           tabindex = число (номер в порядке нажатия табуляции)
Поддержка:   Internet Explorer  Соответствует описанию (5.0+)
             Netscape Navigator  Атрибуты style, title, accesskey и tabindex игнорируются (4.0+)

Элемент EMBED (embedded) описывает вложенный объект. Первоначально он был введен для загрузки аудиофайлов, а затем был расширен на любые файлы нестандартных типов. Этот элемент следует заменять на более общий элемент OBJECT, атрибуты которого зависят от типа загружаемого объекта.

Текст без разрывов строк: элемент NOBR

Синтаксис: <NOBR>…</NOBR> (текстовый элемент)
Атрибуты:  id, style, title, события
Поддержка:   Internet Explorer  Соответствует описанию (4.0+)
             Netscape Navigator  Атрибуты style и title игнорируются (4.0+)

Элемент NOBR (no break) указывает, что содержащийся в нем текст должен отображаться без разрывов строк. Это полезный нестандартный элемент, поскольку он не имеет замены стандартными средствами. Согласно стандартам, его следует заменять на свойство стилей white-space: nowrap, но оно не поддерживается современными обозревателями. См. также элемент WBR.

Мягкий разрыв строки: элемент WBR

Синтаксис: <WBR> (конечного тега и содержимого нет)
Атрибуты:  id
Поддержка:   Internet Explorer  Соответствует описанию (4.0+)
             Netscape Navigator  Соответствует описанию (4.0+)

Элемент WBR (word break) употребляется только внутри элемента NOBR и указывает, что в этом месте возможен разрыв строки. Это полезный нестандартный элемент, поскольку он не имеет замены стандартными средствами.

Морально устаревшие атрибуты

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

Таблица П10.1. Морально устаревшие атрибуты HTML
Атрибут HTML | В элементе | Свойство CSS | Описание
align = top | bottom | left | right | CAPTION | caption-side: top | bottom | left | right | выравнивание относительно таблицы
align = top | middle | bottom | left | right | APPLET, IFRAME, IMG, INPUT, OBJECT | vertical-align: top | middle | bottom; float: left | right | вертикальное или горизонтальное выравнивание
align = top | bottom | left | right | LEGEND | нет | выравнивание относительно FIELDSET
align = left | center | right | HR, TABLE | <DIV style="text-align: left | center | right">…</DIV> | выравнивание относительно окна
align = left | center | right | justify | DIV, H1 — H6, P | text-align: left | center | right | justify | выравнивание текста
alink = цвет | BODY | A:active { color: цвет } | цвет активной гиперссылки
background = URI | BODY | BODY { background-image: url(URI) } | файл фона документа
bgcolor = цвет | BODY | BODY { background-color: цвет } | цвет фона документа
bgcolor = цвет | TABLE, TR, TD, TH | background-color: цвет | цвет фона элемента
border = пиксели | IMG, OBJECT | border-width: thin | medium | thick | размер | ширина рамки
clear = none | left | right | all | BR | clear: none | left | right | both | тип обтекания текста
color = цвет | BASEFONT, FONT | color: цвет | цвет шрифта
compact = compact | DIR, DL, MENU, OL, UL | list-style-position: inside | компактное отображение списков
face = CDATA | BASEFONT, FONT | font-family: список строк через запятую | гарнитура шрифта
height = размер | APPLET, TD, TH | height: размер | высота элемента
hspace = пиксели | APPLET, IMG, OBJECT | margin-left: размер; margin-right: размер | горизонтальный промежуток
language = CDATA | SCRIPT | нет | язык сценария
link = цвет | BODY | A:link { color: цвет } | цвет гиперссылок
noshade = noshade | HR | нет | отображение сплошным цветом
nowrap = nowrap | TD, TH | white-space: nowrap | без переноса слов на новую строку
size = пиксели | HR | height: размер | высота разделителя
size = CDATA | BASEFONT, FONT | font-size: число | размер шрифта
start = число | OL | нет | начальный номер элементов списка
text = цвет | BODY | BODY { color: цвет } | цвет текста документа
type = 1 | a | A | i | I | OL | list-style-type: decimal | lower-latin | upper-latin | lower-roman | upper-roman | тип нумерованного списка
type = disc | square | circle | UL | list-style-type: disc| square | circle | тип маркированного списка
type = disc | square | circle | 1 | a | A | i | I | LI | list-style-type: disc | square | circle | decimal | lower-latin | upper-latin | lower-roman | upper-roman | тип маркера элемента списка
value = число | LI | нет | изменение нумерации элементов списка
version = CDATA | HTML | нет | версия языка HTML
vlink = цвет | BODY | A:visited { color: цвет } | цвет посещенных гиперссылок
vspace = пиксели | APPLET, IMG, OBJECT | margin-top: размер; margin-bottom: размер | вертикальный промежуток
width = размер | APPLET, HR, TD, TH | width: размер | ширина элемента
width = число | PRE | width: размер | ширина текста


WDH: Поддержка языка HTML обозревателями

Приложение 11.
Поддержка языка HTML обозревателями

Таблица П11.1. Поддержка элементов HTML обозревателями
Элемент HTML | Internet Explorer | Netscape Navigator
A | Да | Да
ABBR | Нет | Нет
ACRONYM | Да, подсказка в title | Нет
ADDRESS | Да, курсивный шрифт | Да, курсивный шрифт
AREA | Да | Да
B | Да | Да
BASE | Да | Да
BDO | Да | Нет
BIG | Да | Да
BLOCKQUOTE | Да, отступ вправо | Да, отступ вправо
BODY | Да | Да
BR | Да | Да
BUTTON | Да | Нет
CAPTION | Да | Да
CITE | Да, курсивный шрифт | Да, курсивный шрифт
CODE | Да, телетайпный шрифт | Да, телетайпный шрифт
COL | Да | Нет
COLGROUP | Да | Нет
DD | Да | Да
DEL | Да, перечеркнутый шрифт | Нет
DFN | Да, курсивный шрифт | Нет
DIV | Да | Да
DL | Да | Да
DT | Да | Да
EM | Да, курсивный шрифт | Да, курсивный шрифт
EMBED | Да | Да
FIELDSET | Да | Нет
FORM | Да | Да
FRAME | Да | Да
FRAMESET | Да | Да
H1 — H6 | Да | Да
HEAD | Да | Да
HR | Да | Да
HTML | Да | Да
I | Да | Да
IFRAME | Да | Нет
IMG | Да | Да
INPUT | Да | Да
INS | Да, подчеркнутый шрифт | Нет
KBD | Да, телетайпный шрифт | Да, телетайпный шрифт
LABEL | Да | Нет
LEGEND | Да | Нет
LI | Да | Да
LINK | Да | Да
MAP | Да | Да
META | Да | Да
NOBR | Да | Да
NOFRAMES | Да | Да
NOSCRIPT | Да | Да
OBJECT | Да | Да
OL | Да | Да
OPTGROUP | Нет | Нет
OPTION | Да | Да
P | Да | Да
PARAM | Да | Да
PRE | Да | Да
Q | Да, без добавления кавычек | Нет
SAMP | Да, телетайпный шрифт | Да, телетайпный шрифт
SCRIPT | Да | Да
SELECT | Да | Да
SMALL | Да | Да
SPAN | Да | Да
STRONG | Да, полужирный шрифт | Да, полужирный шрифт
STYLE | Да | Да
SUB | Да | Да
SUP | Да | Да
TABLE | Да | Да
TBODY | Да | Нет
TD | Да | Да
TEXTAREA | Да | Да
TFOOT | Да, без прокрутки | Нет
TH | Да | Да
THEAD | Да, без прокрутки | Нет
TITLE | Да | Да
TR | Да | Да
TT | Да | Да
UL | Да | Да
VAR | Да, курсивный шрифт | Да, курсивный шрифт
WBR | Да | Да
Таблица П11.2. Поддержка атрибутов HTML обозревателями
Атрибут | Элемент HTML | Internet Explorer | Netscape Navigator
abbr | TD, TH | Нет | Нет
accept | FORM, INPUT | Нет | Нет
accept-charset | FORM | Нет | Нет
accesskey | A, AREA, BUTTON, INPUT, LABEL, LEGEND, TEXTAREA | Да; клавиша, заданная в accesskey, должна нажиматься вместе с Alt | Нет
action | FORM | Да | Да
align | COL, COLGROUP, TBODY, TFOOT, THEAD | Да | Нет
align | TD, TH, TR | Да | Да
alt | AREA, INPUT | Да | Нет
alt | IMG | Да | Да
archive | OBJECT | Нет | Нет
axis | TD, TH | Нет | Нет
border | TABLE | Да | Да
cellpadding | TABLE | Да | Да
cellspacing | TABLE | Да | Да
char | COL, COLGROUP, TBODY, TD, TFOOT, TH, THEAD, TR | Нет | Нет
charoff | COL, COLGROUP, TBODY, TD, TFOOT, TH, THEAD, TR | Нет | Нет
charset | A, LINK, SCRIPT | Нет | Нет
checked | INPUT | Да | Да
cite | BLOCKQUOTE, DEL, INS, Q | Нет | Нет
class | Все элементы, кроме BASE, HEAD, HTML, META, PARAM, SCRIPT, STYLE, TITLE | Да | Да
classid | OBJECT | Да | Да
codebase | OBJECT | Да | Да
codetype | OBJECT | Да | Нет
cols | FRAMESET, TEXTAREA | Да | Да
colspan | TD, TH | Да | Да
content | META | Да | Да
coords | A | Нет | Нет
coords | AREA | Да | Да
data | OBJECT | Да | Да
datetime | DEL, INS | Нет | Нет
declare | OBJECT | Нет | Нет
defer | SCRIPT | Да | Нет
dir | Все элементы, кроме BASE, BR, FRAME, FRAMESET, IFRAME, PARAM, SCRIPT | Да | Нет
disabled | BUTTON, INPUT, SELECT, TEXTAREA | Да | Нет
disabled | OPTGROUP, OPTION | Нет | Нет
enctype | FORM | Да | Да
for | LABEL | Да | Нет
frame | TABLE | Да | Нет
frameborder | FRAME | Да | Да
frameborder | IFRAME | Да | Нет
headers | TD, TH | Нет | Нет
height | IFRAME | Да | Нет
height | IMG, OBJECT | Да | Да
href | A, AREA, BASE, LINK | Да | Да
hreflang | A, LINK | Нет | Нет
http-equiv | META | Да | Да
id | Все элементы, кроме BASE, HEAD, HTML, META, SCRIPT, STYLE, TITLE | Да | Да
ismap | IMG | Да | Да
ismap | INPUT | Нет | Нет
label | OPTGROUP, OPTION | Нет | Нет
lang | Все элементы, кроме BASE, BR, FRAME, FRAMESET, IFRAME, PARAM, SCRIPT | Нет | Нет
longdesc | FRAME, IFRAME, IMG | Нет | Нет
marginheight | FRAME | Да | Да
marginheight | IFRAME | Да | Нет
marginwidth | FRAME | Да | Да
marginwidth | IFRAME | Да | Нет
maxlength | INPUT | Да | Да
media | LINK, STYLE | Только screen, print и all | Нет
method | FORM | Да | Да
multiple | SELECT | Да | Да
name | A, FORM, FRAME, IMG, INPUT, MAP, META, PARAM, OBJECT, SELECT, TEXTAREA | Да | Да
name | BUTTON, IFRAME | Да | Нет
nohref | AREA | Да | Да
noresize | FRAME | Да | Да
onblur | A, AREA, INPUT, SELECT, TEXTAREA | Да | Да
onblur | BUTTON, LABEL | Да | Нет
onchange | INPUT, SELECT, TEXTAREA | Да | Да
onclick | Все элементы, кроме BASE, BDO, BR, FRAME, FRAMESET, HEAD, HTML, IFRAME, META, PARAM, SCRIPT, STYLE, TITLE | Да | Да
ondblclick | Все элементы, кроме BASE, BDO, BR, FRAME, FRAMESET, HEAD, HTML, IFRAME, META, PARAM, SCRIPT, STYLE, TITLE | Да | Да
onfocus | A, AREA, INPUT, SELECT, TEXTAREA | Да | Да
onfocus | BUTTON, LABEL | Да | Нет
onkeydown | Все элементы, кроме BASE, BDO, BR, FRAME, FRAMESET, HEAD, HTML, IFRAME, META, PARAM, SCRIPT, STYLE, TITLE | Да | Да
onkeypress | Все элементы, кроме BASE, BDO, BR, FRAME, FRAMESET, HEAD, HTML, IFRAME, META, PARAM, SCRIPT, STYLE, TITLE | Да | Да
onkeyup | Все элементы, кроме BASE, BDO, BR, FRAME, FRAMESET, HEAD, HTML, IFRAME, META, PARAM, SCRIPT, STYLE, TITLE | Да | Да
onload | BODY, FRAMESET | Да | Да
onmousedown | Все элементы, кроме BASE, BDO, BR, FRAME, FRAMESET, HEAD, HTML, IFRAME, META, PARAM, SCRIPT, STYLE, TITLE | Да | Да
onmousemove | Все элементы, кроме BASE, BDO, BR, FRAME, FRAMESET, HEAD, HTML, IFRAME, META, PARAM, SCRIPT, STYLE, TITLE | Да | Да
onmouseout | Все элементы, кроме BASE, BDO, BR, FRAME, FRAMESET, HEAD, HTML, IFRAME, META, PARAM, SCRIPT, STYLE, TITLE | Да | Да
onmouseover | Все элементы, кроме BASE, BDO, BR, FRAME, FRAMESET, HEAD, HTML, IFRAME, META, PARAM, SCRIPT, STYLE, TITLE | Да | Да
onmouseup | Все элементы, кроме BASE, BDO, BR, FRAME, FRAMESET, HEAD, HTML, IFRAME, META, PARAM, SCRIPT, STYLE, TITLE | Да | Да
onreset | FORM | Да | Да
onselect | INPUT, TEXTAREA | Да | Да
onsubmit | FORM | Да | Да
onunload | BODY, FRAMESET | Да | Да
profile | HEAD | Нет | Нет
readonly | INPUT, TEXTAREA | Да | Нет
rel | A | Да | Нет
rel | LINK | Да | Да
rev | A | Да | Нет
rev | LINK | Да | Да
rows | FRAMESET, TEXTAREA | Да | Да
rowspan | TD, TH | Да | Да
rules | TABLE | Да | Нет
scheme | META | Нет | Нет
scope | TD, TH | Нет | Нет
scrolling | FRAME | Да | Да
scrolling | IFRAME | Да | Нет
selected | OPTION | Да | Да
shape | A | Нет | Да
shape | AREA | Да | Да
size | INPUT, SELECT | Да | Да
span | COL, COLGROUP | Да | Нет
src | FRAME, IMG, INPUT, SCRIPT | Да | Да
src | IFRAME | Да | Нет
standby | OBJECT | Нет | Нет
style | Все элементы, кроме BASE, HEAD, HTML, META, PARAM, SCRIPT, STYLE, TITLE | Да | Да
summary | TABLE | Нет | Нет
tabindex | A, AREA, BUTTON, INPUT, OBJECT, SELECT, TEXTAREA | Да | Нет
target | A, AREA, BASE, FORM, LINK | Да | Да
title | Все элементы, кроме BASE, HEAD, HTML, META, PARAM, SCRIPT, STYLE, TITLE | Да, отображается как подсказка | Нет
type | A, LINK, PARAM | Нет | Нет
type | BUTTON | Да | Нет
type | INPUT, OBJECT, SCRIPT, STYLE | Да | Да
usemap | IMG | Да | Да
usemap | INPUT, OBJECT | Нет | Нет
valign | COL, COLGROUP, TBODY, TFOOT, THEAD | Да | Нет
valign | TD, TH, TR | Да | Да
value | BUTTON | Да | Нет
value | INPUT, OPTION, PARAM | Да | Да
valuetype | PARAM | Нет | Нет
width | COL, COLGROUP, IFRAME | Да | Нет
width | IMG, OBJECT, TABLE | Да | Да


WDH: Рекомендуемая таблица стилей для HTML

Приложение 12.
Рекомендуемая таблица стилей
для HTML

Приведенная здесь таблица стилей рекомендована в спецификации CSS2 в качестве таблицы стилей по умолчанию для обозревателей HTML-документов. Она содержит типичные форматы тех элементов языка HTML, которые могут быть описаны в терминах CSS. Следует учитывать, что некоторые элементы HTML на языке CSS описаны быть не могут, как-то: APPLET, IMG, OBJECT, SCRIPT, а также элементы описания фреймов и форм.

ADDRESS,
BLOCKQUOTE,
BODY, DD, DIV,
DL, DT,
FIELDSET, FORM,
FRAME, FRAMESET,
H1, H2, H3, H4,
H5, H6, IFRAME,
NOFRAMES,
OBJECT, OL, P,
UL, APPLET,
CENTER, DIR,
HR, MENU, PRE   { display: block }
LI              { display: list-item }
HEAD            { display: none }
TABLE           { display: table }
TR              { display: table-row }
THEAD           { display: table-header-group }
TBODY           { display: table-row-group }
TFOOT           { display: table-footer-group }
COL             { display: table-column }
COLGROUP        { display: table-column-group }
TD, TH          { display: table-cell }
CAPTION         { display: table-caption }
TH              { font-weight: bolder; text-align: center }
CAPTION         { text-align: center }
BODY            { padding: 8px; line-height: 1.33 }
H1              { font-size: 2em; margin: .67em 0 }
H2              { font-size: 1.5em; margin: .83em 0 }
H3              { font-size: 1.17em; margin: 1em 0 }
H4, P,
BLOCKQUOTE, UL,
FIELDSET, FORM,
OL, DL, DIR,
MENU            { margin: 1.33em 0 }
H5              { font-size: .83em; line-height: 1.17em; margin: 1.67em 0 }
H6              { font-size: .67em; margin: 2.33em 0 }
H1, H2, H3, H4,
H5, H6, B,
STRONG          { font-weight: bolder }
BLOCKQUOTE      { margin-left: 40px; margin-right: 40px }
I, CITE, EM,
VAR, ADDRESS    { font-style: italic }
PRE, TT, CODE,
KBD, SAMP       { font-family: monospace }
PRE             { white-space: pre }
BIG             { font-size: 1.17em }
SMALL, SUB, SUP { font-size: .83em }
SUB             { vertical-align: sub }
SUP             { vertical-align: super }
S, STRIKE, DEL  { text-decoration: line-through }
HR              { border: 1px inset }
OL, UL, DIR,
MENU, DD        { margin-left: 40px }
OL              { list-style-type: decimal }
OL UL, UL OL,
UL UL, OL OL    { margin-top: 0; margin-bottom: 0 }
U, INS          { text-decoration: underline }
CENTER          { text-align: center }
BR:before       { content: "\A" }

/* Пример стиля для элементов ABBR/ACRONYM */
ABBR, ACRONYM   { font-variant: small-caps; letter-spacing: 0.1em }

A[href]         { text-decoration: underline }
:focus          { outline: thin dotted invert }

/* Начало установок направления вывода текста (не изменять!) */
BDO[DIR="ltr"]  { direction: ltr; unicode-bidi: bidi-override }
BDO[DIR="rtl"]  { direction: rtl; unicode-bidi: bidi-override }

*[DIR="ltr"]    { direction: ltr; unicode-bidi: embed }
*[DIR="rtl"]    { direction: rtl; unicode-bidi: embed }

/* Блочные элементы HTML */
ADDRESS, BLOCKQUOTE, BODY, DD, DIV, DL, DT, FIELDSET,
FORM, FRAME, FRAMESET, H1, H2, H3, H4, H5, H6, IFRAME,
NOSCRIPT, NOFRAMES, OBJECT, OL, P, UL, APPLET, CENTER,
DIR, HR, MENU, PRE, LI, TABLE, TR, THEAD, TBODY, TFOOT,
COL, COLGROUP, TD, TH, CAPTION
                { unicode-bidi: embed }
/* Конец установок направления вывода текста */

@media print {
  @page         { margin: 10% }
  H1, H2, H3,
  H4, H5, H6    { page-break-after: avoid; page-break-inside: avoid }
  BLOCKQUOTE,
  PRE           { page-break-inside: avoid }
  UL, OL, DL    { page-break-before: avoid }
}

@media speech {
  H1, H2, H3,
  H4, H5, H6    { voice-family: paul, male; stress: 20; richness: 90 }
  H1            { pitch: x-low; pitch-range: 90 }
  H2            { pitch: x-low; pitch-range: 80 }
  H3            { pitch: low; pitch-range: 70 }
  H4            { pitch: medium; pitch-range: 60 }
  H5            { pitch: medium; pitch-range: 50 }
  H6            { pitch: medium; pitch-range: 40 }
  LI, DT, DD    { pitch: medium; richness: 60 }
  DT            { stress: 80 }
  PRE, CODE, TT { pitch: medium; pitch-range: 0; stress: 0; richness: 80 }
  EM            { pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
  STRONG        { pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
  DFN           { pitch: high; pitch-range: 60; stress: 60 }
  S, STRIKE     { richness: 0 }
  I             { pitch: medium; pitch-range: 60; stress: 60; richness: 50 }
  B             { pitch: medium; pitch-range: 60; stress: 90; richness: 90 }
  U             { richness: 0 }
  A:link        { voice-family: harry, male }
  A:visited     { voice-family: betty, female }
  A:active      { voice-family: betty, female; pitch-range: 80; pitch: x-high }
}


WDH: Поддержка языка CSS обозревателями

Приложение 13.
Поддержка языка CSS обозревателями

Таблица П13.1. Поддержка селекторов CSS обозревателями
Селектор | Название | Internet Explorer | Netscape Navigator
* | Универсальный селектор | Да | Нет
E | Селектор типа | Да | Да
E.class | Селектор класса | Да | Да
E#id | Селектор иденитификатора | Да | Да
E[attr] | Селектор атрибута | Нет | Нет
E[attr=value] | Селектор атрибута | Нет | Нет
E[attr~=value] | Селектор атрибута | Нет | Нет
E[attr|=value] | Селектор атрибута | Нет | Нет
E F | Селектор потомков | Да | Да
E > F | Селектор детей | Нет | Нет
E + F | Селектор соседей | Нет | Нет
E:first-child | Псевдокласс "первый ребенок" | Нет | Нет
E:link | Псевдокласс "непосещенная ссылка" | Да, если E = A | Да, если E = A
E:visited | Псевдокласс "посещенная ссылка" | Да, если E = A | Нет
E:active | Псевдокласс "активный элемент" | Да, если E = A | Нет
E:hover | Псевдокласс "элемент под курсором" | Да, если E = A | Нет
E:focus | Псевдокласс "элемент в фокусе" | Нет | Нет
E:lang(x) | Псевдокласс "язык элемента" | Нет | Нет
E:first-line | Псевдоэлемент "первая строка элемента" | Да | Нет
E:first-letter | Псевдоэлемент "первая буква элемента" | Да | Нет
E:after | Псевдоэлемент "вставка оглавления после элемента" | Нет | Нет
E:before | Псевдоэлемент "вставка оглавления перед элементом" | Нет | Нет
Таблица П13.2. Поддержка директив CSS обозревателями
Директива | Internet Explorer | Netscape Navigator
@charset | Да | Нет
@font-face | Частично | Нет
@import | Да | Нет
@media | Частично | Нет
@page | Нет | Нет
Таблица П13.3. Поддержка свойств CSS обозревателями
Свойство | Internet Explorer | Netscape Navigator
azimuth | Нет | Нет
background | Да | Нет
background-attachment | Да | Нет
background-color | Да | Да
background-image | Да | Да
background-position | Да | Нет
background-repeat | Да | Нет
border | Да | Нет
border-bottom | Да | Нет
border-bottom-color | Да | Нет
border-bottom-style | Да | Нет
border-bottom-width | Да | Да
border-collapse | Да | Нет
border-color | Да | Да
border-left | Да | Нет
border-left-color | Да | Нет
border-left-style | Да | Нет
border-left-width | Да | Да
border-right | Да | Нет
border-right-color | Да | Нет
border-right-style | Да | Нет
border-right-width | Да | Да
border-spacing | Нет | Нет
border-style | Да | Да
border-top | Да | Нет
border-top-color | Да | Нет
border-top-style | Да | Нет
border-top-width | Да | Да
border-width | Да | Да
bottom | Да | Да
caption-side | Нет | Нет
clear | Да | Да
clip | Частично | Нет
color | Да | Да
content | Нет | Нет
counter-increment | Нет | Нет
counter-reset | Нет | Нет
cue | Нет | Нет
cue-after | Нет | Нет
cue-before | Нет | Нет
cursor | Частично | Нет
direction | Да | Нет
display | Частично | Частично
elevation | Нет | Нет
empty-cells | Нет | Нет
float | Да | Да
font | Да | Нет
font-family | Да | Да
font-size | Да | Да
font-size-adjust | Нет | Нет
font-stretch | Нет | Нет
font-style | Да | Да
font-variant | Да | Нет
font-weight | Да | Да
height | Да | Да
left | Да | Да
letter-spacing | Да | Нет
line-height | Да | Да
list-style | Да | Нет
list-style-image | Да | Нет
list-style-position | Да | Нет
list-style-type | Частично | Частично
margin | Да | Да
margin-bottom | Да | Да
margin-left | Да | Да
margin-right | Да | Да
margin-top | Да | Да
marker-offset | Нет | Нет
marks | Нет | Нет
max-height | Нет | Нет
max-width | Нет | Нет
min-height | Нет | Нет
min-width | Нет | Нет
orphans | Нет | Нет
outline | Нет | Нет
outline-color | Нет | Нет
outline-style | Нет | Нет
outline-width | Нет | Нет
overflow | Да | Нет
padding | Да | Да
padding-bottom | Да | Да
padding-left | Да | Да
padding-right | Да | Да
padding-top | Да | Да
page | Нет | Нет
page-break-after | Частично | Нет
page-break-before | Частично | Нет
page-break-inside | Нет | Нет
pause | Нет | Нет
pause-after | Нет | Нет
pause-before | Нет | Нет
pitch | Нет | Нет
pitch-range | Нет | Нет
play-during | Нет | Нет
position | Частично | Частично
quotes | Нет | Нет
richness | Нет | Нет
right | Да | Да
size | Нет | Нет
speak | Нет | Нет
speak-header | Нет | Нет
speak-numeral | Нет | Нет
speak-punctuation | Нет | Нет
speech-rate | Нет | Нет
stress | Нет | Нет
table-layout | Да | Нет
text-align | Да | Частично
text-decoration | Частично | Частично
text-indent | Да | Да
text-shadow | Нет | Нет
text-transform | Да | Да
top | Да | Да
unicode-bidi | Да | Нет
vertical-align | Да | Нет
visibility | Частично | Нет
voice-family | Нет | Нет
volume | Нет | Нет
white-space | Нет | Частично
widows | Нет | Нет
width | Да | Да
word-spacing | Нет | Нет
z-index | Да | Нет


WDH: Поддержка языка ECMAScript обозревателями

Приложение 15.
Поддержка языка ECMAScript обозревателями

Таблица П15.1. Поддержка объектов ECMAScript обозревателями
Элемент | Описание | ECMAScript | Internet Explorer | Netscape Navigator
0…n | свойство arguments | Да | 5.5 | 4.0
$1, …, $9 | свойство RegExp | Да | 4.0 | 4.0
$01, …, $99 | свойство RegExp | Да | 5.5 | Нет
$& | свойство RegExp | Да | 5.5 | 4.0
$` | свойство RegExp | Да | 5.5 | 4.0
$' | свойство RegExp | Да | 5.5 | 4.0
$+ | свойство RegExp | Нет | 5.5 | 4.0
$* | свойство RegExp | Нет | Нет | 4.0
abs | метод Math | Да | 3.0 | 2.0
acos | метод Math | Да | 3.0 | 2.0
ActiveXObject | конструктор | Нет | 4.0 | Нет
anchor | метод String | Нет | 3.0 | 2.0
apply | метод Function | Да | 5.5 | 4.06
arguments | локальный объект | Да | 4.0 | 3.0
Array | конструктор | Да | 4.0 | 3.0
Array | функция | Да | 4.0 | 3.0
asin | метод Math | Да | 3.0 | 2.0
atan | метод Math | Да | 3.0 | 2.0
atan2 | метод Math | Да | 3.0 | 2.0
atEnd | метод Enumerator | Нет | 4.0 | Нет
big | метод String | Нет | 3.0 | 2.0
blink | метод String | Нет | 3.0 | 2.0
bold | метод String | Нет | 3.0 | 2.0
Boolean | конструктор | Да | 4.0 | 3.0
Boolean | функция | Да | 3.0 | 3.0
call | метод Function | Да | 5.5 | 4.06
callee | свойство arguments | Да | 5.5 | 4.0
caller | свойство Function | Нет | 4.0 | 3.0
ceil | метод Math | Да | 3.0 | 2.0
charAt | метод String | Да | 3.0 | 2.0
charCodeAt | метод String | Да | 5.5 | 4.0
compile | метод RegExp | Нет | 4.0 | 4.0
concat | метод Array | Да | 4.0 | 4.0
concat | метод String | Да | 4.0 | 4.0
constructor | свойство Object | Да | 4.0 | 3.0
cos | метод Math | Да | 3.0 | 2.0
Date | конструктор | Да | 3.0 | 3.0
Date | функция | Да | 3.0 | 2.0
decodeURI | метод Global | Да | 5.5 | Нет
decodeURIComponent | метод Global | Да | 5.5 | Нет
description | свойство Error | Нет, см. message | 5.0 | Нет
dimensions | метод VBArray | Нет | 4.0 | Нет
E | свойство Math | Да | 3.0 | 2.0
encodeURI | метод Global | Да | 5.5 | Нет
encodeURIComponent | метод Global | Да | 5.5 | Нет
Enumerator | конструктор | Нет | 4.0 | Нет
Error | конструктор | Да | 5.0 (нестандарт.) | Нет
Error | функция | Да | 5.0 (нестандарт.) | Нет
escape | метод Global | Допустимо | 3.0 | 2.0
eval | метод Global | Да | 3.0 | 2.0
exec | метод RegExp | Да | 4.0 | 4.0
exp | метод Math | Да | 3.0 | 2.0
fixed | метод String | Нет | 3.0 | 2.0
floor | метод Math | Да | 3.0 | 2.0
fontcolor | метод String | Нет | 3.0 | 2.0
fontsize | метод String | Нет | 3.0 | 2.0
fromCharCode | метод String | Да | 4.0 | 4.0
Function | конструктор | Да | 4.0 | 3.0
Function | функция | Да | 4.0 | 3.0
getDate | метод Date | Да | 3.0 | 2.0
getDay | метод Date | Да | 3.0 | 2.0
getFullYear | метод Date | Да | 4.0 | 4.06
getHours | метод Date | Да | 3.0 | 3.0
getItem | метод VBArray | Нет | 4.0 | Нет
getMilliseconds | метод Date | Да | 4.0 | 4.06
getMinutes | метод Date | Да | 3.0 | 2.0
getMonth | метод Date | Да | 3.0 | 2.0
GetObject | функция | Нет | 4.0 | Нет
getSeconds | метод Date | Да | 3.0 | 2.0
getTime | метод Date | Да | 3.0 | 2.0
getTimezoneOffset | метод Date | Да | 3.0 | 2.0
getUTCDate | метод Date | Да | 4.0 | 4.06
getUTCDay | метод Date | Да | 4.0 | 4.06
getUTCFullYear | метод Date | Да | 4.0 | 4.06
getUTCHours | метод Date | Да | 4.0 | 4.06
getUTCMilliseconds | метод Date | Да | 4.0 | 4.06
getUTCMinutes | метод Date | Да | 4.0 | 4.06
getUTCMonth | метод Date | Да | 4.0 | 4.06
getUTCSeconds | метод Date | Да | 4.0 | 4.06
getVarDate | метод Date | Нет | 4.0 | Нет
getYear | метод Date | Допустимо | 3.0 | 2.0
global | свойство RegExp | Да | 5.5 | 4.0
hasOwnProperty | метод Object | Да | 5.5 | Нет
ignoreCase | свойство RegExp | Да | 5.5 | 4.0
indexOf | метод String | Да | 3.0 | 2.0
Infinity | свойство Global | Да | 4.0 | 4.06
input | свойство RegExp | Нет | 4.0 | 4.0
isFinite | метод Global | Да | 4.0 | 4.06
isNaN | метод Global | Да | 4.0 | 3.0
isPrototypeOf | метод Object | Да | 5.5 | Нет
italics | метод String | Нет | 3.0 | 2.0
item | метод Enumerator | Нет | 4.0 | Нет
join | метод Array | Да | 4.0 | 3.0
lastIndex | свойство RegExp | Да | 4.0 | 4.0
lastIndexOf | метод String | Да | 3.0 | 2.0
lastMatch | свойство RegExp | Нет, см. $& | 5.5 | 4.0
lastParen ($+) | свойство RegExp | Нет | 5.5 | 4.0
lbound | метод VBArray | Нет | 4.0 | Нет
leftContext | свойство RegExp | Нет, см. $` | 5.5 | 4.0
length | свойство arguments | Да | 5.5 | 3.0
length | свойство Array | Да | 4.0 | 3.0
length | свойство Function | Да | 4.0 | 3.0
length | свойство String | Да | 3.0 | 2.0
link | метод String | Нет | 3.0 | 2.0
LN10 | свойство Math | Да | 3.0 | 2.0
LN2 | свойство Math | Да | 3.0 | 2.0
localeCompare | метод String | Да | 5.5 | Нет
log | метод Math | Да | 3.0 | 2.0
LOG10E | свойство Math | Да | 3.0 | 2.0
LOG2E | свойство Math | Да | 3.0 | 2.0
match | метод String | Да | 4.0 | 4.0
max | метод Math | Да | 3.0 | 2.0
MAX_VALUE | свойство Number | Да | 4.0 | 3.0
message | свойство Error | Да | 5.5 | Нет
min | метод Math | Да | 3.0 | 2.0
MIN_VALUE | свойство Number | Да | 4.0 | 3.0
moveFirst | метод Enumerator | Нет | 4.0 | Нет
moveNext | метод Enumerator | Нет | 4.0 | Нет
multiline ($*) | свойство RegExp | Да | 5.5 | 4.0
name | свойство Error | Да | 5.5 | Нет
NaN | свойство Global | Да | 4.0 | 4.06
NaN | свойство Number | Да | 4.0 | 3.0
NEGATIVE_INFINITY | свойство Number | Да | 4.0 | 3.0
Number | конструктор | Да | 4.0 | 3.0
Number | функция | Да | 3.0 | 4.0
number | свойство Error | Нет, см. message | 5.0 | Нет
Object | конструктор | Да | 4.0 | 3.0
Object | функция | Да | 4.0 | 3.0
parse | метод Date | Да | 3.0 | 2.0
parseFloat | метод Global | Да | 3.0 | 2.0
parseInt | метод Global | Да | 3.0 | 2.0
PI | свойство Math | Да | 3.0 | 2.0
pop | метод Array | Да | 5.5 | 4.0
POSITIVE_INFINITY | свойство Number | Да | 4.0 | 3.0
pow | метод Math | Да | 3.0 | 2.0
propertyIsEnumerable | метод Object | Да | 5.5 | Нет
prototype | свойство Object | Да | 4.0 | 3.0
push | метод Array | Да | 5.5 | 4.0
random | метод Math | Да | 3.0 | 2.0
RegExp | конструктор | Да | 4.0 | 4.0
RegExp | функция | Да | 4.0 | 4.0
replace | метод String | Да | 3.0 | 4.0
reverse | метод Array | Да | 4.0 | 3.0
rightContext | свойство RegExp | Нет, см. $' | 5.5 | 4.0
round | метод Math | Да | 3.0 | 2.0
ScriptEngine | функция | Нет | 4.0 | Нет
ScriptEngineBuildVersion | функция | Нет | 4.0 | Нет
ScriptEngineMajorVersion | функция | Нет | 4.0 | Нет
ScriptEngineMinorVersion | функция | Нет | 4.0 | Нет
search | метод String | Да | 4.0 | 4.0
setDate | метод Date | Да | 3.0 | 2.0
setFullYear | метод Date | Да | 4.0 | 4.06
setHours | метод Date | Да | 3.0 | 2.0
setMilliseconds | метод Date | Да | 4.0 | 4.06
setMinutes | метод Date | Да | 3.0 | 2.0
setMonth | метод Date | Да | 3.0 | 2.0
setSeconds | метод Date | Да | 3.0 | 2.0
setTime | метод Date | Да | 3.0 | 2.0
setUTCDate | метод Date | Да | 4.0 | 4.06
setUTCFullYear | метод Date | Да | 4.0 | 4.06
setUTCHours | метод Date | Да | 4.0 | 4.06
setUTCMilliseconds | метод Date | Да | 4.0 | 4.06
setUTCMinutes | метод Date | Да | 4.0 | 4.06
setUTCMonth | метод Date | Да | 4.0 | 4.06
setUTCSeconds | метод Date | Да | 4.0 | 4.06
setYear | метод Date | Допустимо | 3.0 | 2.0
shift | метод Array | Да | 5.5 | 4.0
sin | метод Math | Да | 3.0 | 2.0
slice | метод Array | Да | 4.0 | 4.0
slice | метод String | Да | 4.0 | 2.0
small | метод String | Нет | 3.0 | 2.0
sort | метод Array | Да | 4.0 | 3.0
source | свойство RegExp | Да | 4.0 | 4.0
splice | метод Array | Да | 5.5 | 4.0
split | метод String | Да | 4.0 | 3.0
sqrt | метод Math | Да | 3.0 | 2.0
SQRT1_2 | свойство Math | Да | 3.0 | 2.0
SQRT2 | свойство Math | Да | 3.0 | 2.0
strike | метод String | Нет | 3.0 | 2.0
String | конструктор | Да | 3.0 | 3.0
String | функция | Да | 3.0 | 4.0
sub | метод String | Нет | 3.0 | 2.0
substr | метод String | Допустимо | 4.0 | 2.0
substring | метод String | Да | 3.0 | 2.0
sup | метод String | Нет | 3.0 | 2.0
tan | метод Math | Да | 3.0 | 2.0
test | метод RegExp | Да | 4.0 | 4.0
toArray | метод VBArray | Нет | 4.0 | Нет
toDateString | метод Date | Да | 5.5 | Нет
toExponential | метод Number | Да | 5.5 | Нет
toFixed | метод Number | Да | 5.5 | Нет
toGMTString | метод Date | Допустимо | 3.0 | 2.0
toLocaleDateString | метод Date | Да | 5.5 | Нет
toLocaleLowercase | метод String | Да | 5.5 | Нет
toLocaleString | метод Array | Да | 4.0 | Нет
toLocaleString | метод Date | Да | 3.0 | 2.0
toLocaleString | метод Object | Да | 4.0 | Нет
toLocaleString | метод Number | Да | 3.0 | Нет
toLocaleTimeString | метод Date | Да | 5.5 | Нет
toLocaleUppercase | метод String | Да | 5.5 | Нет
toLowerCase | метод String | Да | 3.0 | 2.0
toPrecision | метод Number | Да | 5.5 | Нет
toSource | метод Array | Нет | Нет | 4.06
toSource | метод Boolean | Нет | Нет | 4.06
toSource | метод Date | Нет | Нет | 4.06
toSource | метод Function | Нет | Нет | 4.06
toSource | метод Number | Нет | Нет | 4.06
toSource | метод Object | Нет | Нет | 4.06
toSource | метод RegExp | Нет | Нет | 4.06
toSource | метод String | Нет | Нет | 4.06
toString | метод Array | Да | 4.0 | 3.0
toString | метод Boolean | Да | 4.0 | 3.0
toString | метод Date | Да | 4.0 | 3.0
toString | метод Error | Да | 5.0 | Нет
toString | метод Function | Да | 4.0 | 3.0
toString | метод Number | Да | 4.0 | 3.0
toString | метод Object | Да | 4.0 | 2.0
toString | метод RegExp | Да | 4.0 | 4.0
toString | метод String | Да | 4.0 | 3.0
toTimeString | метод Date | Да | 5.5 | Нет
toUpperCase | метод String | Да | 3.0 | 2.0
toUTCString | метод Date | Да | 4.0 | 4.06
ubound | метод VBArray | Нет | 4.0 | Нет
undefined | свойство Global | Да | 5.5 | 4.06
unescape | метод Global | Допустимо | 3.0 | 2.0
unshift | метод Array | Да | 5.5 | 4.0
unwatch | метод Object | Нет | Нет | 4.0
UTC | метод Date | Да | 3.0 | 2.0
valueOf | метод Array | Да | 4.0 | 3.0
valueOf | метод Boolean | Да | 4.0 | 3.0
valueOf | метод Date | Да | 4.0 | 3.0
valueOf | метод Number | Да | 4.0 | 3.0
valueOf | метод Object | Да | 4.0 | 3.0
valueOf | метод String | Да | 4.0 | 3.0
VBArray | конструктор | Нет | 4.0 | Нет
watch | метод Object | Нет | Нет | 4.0


WDH: Поддержка динамических стилей обозревателями

Приложение 16.
Поддержка динамических стилей обозревателями

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

Таблица П16.1. Поддержка динамических свойств CSS обозревателями
Свойство CSS | Свойство в DOM | MSHTML | Gecko
azimuth | azimuth | Нет | Нет
background | background | Да | Да
background-attachment | backgroundAttachment | Да | Да
background-color | backgroundColor | Да | Да
background-image | backgroundImage | Да | Да
background-position | backgroundPosition | Да | Да
background-repeat | backgroundRepeat | Да | Да
border | border | Да | Да
border-bottom | borderBottom | Да | Да
border-bottom-color | borderBottomColor | Да | Да
border-bottom-style | borderBottomStyle | Да | Да
border-bottom-width | borderBottomWidth | Да | Да
border-collapse | borderCollapse | Да | Да
border-color | borderColor | Да | Да
border-left | borderLeft | Да | Да
border-left-color | borderLeftColor | Да | Да
border-left-style | borderLeftStyle | Да | Да
border-left-width | borderLeftWidth | Да | Да
border-right | borderRight | Да | Да
border-right-color | borderRightColor | Да | Да
border-right-style | borderRightStyle | Да | Да
border-right-width | borderRightWidth | Да | Да
border-spacing | borderSpacing | Нет | Да
border-style | borderStyle | Да | Да
border-top | borderTop | Да | Да
border-top-color | borderTopColor | Да | Да
border-top-style | borderTopStyle | Да | Да
border-top-width | borderTopWidth | Да | Да
border-width | borderWidth | Да | Да
bottom | bottom | Да | Да
capton-side | captionSide | Нет | Да
clear | clear | Да | Да
clip | clip | Да | Да
color | color | Да | Да
content | content | Нет | Да
counter-increment | counterIncrement | Нет | Нет
counter-reset | counterReset | Нет | Нет
cue | cue | Нет | Нет
cue-after | cueAfter | Нет | Нет
cue-before | cueBefore | Нет | Нет
cursor | cursor | Да | Да
direction | direction | Да | Да
display | display | Да | Да
elevation | elevation | Нет | Нет
empty-cells | emptyCells | Нет | Нет
float | cssFloat | styleFloat | Да
font | font | Да | Да
font-family | fontFamily | Да | Да
font-size | fontSize | Да | Да
font-size-adjust | fontSizeAdjust | Нет | Нет
font-stretch | fontStretch | Нет | Нет
font-style | fontStyle | Да | Да
font-variant | fontVariant | Да | Да
font-weight | fontWeight | Да | Да
height | height | Да | Да
left | left | Да | Да
letter-spacing | letterSpacing | Да | Да
line-height | lineHeight | Да | Да
list-style | listStyle | Да | Да
list-style-image | listStyleImage | Да | Да
list-style-position | listStylePosition | Да | Да
list-style-type | listStyleType | Да | Да
margin | margin | Да | Да
margin-bottom | marginBottom | Да | Да
margin-left | marginLeft | Да | Да
margin-right | marginRight | Да | Да
margin-top | marginTop | Да | Да
marker-offset | markerOffset | Нет | Нет
marks | marks | Нет | Нет
max-height | maxHeight | Нет | Да
max-width | maxWidth | Нет | Да
min-height | minHeight | Нет | Да
min-width | minWidth | Нет | Да
orphans | orphans | Нет | Нет
outline | outline | Нет | Нет
outline-color | outlineColor | Нет | Нет
outline-style | outlineStyle | Нет | Нет
outline-width | outlineWidth | Нет | Нет
overflow | overflow | Да | Да
padding | padding | Да | Да
padding-bottom | paddingBottom | Да | Да
padding-left | paddingLeft | Да | Да
padding-right | paddingRight | Да | Да
padding-top | paddingTop | Да | Да
page | page | Нет | Нет
page-break-after | pageBreakAfter | Да | Нет
page-break-before | pageBreakBefore | Да | Нет
page-break-inside | pageBreakInside | Нет | Нет
pause | pause | Нет | Нет
pause-after | pauseAfter | Нет | Нет
pause-before | pauseBefore | Нет | Нет
pitch | pitch | Нет | Нет
pitch-range | pitchRange | Нет | Нет
play-during | playDuring | Нет | Нет
position | position | Да | Да
quotes | quotes | Нет | Да
richness | richness | Нет | Нет
right | right | Да | Да
size | size | Нет | Нет
speak | speak | Нет | Нет
speak-header | speakHeader | Нет | Нет
speak-numeral | speakNumeral | Нет | Нет
speak-punctuation | speakPunctuation | Нет | Нет
speech-rate | speechRate | Нет | Нет
stress | stress | Нет | Нет
table-layout | tableLayout | Да | Нет
text-align | textAlign | Да | Да
text-decoration | textDecoration | Да | Да
text-indent | textIndent | Да | Да
text-shadow | textShadow | Нет | Нет
text-transform | textTransform | Да | Да
top | top | Да | Да
unicode-bidi | unicodeBidi | Да | Да
vertical-align | verticalAlign | Да | Да
visibility | visibility | Да | Да
voice-family | voiceFamily | Нет | Нет
volume | volume | Нет | Нет
white-space | whiteSpace | Да | Да
widows | widows | Нет | Нет
width | width | Да | Да
word-spacing | wordSpacing | Да | Да
z-index | zIndex | Да | Да


WDH: Поддержка событий DHTML обозревателями

Приложение 17.
Поддержка событий DHTML обозревателями

В приведенных ниже таблицах перечислены все свойства объекта event и все виды событий, которые поддерживаются хотя бы одним из обозревателей Internet Explorer и Gecko. Для каждого свойства и события указано, является ли оно стандартным и какие именно обозреватели его поддерживают.

Таблица П17.1. Свойства объекта event в обозревателях
Свойство | DOM HTML | Internet Explorer | Gecko
altKey | Да | Да | Да
bookmarks | Нет | Да | Нет
boundElements | Нет | Да | Нет
bubbles | Да | Нет | Да
button | Да | Да | Да
cancelable | Да | Нет | Да
cancelBubble | Нет | Да | Да
charCode | Нет | Нет | Да
clientX | Да | Да | Да
clientY | Да | Да | Да
ctrlKey | Да | Да | Да
currentTarget | Да | Нет | Да
dataFld | Нет | Да | Нет
dataTransfer | Нет | Да | Нет
detail | Да | Нет | Да
eventPhase | Да | Нет | Да
fromElement | Нет | Да | Нет
isChar | Нет | Нет | Да
keyCode | Нет | Да | Да
layerX | Нет | Нет | Да
layerY | Нет | Нет | Да
metaKey | Да | Нет | Да
offsetX | Нет | Да | Нет
offsetY | Нет | Да | Нет
originalTarget | Нет | Нет | Да
pageX | Нет | Нет | Да
pageY | Нет | Нет | Да
propertyName | Нет | Да | Нет
qualifier | Нет | Да | Нет
rangeOffset | Нет | Нет | Да
rangeParent | Нет | Нет | Да
reason | Нет | Да | Нет
recordset | Нет | Да | Нет
relatedTarget | Да | Нет | Да
repeat | Нет | Да | Нет
returnValue | Нет | Да | Нет
screenX | Да | Да | Да
screenY | Да | Да | Да
shiftKey | Да | Да | Да
srcElement | Нет | Да | Нет
srcFilter | Нет | Да | Нет
srcUrn | Нет | Да | Нет
target | Да | Нет | Да
timeStamp | Да | Нет | Да
toElement | Нет | Да | Нет
type | Да | Да | Да
view | Да | Нет | Да
which | Нет | Нет | Да
x | Нет | Да | Нет
y | Нет | Да | Нет
Таблица П17.2. Типы событий DHTML в обозревателях
Событие | DOM HTML | Internet Explorer | Gecko
abort | Да | 4.0 | Да
afterprint | Нет | 5.0 | Нет
afterupdate | Нет | 4.0 | Нет
beforecopy | Нет | 5.0 | Нет
beforecut | Нет | 5.0 | Нет
beforeeditfocus | Нет | 5.0 | Нет
beforepaste | Нет | 5.0 | Нет
beforeprint | Нет | 5.0 | Нет
beforeunload | Нет | 4.0 | Нет
beforeupdate | Нет | 4.0 | Нет
blur | Да | 4.0 | Да
bounce | Нет | 4.0 | Нет
cellchange | Нет | 5.0 | Нет
change | Да | 3.02 | Да
click | Да | 4.0 | Да
close | Нет | Нет | Да
contextmenu | Нет | 5.0 | Нет
copy | Нет | 5.0 | Нет
cut | Нет | 5.0 | Нет
dataavailable | Нет | 4.0 | Нет
datasetchanged | Нет | 4.0 | Нет
datasetcomplete | Нет | 4.0 | Нет
dblclick | Нет | 4.0 | Да
drag | Нет | 5.0 | Нет
dragdrop | Нет | Нет | Да
dragend | Нет | 5.0 | Нет
dragenter | Нет | 5.0 | Нет
dragleave | Нет | 5.0 | Нет
dragover | Нет | 5.0 | Нет
dragstart | Нет | 5.0 | Нет
drop | Нет | 5.0 | Нет
error | Да | 3.02 | Да
errorupdate | Нет | 4.0 | Нет
filterchange | Нет | 4.0 | Нет
finish | Нет | 4.0 | Нет
focus | Да | 3.02 | Да
help | Нет | 4.0 | Нет
keydown | Да | 4.0 | Да
keypress | Да | 4.0 | Да
keyup | Да | 4.0 | Да
load | Да | 3.02 | Да
losecapture | Нет | 5.0 | Нет
mousedown | Да | 4.0 | Да
mousemove | Да | 4.0 | Да
mouseout | Да | 4.0 | Да
mouseover | Да | 4.0 | Да
mouseup | Да | 4.0 | Да
paint | Нет | Нет | Да
paste | Нет | 5.0 | Нет
propertychange | Нет | 5.0 | Нет
readystatechange | Нет | 5.0 | Нет
reset | Да | 4.0 | Да
resize | Да | 4.0 | Да
rowenter | Нет | 4.0 | Нет
rowexit | Нет | 4.0 | Нет
rowsdelete | Нет | 5.0 | Нет
rowsinserted | Нет | 5.0 | Нет
scroll | Да | 4.0 | Да
select | Да | 3.02 | Да
selectstart | Нет | 4.0 | Нет
start | Нет | 4.0 | Нет
stop | Нет | 5.0 | Нет
submit | Да | 3.02 | Да
unload | Да | 3.02 | Да


WDH: Виртуальные коды клавиш

Приложение 18.
Виртуальные коды клавиш

В приведенной ниже таблице перечислены виртуальные коды клавиш стандартной 101-клавишной клавиатуры и их названия согласно DOM 3 Events.

Таблица П18.1. Виртуальные коды клавиш
Клавиша | Обозначение | 10-ный код | 16-ный код
забой | DOM_VK_BACK_SPACE | 8 | 0x08
Tab | DOM_VK_TAB | 9 | 0x09
Enter | DOM_VK_ENTER | 13 | 0x0D
Shift | DOM_VK_SHIFT | 16 | 0x10
Ctrl | DOM_VK_CONTROL | 17 | 0x11
Alt | DOM_VK_ALT | 18 | 0x12
Pause | DOM_VK_PAUSE | 19 | 0x13
CapsLock | DOM_VK_CAPS_LOCK | 20 | 0x14
Esc | DOM_VK_ESCAPE | 27 | 0x1B
пробел | DOM_VK_SPACE | 32 | 0x20
PageUp | DOM_VK_PAGE_UP | 33 | 0x21
PageDown | DOM_VK_PAGE_DOWN | 34 | 0x22
End | DOM_VK_END | 35 | 0x23
Home | DOM_VK_HOME | 36 | 0x24
стрелка влево | DOM_VK_LEFT | 37 | 0x25
стрелка вверх | DOM_VK_UP | 38 | 0x26
стрелка вправо | DOM_VK_RIGHT | 39 | 0x27
стрелка вниз | DOM_VK_DOWN | 40 | 0x28
Insert |  | 45 | 0x2D
Delete |  | 46 | 0x2E
0 |  | 48 | 0x30
1 |  | 49 | 0x31
2 |  | 50 | 0x32
3 |  | 51 | 0x33
4 |  | 52 | 0x34
5 |  | 53 | 0x35
6 |  | 54 | 0x36
7 |  | 55 | 0x37
8 |  | 56 | 0x38
9 |  | 57 | 0x39
A |  | 65 | 0x41
B |  | 66 | 0x42
C |  | 67 | 0x43
D |  | 68 | 0x44
E |  | 69 | 0x45
F |  | 70 | 0x46
G |  | 71 | 0x47
H |  | 72 | 0x48
I |  | 73 | 0x49
J |  | 74 | 0x4A
K |  | 75 | 0x4B
L |  | 76 | 0x4C
M |  | 77 | 0x4D
N |  | 78 | 0x4E
O |  | 79 | 0x4F
P |  | 80 | 0x50
Q |  | 81 | 0x51
R |  | 82 | 0x52
S |  | 83 | 0x53
T |  | 84 | 0x54
U |  | 85 | 0x55
V |  | 86 | 0x56
W |  | 87 | 0x57
X |  | 88 | 0x58
Y |  | 89 | 0x59
Z |  | 90 | 0x5A
левая клавиша Windows |  | 91 | 0x5B
правая клавиша Windows |  | 92 | 0x5C
клавиша Applications |  | 93 | 0x5D
NumPad 0 |  | 96 | 0x60
NumPad 1 |  | 97 | 0x61
NumPad 2 |  | 98 | 0x62
NumPad 3 |  | 99 | 0x63
NumPad 4 |  | 100 | 0x64
NumPad 5 |  | 101 | 0x65
NumPad 6 |  | 102 | 0x66
NumPad 7 |  | 103 | 0x67
NumPad 8 |  | 104 | 0x68
NumPad 9 |  | 105 | 0x69
NumPad * |  | 106 | 0x6A
NumPad + |  | 107 | 0x6B
NumPad - |  | 109 | 0x6D
NumPad . |  | 110 | 0x6E
NumPad / |  | 111 | 0x6F
F1 | DOM_VK_F1 | 112 | 0x70
F2 | DOM_VK_F2 | 113 | 0x71
F3 | DOM_VK_F3 | 114 | 0x72
F4 | DOM_VK_F4 | 115 | 0x73
F5 | DOM_VK_F5 | 116 | 0x74
F6 | DOM_VK_F6 | 117 | 0x75
F7 | DOM_VK_F7 | 118 | 0x76
F8 | DOM_VK_F8 | 119 | 0x77
F9 | DOM_VK_F9 | 120 | 0x78
F10 | DOM_VK_F10 | 121 | 0x79
F11 | DOM_VK_F11 | 122 | 0x7A
F12 | DOM_VK_F12 | 123 | 0x7B
NumLock | DOM_VK_NUM_LOCK | 144 | 0x90
ScrollLock | DOM_VK_SCROLL_LOCK | 145 | 0x91
PrintScreen | DOM_VK_PRINTSCREEN | 154 | 0x9A
Meta | DOM_VK_META | 157 | 0x9D
; |  | 186 | 0xBA
= |  | 187 | 0xBB
, |  | 188 | 0xBC
- |  | 189 | 0xBD
. |  | 190 | 0xBE
/ |  | 191 | 0xBF
~ |  | 192 | 0xC0
[ |  | 219 | 0xDB
\ |  | 220 | 0xDC
] |  | 221 | 0xDD
' |  | 222 | 0xDE


WDH: Стандартные пакеты Java

Приложение 19.
Стандартные пакеты Java

В приведенных ниже таблицах перечислены все стандартные пакеты платформы Java 2 согласно JDK 1.3.1. Для каждого пакета приведены его имя, краткое описание и версия JDK, в которой он впервые появился.

Таблица П19.1. Стандартные пакеты java.*
Имя пакета | Краткое описание | JDK
java.applet | Классы, необходимые для создания аплетов. | 1.0
java.awt | Графический пользовательский интерфейс на базе Abstract Windows Toolkit (AWT). | 1.0
java.awt.color | Пространства цветов для AWT. | 1.2
java.awt.datatransfer | Передача данных внутри программы и между программами. | 1.1
java.awt.dnd | Поддержка технологии drag-and-drop. | 1.2
java.awt.dnd.peer | Служебный пакет AWT. | 1.2
java.awt.event | Обработка событий AWT. | 1.1
java.awt.font | Поддержка основных форматов шрифтов для AWT. | 1.2
java.awt.geom | Операции двумерной геометрии для AWT. | 1.2
java.awt.im | Поддержка нестандартных методов ввода текста. | 1.2
java.awt.im.spi | Интерфейсы для создания нестандартных методов ввода текста. | 1.3
java.awt.image | Создание и редактирование графических изображений. | 1.0
java.awt.image.renderable | Создание графических изображений, независимых от устройства отображения. | 1.2
java.awt.peer | Служебный пакет AWT. | 1.0
java.awt.print | Поддержка печати в AWT. | 1.2
java.beans | Классы, связанные с созданием компонентов JavaBeans. | 1.1
java.beans.beancontext | Поддержка контейнеров JavaBeans. | 1.2
java.io | Базовые классы и интерфейсы ввода-вывода. | 1.0
java.lang | Базовые классы языка Java. | 1.0
java.lang.ref | Управление ссылками на объекты. | 1.2
java.lang.reflect | Доступ к структуре классов и объектов. | 1.1
java.math | Целая и десятичная арифметика произвольной точности. | 1.1
java.net | Классы для создания сетевых приложений. | 1.0
java.rmi | Вызов методов объектов в другой виртуальной машине (Remote Metode Invocation). | 1.1
java.rmi.activation | Сохранение ссылок на объекты RMI и их активация. | 1.2
java.rmi.dgc | Управление распределенной сборкой мусора. | 1.1
java.rmi.registry | Поддержка реестров RMI. | 1.1
java.rmi.server | Поддержка серверной стороны RMI. | 1.1
java.security | Базовые классы и интерфейсы управления безопасностью. | 1.1
java.security.acl | Устаревший пакет управления списками прав доступа. | 1.1
java.security.cert | Поддержка сертификатов X.509. | 1.2
java.security.interfaces | Интерфейсы генерации ключей шифрования по RSA и DSA. | 1.1
java.security.spec | Спецификации ключей и параметров алгоритмов шифрования. | 1.2
java.sql | Средства доступа к базам данных посредством JDBC (Java Data Base Connectivity). | 1.1
java.text | Манипулирование текстами, датами, числами и сообщениями. | 1.1
java.util | Коллекции, базовые события, поддержка даты/времени и различные утилиты. | 1.0
java.util.jar | Поддержка архивов JAR (Java ARchive). | 1.2
java.util.zip | Поддержка архивов ZIP и GZIP. | 1.1
Таблица П19.2. Стандартные пакеты javaх.*
Имя пакета | Краткое описание | JDK
javaх.accessibility | Стандартные контракты компонентов пользовательского интерфейса. | 1.2
javaх.naming | Доступ к сервисам управления именами JNDI (Java Naming and Directory Interface). | 1.3
javaх.naming.directory | Доступ к сервисам управления каталогами JNDI. | 1.3
javaх.naming.event | Поддержка событий JNDI. | 1.3
javaх.naming.ldap | Доступ к сервисам JNDI по протоколу LDAP. | 1.3
javaх.naming.spi | Средства создания собственных JDNI-сервисов. | 1.3
javaх.rmi | Поддержка RMI-IIOP (Internet InterORB Protocol). | 1.2
javaх.rmi.CORBA | Поддержка RMI-IIOP для CORBA ORB. | 1.2
javaх.sound.midi | Поддержка звукового интерфейса MIDI (Musical Instrument Digital Interface). | 1.3
javaх.sound.midi.spi | Средства создания собственных MIDI-сервисов. | 1.3
javaх.sound.sampled | Сохранение, обработка и воспроизведение звуковых данных. | 1.3
javaх.sound.sampled.spi | Абстрактные классы для создания собственных аудиосервисов. | 1.3
javaх.swing | Платформо-независимый графический пользовательский интерфейс Swing. | 1.2
javaх.swing.beeninfo | Служебный пакет свойств Swing. | 1.2
javaх.swing.border | Поддержка рамок для Swing-компонентов. | 1.2
javaх.swing.colorchooser | Компонент выбора цветов. | 1.2
javaх.swing.event | Обработка событий Swing. | 1.2
javaх.swing.filechooser | Компонент выбора файлов. | 1.2
javaх.swing.plaf | Базовые интерфейсы настройки отображения пользовательского интерфейса. | 1.2
javaх.swing.plaf.basic | Настройка отображения пользовательского интерфейса, принятая по умолчанию. | 1.2
javaх.swing.plaf.metal | Настройка "металлического" отображения пользовательского интерфейса. | 1.2
javaх.swing.plaf.multi | Сочетание нескольких настроек отображения пользовательского интерфейса. | 1.2
javaх.swing.table | Поддержка табличных компонентов. | 1.2
javaх.swing.text | Поддержка редактируемых и нередактируемых текстовых компонентов. | 1.2
javaх.swing.text.html | Редактор HTML-документов. | 1.2
javaх.swing.text.html.parser | Синтаксический анализатор HTML-документов. | 1.2
javaх.swing.text.rtf | Редатор текстов в формате RTF (Rich Text Format). | пока нет
javaх.swing.tree | Компонент отображения деревьев. | 1.2
javaх.swing.undo | Поддержка отмены и повторения операций редактирования. | 1.2
javaх.transaction | Исключения, генерируемые ORB в процессе демаршалинга. | 1.3
Таблица П19.3. Стандартные пакеты org.omg.*
Имя пакета | Краткое описание | JDK
org.omg.CORBA | Интерфейс языка Java с CORBA ORB (Object Request Broker). | 1.2
org.omg.CORBA.DynAnyPackage | Исключения, генерируемые интерфейсом DynAny. | 1.2
org.omg.CORBA.ORBPackage | Исключения пакетов CORBA ORB. | 1.2
org.omg.CORBA.portable | Слой совместимости брокеров CORBA. | 1.2
org.omg.CORBA.TypeCodePackage | Исключения, генерируемые классом TypeCode. | 1.2
org.omg.CORBA_2_3 | Добавления для совместимости с CORBA 2.3. | 1.3
org.omg.CORBA_2_3.portable | Добавления для совместимости брокеров с CORBA 2.3. | 1.3
org.omg.CosNaming | Интерфейс языка Java с CORBA IDL (Interface Definition Language). | 1.3
org.omg.CosNaming.NamingContextPackage | Исключения, генерируемые в org.omg.CosNaming. | 1.3
org.omg.SendingContext | Поддержка маршалинга типов значений. | 1.3
org.omg.stub.java.rmi | Заглушки RMI-IIOP для пакета java.rmi. | 1.3


WDH: Опции интерпретатора perl

Приложение 20.
Опции интерпретатора perl

Ниже кратко описаны все опции интерпретатора perl.

-0цифры
Задает восьмеричный код разделителя входных записей $/. Если цифры не указаны, разделителем будет нулевой байт. Значение 777 вызывает считывание файлов целиком, поскольку байта с таким значением нет.
-a
Включает режим авторасщепления в сочетании с опциями -n или -p. В неявный цикл, созданный этими опциями, первым добавляется оператор расщепления массива @F по пробелу или образцу, заданному опцией -F. Например, команда perl -ane 'print pop(@F), "\n";' будет исполняться так:
while (<>) { @F = split(' '); print pop(@F), "\n"; }
-C
Разрешает вызов Windows API в кодировке Unicode.
-c
Режим проверки синтаксиса программы без ее выполнения.
-d
Запускает программу под управлением отладчика perl.
-d:имя
Запускает программу под управлением модуля отладчика, профалейра или трассировщика, имеющего имя Devel:имя.
-Dфлаги
Задает флаги отладчика. Список флагов см. в документации на используемый вами отладчик.
-e строка
Позволяет выполнить одну строку PERL из командной строки. Можно использовать несколько опций -e.
-Fобразец
Задает образец для расщепления по опции -a.
-h
Выводит список всех опций.
-i -i расширение
Указывает, что файлы, обрабатываемые оператором <>, должны редактироваться. Для этого входной файл переименовывается, а выходной файл получает его исходное имя. Если расширение задано, то старый вариант файла сохраняется с этим расширением; в противном случае он будет заменен новым содержанием.
-Iпуть
Задает путь поиска модулей PERL и файлов .h для препроцессора C.
-lцифры
Выполняет автоматическую обработку концов строк. Во-первых, с опциями -n или -p автоматически удаляются концевые разделители строк (переменная $/). Во-вторых, переменной $\ присваивается значение восьмеричного числа, заданного цифрами.
-mстрока -m-строка
-mстрока выполняет оператор use строка(); перед выполнением программы. -m-строка выполняет оператор no строка(); перед выполнением программы.
-Mстрока -Mстрока
-Mстрока выполняет оператор use строка; перед выполнением программы. -M-строка выполняет оператор no строка; перед выполнением программы.
-n
Заключает текст программы в следующий цикл:
LINE: while (<>) { ... }
Это позволяет программе выполнить итерацию по всем аргументам командной строки.
-p
Заключает текст программы в следующий цикл:
LINE: while (<>) { ... } continue { print or die "-p destination: $!\n"; }
Это позволяет программе выполнить итерацию по всем аргументам командной строки.
-P
Передает программу препроцессору C перед ее компиляцией.
-s
Указывает, что опции командной строки нужно не заносить в массив @ARGV, а создавать переменные с соответствующими именами (например, опция -xyz=abc создаст переменную $xyz и присвоит ей значение 'abc'.
-S
Указывает интерпретатору, что программу нужно искать в переменной окружения PATH.
-T
Включает проверку безопасности операций.
-u
Устаревшая опция.
-U
Разрешает выполнение "небезопасных" операций (например, удаление каталогов).
-v
Выводит на stdout версию и номер сборки интерпретатора.
-V
Выводит на stdout информацию о конфигурации интерпретатора.
-V:имя
Выводит на stdout значение заданной переменной из файла конфигурации.
-w
Выводит предупреждения обо всех конструкциях, сомнительных с точки зрения интерпретатора.
-W
Разрешает вывод всех предупреждений.
-X
Запрещает вывод всех предупреждений.
-x путь
Сообщает интерпретатору, что программа включена в текстовый файл, содержащий и другую информацию (например, в почтовое сообщение). По этой опции игнорируется весь текст файла до первой строки, которая начинается с #! и содержит строку perl. Если задан путь, то перед выполнением программы этот путь будет сделан текущим каталогом.


WDH: Встроенные функции PERL

Приложение 21.
Встроенные функции PERL

Ниже перечислены все встроенные функции PERL 5.6 в алфавитном порядке.

Таблица П21.1. Встроенные функции PERL
Название | Описание
-attr | Проверка заданного атрибута файла.
abs | Абсолютная величина числа.
accept | Создает новый сокет для сессии.
alarm | Запускает таймер. В Windows не поддерживается.
atan2 | Арктангенс частного двух чисел.
bind | Связывает сокет с сетевым адресом.
binmode | Двоичный/текстовый режим работы с файлом.
bless | Превращает содержимое ссылки в объект.
caller | Информация о вызове подпрограммы.
chdir | Изменяет текущий каталог.
chmod | Задает права доступа к заданным файлам.
chomp | Удаляет концевые разделители входных записей из строк.
chop | Удаляет последний символ строки.
chown | Изменяет владельца списка файлов. Реализована только в Unix.
chr | Возвращает символ с заданным кодом.
chroot | Изменяет текущий корневой каталог. Реализована только в Unix.
close | Закрывает файл.
closedir | Закрывает каталог.
connect | Устанавливает связь с удаленным сокетом.
cos | Косинус числа.
crypt | Кодирует текст.
dbmclose | Разрывает связь СУБД c ассоциативным массивом (устарела, см. untie).
dbmopen | Создает связь СУБД c ассоциативным массивом (устарела, см. tie).
defined | Проверяет, определено ли значение аргумента.
delete | Удаляет элемент(ы) массива или ассоциативного массива.
die | Фатальное завершение программы.
dump | Распечатка памяти программы. В Windows не поддерживается.
each | Итерация ассоциативных массивов.
endgrent | Вызов системной функции endgrent. Реализована только в Unix.
endhostent | Вызов системной функции endhostent. В Windows не поддерживается.
endnetent | Вызов системной функции endnetent. В Windows не поддерживается.
endprotoent | Вызов системной функции endprotoent. В Windows не поддерживается.
endpwent | Вызов системной функции endpwent. В Windows не поддерживается.
endservent | Вызов системной функции endservent. В Windows не поддерживается.
eof | Проверяет, достигнут ли конец файла.
eval | Выполняет аргумент как PERL-программу.
exec | Передает управление заданной системной команде.
exists | Проверяет наличие элемента в массиве или ассоциативном массиве.
exit | Завершение работы программы.
exp | Экспонента числа.
fcntl | Операции управления файлами. В Windows не поддерживается.
fileno | Возвращает дескриптор для указателя файла.
flock | Блокировка файлов. В Windows 9x не поддерживается.
fork | Запускает копию текущей программы.
format | Декларация шаблона вывода для write.
formline | Форматный вывод в строку.
getc | Ввод символа из заданного файла.
getgrent | Вызов системной функции getgrent. В Windows не поддерживается.
getgrgid | Вызов системной функции getgrgid. Реализована только в Unix.
getgrnam | Вызов системной функции getgrnam. Реализована только в Unix.
gethostbyaddr | Возвращает информацию о хосте, заданном адресом.
gethostbyname | Возвращает информацию о хосте, заданном именем.
gethostent | Вызов системной функции gethostent. В Windows не поддерживается.
getlogin | Возвращает имя пользователя.
getnetbyaddr | Вызов системной функции getnetbyaddr. В Windows не поддерживается.
getnetbyname | Вызов системной функции getnetbyname. В Windows не поддерживается.
getnetent | Вызов системной функции getnetent. В Windows не поддерживается.
getpeername | Возвращает адрес удаленного конца сокета.
getpgrp | Возвращает группу, к которой относится процесс с заданным PID. Реализована только в Unix.
getppid | Возвращает PID родительского процесса. Реализована только в Unix.
getpriority | Возвращает текущий приоритет процесса, группы или пользователя. Реализована только в Unix.
getprotobyname | Возвращает информацию о протоколе по его имени.
getprotobynumber | Возвращает информацию о протоколе по его номеру.
getprotoent | Вызов системной функции getprotoent. В Windows не поддерживается.
getpwent | Вызов системной функции getpwent. В Windows не поддерживается.
getpwnam | Вызов системной функции getpwnam. В Windows не поддерживается.
getpwuid | Вызов системной функции getpwuid. В Windows не поддерживается.
getservbyname | Возвращает информацию о сервисе по его имени.
getservbyport | Возвращает информацию о сервисе по номеру порта.
getservent | Вызов системной функции getservent. В Windows не поддерживается.
getsockname | Возвращает адрес локального конца сокета.
getsockopt | Возвращает запрошенные параметры сокета.
glob | Возвращает список имен файлов, соответствующих образцу.
gmtime | Преобразует время GMT в список значений.
grep | Проверяет заданное выражение для каждого элемента списка.
hex | Преобразует строку в шестнадцатеричное число.
index | Ищет вхождение одной строки в другую слева направо.
int | Целая часть числа.
ioctl | Операции управления вводом-выводом.
join | Объединяет строки списка в одну строку.
keys | Возвращает список ключей ассоциативного массива.
kill | Посылает сигнал завершения списку процессов.
lc | Преобразует строку в строчные буквы.
lcfirst | Преобразует первый символ строки в строчную букву.
length | Количество символов в строке.
link | Связывает новый файл с существующим. В Windows 9x не поддерживается.
listen | Запускает прослушивание заданного сокета.
local | Локализация переменной.
localtime | Преобразует местное время в список значений.
log | Натуральный логарифм числа.
lstat | Возвращает информацию о символической ссылке.
m// | Сопоставление с образцом.
map | Вычисляет заданное выражение для каждого элемента списка.
mkdir | Создает новый каталог.
msgctl | Вызов системной функции msgctl. Реализована только в Unix System V.
msgget | Вызов системной функции msgget. Реализована только в Unix System V.
msgrcv | Вызов системной функции msgrcv. Реализована только в Unix System V.
msgsnd | Вызов системной функции msgsnd. Реализована только в Unix System V.
my | Создание локальных переменных.
no | Выгружает директивный модуль.
oct | Преобразует строку в восьмеричное число.
open | Открывает заданный файл.
opendir | Открывает заданный каталог.
ord | Возвращает код символа.
our | Создание глобальных переменных.
pack | Упаковка значений в строку.
pipe | Создает канал межпроцессной коммуникации.
pop | Выталкивает последний элемент массива.
pos | Позиция в строке после последнего сопоставления.
print | Печать строк в файл.
printf | Форматная печать строк в файл.
prototype | Возвращает прототип подпрограммы.
push | Вталкивает элементы в конец массива.
q// | Строковая константа без интерполяции.
qq// | Строковая константа с интерполяцией.
qr// | Регулярное выражение.
qw// | Список слов.
qx// | Внешняя команда.
quotemeta | Добавляет символ \ перед метасимволами.
rand | Генератор случайных чисел.
read | Читает заданное количество байтов из файла.
readdir | Читает очередной элемент каталога.
readline | Читает очередную запись из файла.
readlink | Возвращает значение символической ссылки. В Windows не поддерживается.
readpipe | Выполняет системную команду.
recv | Принимает сообщение от сокета.
ref | Проверяет, является ли аргумент ссылкой.
rename | Переименовывает файл.
require | Проверка версии или загрузка пакета.
reset | Сброс значений заданных переменных.
reverse | Переставляет элементы списка в обратном порядке.
rewinddir | Устанавливает текущую позицию на начало каталога.
rindex | Ищет вхождение одной строки в другую справа налево.
rmdir | Удаляет каталог.
s/// | Подстановка.
scalar | Преобразует аргумент в скаляр.
seek | Изменяет текущую позицию в файле.
seekdir | Изменяет текущую позицию в каталоге.
select | Задает или возвращает указатель файла вывода по умолчанию.
semctl | Вызов системной функции semctl. Реализована только в Unix System V.
semget | Вызов системной функции. Реализована только в Unix System V.
semop | Вызов системной функции semop. Реализована только в Unix System V.
send | Посылает сообщение сокету.
setgrent | Вызов системной функции setgrent. В Windows не поддерживается.
sethostent | Вызов системной функции sethostent. В Windows не поддерживается.
setnetent | Вызов системной функции setnetent. В Windows не поддерживается.
setpgrp | Задает группу для процесса с заданным PID. Реализована только в Unix.
setpriority | Задает приоритет процесса, группы или пользователя. Реализована только в Unix.
setprotoent | Вызов системной функции setprotoent. В Windows не поддерживается.
setpwent | Вызов системной функции setpwent. В Windows не поддерживается.
setservent | Вызов системной функции setservent. В Windows не поддерживается.
setsockopt | Задает параметры сокета.
shift | Выталкивает первый элемент массива.
shmctl | Вызов системной функции shmctl. Реализована только в Unix System V.
shmget | Вызов системной функции shmget. Реализована только в Unix System V.
shmread | Вызов системной функции shmread. Реализована только в Unix System V.
shmwrite | Вызов системной функции shmwrite. Реализована только в Unix System V.
shutdown | Разрывает соединение сокета.
sin | Синус числа.
sleep | Приостановка работы программы.
socket | Создает новый сокет.
socketpair | Создает пару встречных сокетов. Реализована только в Unix.
sort | Сортировка списка.
splice | Удаление/замена части элементов массива.
split | Разбивает строку на список подстрок.
sprintf | Форматный вывод в строку.
sqrt | Квадратный корень из числа.
srand | Инициализирует генератор случайных чисел.
stat | Возвращает информацию о файле.
study | Компиляция строкового выражения.
substr | Извлечение заданной подстроки.
symlink | Создает символическую ссылку на существующий файл. В Windows не поддерживается.
syscall | Выполняет заданный системный вызов. Реализована только в Unix.
sysopen | Открытие файла.
sysread | Чтение файла.
sysseek | Позиционирование файла.
system | Запускает системную программу и ждет ее завершения.
syswrite | Запись в файл.
tell | Возвращает текущую позицию файла.
telldir | Возвращает текущую позицию каталога.
tie | Связывает переменную с классом.
tied | Возвращает ссылку на объект, связанный с переменной.
time | Возвращает системное время.
times | Возвращает список времен, связанных с текущим процессом.
tr/// | Транслитерация.
truncate | Изменяет длину заданного файла.
uc | Преобразует строку в прописные буквы.
ucfirst | Преобразует первый символ строки в прописную букву.
umask | Изменяет маску доступа к процессу.
undef | Делает значение переменной неопределенным.
unlink | Удаляет заданные файлы.
unpack | Распаковка ранее упакованной строки.
untie | Разрывает связь между переменной и классом.
unshift | Вталкивает элементы в начало массива.
use | Проверка версии или загрузка пакета.
utime | Изменяет время последнего доступа к файлу или его изменения.
values | Возвращает список значений ассоциативного массива.
vec | Операции со строкой как массивом из групп битов.
wait | Ожидает завершения процесса-потомка.
waitpid | Ожидает завершения процесса с заданным PID.
wantarray | Возвращает контекст, в котором вызвана подпрограмма.
warn | Выводит сообщение на устройство stderr.
write | Выводит форматированную запись в файл.
y/// | Транслитерация.


WDH: Специальные переменные PERL

Приложение 22.
Специальные переменные PERL

Ниже перечислены все специальные переменные PERL 5.6. Помните, что для использования длинных имен в начало программы нужно включить директиву use English. В таблице использованы следующие обозначения типа переменных:

  • G — глобальная переменная, требует локализации в подпрограммах;
  • С — переменная зависит от контекста и не требует локализации;
  • L — переменная является локальной в текущем блоке.
Таблица П22.1. Специальные переменные PERL
Название | Тип | Описание
Краткое | Длинное
$_ $ARG G Поле ввода и сопоставления с образцом по умолчанию.
$n, где n = 1, 2, … | L | n-я запомненная подстрока при последнем сопоставлении.
$& $MATCH L Последняя найденная подстрока при сопоставлении.
$` $PREMATCH L Подстрока перед последней найденной подстрокой.
$' $POSTMATCH L Подстрока после последней найденной подстроки.
$+ $LAST_PAREN_MATCH L Последняя запомненная подстрока.
@+ @LAST_MATCH_END L Массив смещений до концов успешно найденных подстрок.
@- @LAST_MATCH_START L Массив смещений до начал успешно найденных подстрок.
$* $MULTILINE_MATCHING G Режим многострочного сопоставления (устарела).
$. $INPUT_LINE_NUMBER, $NR G Номер последней считанной записи.
$/ $INPUT_RECORD_SEPARATOR,
$RS 		G Разделитель записей при вводе (по умолчанию "\n").
$| $OUTPUT_AUTOFLUSH C Управляет сбросом буферов вывода на диск.
$, $OUTPUT_FIED_SEPARATOR, $OFS G Разделитель полей при выводе (по умолчанию пуст).
$\ $OUTPUT_RECORD_SEPARATOR,
$ORS 		G Разделитель записей при выводе (по умолчанию пуст).
$" $LIST_SEPARATOR G Разделитель элементов списков при интерполяции.
$; $SUBSCRIPT_SEPARATOR, $SUBSEP G Разделитель индексов многомерных массивов (по умолчанию "\034").
$# $OFMT G Формат вывода при печати чисел (устарела).
$% $FORMAT_PAGE_NUMBER C Номер текущей страницы текущего канала вывода.
$= $FORMAT_LINES_PER_PAGE C Текущая длина страницы текущего канала вывода (по умолчанию 60).
$- $FORMAT_LINES_LEFT C Число строк, оставшихся на текущей странице текущего канала вывода.
$~ $FORMAT_NAME C Название текущего формата отчетов для текущего канала вывода.
$^ $FORMAT_TOP_NAME C Название текущего формата заголовков страниц для текущего канала вывода.
$: $FORMAT_LINE_BREAK_CHARACTERS G Текущий набор символов, разрешающих разрыв строки вывода (по умолчанию " \n-").
$^L | $FORMAT_FORMFEED | G | Перевод формата при выводе (по умолчанию "\f").
$? $CHILD_ERROR G Код завершения последнего процесса-потомка.
$! $OS_ERROR, $ERRNO G Код последней системной ошибки.
$^E | $EXTENDED_OS_ERROR | G | Информация об ошибке (зависит от ОС).
$@ $EVAL_ERROR G Сообщение об ошибке последней операции eval.
$$ $PROCESS_ID, $PID G Номер текущего процесса.
$< $REAL_USER_ID, $UID G Реальный UID текущего процесса.
$> $EFFECTIVE_USER_ID, $EUID G Эффективный UID текущего процесса.
$( $REAL_GROUP_ID, $GID G Реальный GID текущего процесса.
$) $EFFECTIVE_GROUP_ID, $EGID G Эффективный GID текущего процесса.
$0 | $PROGRAM_NAME | G | Имя текущей программы.
$[ $ARRAY_BASE G Индекс первого элемента массивов (по умолчанию 0, устарел).
$] $OLD_PERL_VERSION G Версия PERLа в виде плавающего числа (устарела).
$^A | $ACCUMULATOR | G | Аккумулятор для операций formline и write.
$^C | $COMPILING | G | Текущее значение опции компилятора -c.
$^D | $DEBUGGING | G | Текущее значение опции компилятора -d (флаги отладки).
$^F | $SYSTEM_FD_MAX | G | Максимальный дескриптор системных файлов, обычно 2.
$^H | G | Внутренняя переменная исполняющей системы.
%^H | G | Внутренняя переменная исполняющей системы.
$^I | $INPLACE_EDIT | G | Текущее значение опции компилятора -i.
$^M | G | Отладочная переменная для посмертного дампа памяти.
$^O | $OSNAME | G | Название операционной системы.
$^P | $PERLDB | G | Внутренняя переменная для отладки.
$^R | LAST_REGEXP_CODE_RESULT | G | Результат последнего успешного выражения (?{ code }).
$^S | $EXCEPTIONS_BEING_CATCH | G | Текущее состояние интерпретатора.
$^T | $BASETIME | G | Время запуска текущей программы.
$^V | $PERL_VERSION | G | Версия PERLа в виде строки.
$^W | $WARNING | G | Текущее значение опции компилятора -w.
$^X | $EXECUTABLE_NAME | G | Название исполняемого модуля PERL.
${^WARNING_BITS} | G | Флаги генерации предупреждений, разрешенных use warnings.
${^WIDE_SYSTEM_CALLS} | G | Использовать системные API в кодировке Unicode.
$ARGV | C | Имя текущего файла.
@ARGV | G | Аргументы командной строки сценария.
@_ G Текущий список параметров подпрограммы.
@INC | G | Список include-каталогов исполняющей системы.
%INC | G | Ассоциативный массив модулей, включенных в программу.
%ENV | G | Ассоциативный массив, содержащий текущее окружение системы.
%SIG | G | Ассоциативный массив обработчиков сигналов.


WDH: Библиотечные модули PERL

Приложение 23.
Библиотечные модули PERL

В этом приложении перечислены все модули PERL 5.6, входящие в стандартный дистрибутив. Эти модули расположены в библиотечном каталоге PERLа.

Таблица П23.1. Директивные модули
Название | Описание
attributes | Чтение/запись атрибутов подпрограмм и переменных.
attrs | Чтение/запись атрибутов подпрограмм (устаревший).
autouse | Откладывает загрузку модуля до обращения к его функциям.
base | Устанавливает IS-A-связь с базовым классом на этапе компиляции.
blib | Позволяет обращаться к еще не инсталированным пакетам.
bytes | Включает байтовое представление символов.
charnames | Escape-последовательности для символов Unicode вида \N{имя}.
constant | Декларация констант.
diagnostics | Включает подробную диагностику предупреждений.
fields | Создает поля класса на этапе компиляции.
filetest | Управляет поведением функций, возвращающих атрибуты файлов.
integer | Целочисленная арифметика вместо плавающей.
less | Директивы компилятора (пока не реализовано).
lib | Изменяет специальный массив @INC на этапе компиляции.
locale | Включает/выключает национальную поддержку символов.
open | Правила ввода-вывода по умолчанию.
ops | Запрещает небезопасные операции при компиляции.
overload | Переопределение операций языка.
re | Управляет поведением регулярных выражений.
sigtrap | Добавляет обработку сигналов.
strict | Запрещает небезопасные конструкции языка.
subs | Декларация имен подпрограмм.
utf8 | Включает кодировку символов UTF-8.
vars | Декларация имен глобальных переменных (устаревшая).
warnings | Управляет выводом предупреждений.
Таблица П23.2. Стандартные модули
Название | Описание
AnyDBM_File | Базовый модуль для библиотек управления базами данных.
AutoLoader | Загрузка подпрограмм только по требованию.
AutoSplit | Разбивает пакет на фрагменты для автозагрузки.
B | Внутренняя реализация компилятора PERL.
B::Asmdata | Таблицы генерации исполняемого байт-кода.
B::Assembler | Транслятор байт-кода.
B::Block | Прохождение базовых блоков исполняемого кода.
B::Bytecode | Компилятор PERLа в байт-код.
B::C | Компилятор PERLа в C.
B::CC | Оптимизирующий компилятор PERLа в C.
B::Debug | Прохождение синтаксического дерева программы с выводом отладочной информации.
B::Deparse | Дискомпилятор байт-кода в PERL.
B::Disassembler | Дизассемблер исполняемого кода.
B::Lint | Модуль поиска подозрительных конструкций в PERL-программах.
B::Showlex | Выводит имена лексических переменных в функциях и файлах.
B::Stackobj | Вспомогательный модуль для B:CC.
B::Stash | Вспомогательный модуль для компиляции PERL-программ в загрузочные модули.
B::Terse | Прохождение синтаксического дерева программы с выводом краткой информации.
B::Xref | Генератор таблиц перекрестных ссылок для PERL-программ.
Benchmark | Подсчет времени выполнения того или иного фрагмента кода.
ByteLoader | Загрузчик скомпилированного байт-кода.
Carp | Вывод предупреждений и сообщений о фатальных ошибках.
Carp::Heavy | Внутренняя реализация Carp.
CGI | Реализация интерфейса CGI.
CGI::Apache | Модуль совместимости CGI с Веб-сервером Apache.
CGI::Carp | CGI-программы вывода серверного протокола ошибок HTTP.
CGI::Cookie | Модуль работы с куки.
CGI::Fast | Модуль совместимости CGI с Веб-сервером в стандарте Open Market FastCGI.
CGI::Pretty | Модуль форматирования HTML-документов.
CGI::Push | Модуль создания Веб-страниц, динамически обновляемых сервером (server push).
CGI::Switch | Устаревший модуль, больше не используется.
Config | Настройка конфигурации perl'а.
CPAN | Загрузка, компиляция и инсталяция модулей из CPAN.
CPAN::FirstTime | Настройка конфигурации CPAN.
CPAN::Nox | CPAN, не использующий скомпилированных расширений.
Class::Struct | Создание классов, подобных структурам C.
Cwd | Чтение/смена текущего каталога.
Data::Dumper | Дамп структур данных.
DB | Интерфейс к отладочным API (экспериментальный).
DB_File | Модуль связи с библиотекой доступа к базам данных Berkeley DB 1.x.
Devel::DProf | Профиль исполнения PERL-программ.
Devel::Peek | Средства отладки загрузочных модулей.
Devel::SelfStubber | Генератор заглушек для SelfLoader.
DirHanlde | Методы работы с каталогами.
Dumpvalue | Экранный дамп данных.
DynaLoader | Динамическая загрузка библиотек C.
English | Мнемонические имена для специальных переменных.
Env | Доступ к переменным окружения как к регулярным выражениям.
Errno | Константы, связанные с номерами ошибок, из файла errno.h.
Exporter | Реализация импорта для модулей.
Exporter::Heavy | Внутренняя реализация Exporter.
ExtUtils::Command | Утилиты, заменяющие команды Unix в других ОС.
ExtUtils::Embed | Утилиты для вызова PERLа из программ на C/C++.
ExtUtils::Install | Инсталяция модулей PERL.
ExtUtils::Installed | Управление инсталированными модулями.
ExtUtils::Liblist | Определяет, какие библиотеки C использовать и как.
ExtUtils::MakeMaker | Генератор makefile'ов для компиляции и инсталяции модулей.
ExtUtils::Manifest | Генератор файлов-манифестов.
ExtUtils::Miniperl | Внутренний модуль ExtUtils::MakeMaker.
ExtUtils::Mkbootstrap | Генератор файла загрузки для DynaLoader.
ExtUtils::Mksymlists | Генератор файлов управления компоновкой динамических расширений.
ExtUtils::MM_Cygwin | Настройка ExtUtils::MakeMaker для библиотеки Cygwin.
ExtUtils::MM_OS2 | Настройка ExtUtils::MakeMaker для OS/2.
ExtUtils::MM_Unix | Настройка ExtUtils::MakeMaker для Unix.
ExtUtils::MM_Win32 | Настройка ExtUtils::MakeMaker для Windows.
ExtUtils::Packlist | Управление файлами .packlist.
ExtUtils::testlib | Модуль для тестирования библиотек-расширений.
Fatal | Генератор фатальных ошибок при неудачном завершении функций PERLа.
Fcntl | Константы, связанные с управлением файлами, из файла fcntl.h.
File::Basename | Разбивка спецификации файла на составные части.
File::CheckTree | Различные проверки файлов в дереве каталогов.
File::Compare | Сравнение файлов или указателей файлов.
File::Copy | Копирование файлов или указателей файлов.
File::DosGlob | Работа с именами файлов DOS, содержащими подстановочные знаки.
File::Find | Поиск файлов по дереву каталогов.
File::Glob | Работа с именами файлов FreeBSD, содержащими подстановочные знаки.
File::Path | Создание/удаление групп каталогов.
File::Spec | Системно-независимые операции со спецификациями файлов.
File::Spec::Functions | Системно-независимые операции со спецификациями файлов.
File::Spec::Mac | Операции со спецификациями файлов для MacOS.
File::Spec::OS2 | Операции со спецификациями файлов для OS/2.
File::Spec::Unix | Операции со спецификациями файлов для Unix.
File::Spec::VMS | Операции со спецификациями файлов для VMS.
File::Spec::Win32 | Операции со спецификациями файлов для Windows.
File::stat | Доступ к атрибутам файлов по именам.
FileCache | Позволяет открыть больше файлов, чем разрешено системой.
FileHandle | Методы работы с файлами.
FindBin | Возвращает путь к исполняемым файлам perl.
GBDM_File | Модуль связи с библиотекой доступа к базам данных gdbm.
Getopt::Long | Расширенная обработка командных строк.
Getopt::Std | Обработка односимвольных опций в командных строках.
I18N::Collate | Сравнение строк в национальной кодировке. Устарел.
IO | Модуль, загружающий остальные модули ввода-вывода.
IO::Dir | Объектные методы работы с каталогами.
IO::File | Объектные методы работы с файлами.
IO::Handle | Внутренний модуль ввода-вывода.
IO::Pipe | Объектные методы коммуникации между процессами.
IO::Poll | Объектные методы системных опросов.
IO::Seekable | Методы позиционирования в файлах.
IO::Select | Методы управления вводом-выводом.
IO::Socket | Обектный интерфейс для работы с сокетами.
IO::Socket::INET | Обектный интерфейс для работы с сокетами TCP и UDP.
IO::Socket::UNIX | Обектный интерфейс для работы с сокетами Unix.
IPC::Msg | Межпроцессные сообщения в System V IPC.
IPC::Open2 | Открытие процесса для чтения и записи.
IPC::Open3 | Открытие процесса для чтения, записи и обработки ошибок.
IPC::Semaphore | Семафоры в System V IPC.
IPC::SysV | Константы System V IPC.
Math::BigFloat | Модуль работы с плавающими числами любого размера.
Math::BigInt | Модуль работы с целыми числами любого размера.
Math::Complex | Модуль работы с комплексными числами.
Math::Trig | Тригонометрические функции.
Net::hostent | Доступ по имени к свойствам результата функций gethost*().
Net::netent | Доступ по имени к свойствам результата функций getnet*().
Net::Ping | Проверяет доступность удаленного хоста операцией ping.
Net::protoent | Доступ по имени к свойствам результата функций getproto*().
Net::servent | Доступ по имени к свойствам результата функций getserv*().
NBDM_File | Модуль связи с ndbm-файлами.
O | Доступ к компилятору PERL.
OBDM_File | Модуль связи с odbm-файлами.
Opcode | Внутренний модуль компилятора PERL.
POSIX | Доступ к именам, определенным стандартом POSIX 1003.1 для библиотек C.
Pod::Checker | Проверка pod-документов на синтаксические ошибки.
Pod::Find | Поиск pod-файлов в дереве каталогов.
Pod::Html | Конвертор pod-документов в формат HTML.
Pod::InputObjects | Внутренний модуль для Pod::Parser.
Pod::Man | Конвертор pod-документов в формат ввода для *roff.
Pod::Parser | Базовый класс для фильтров и трансляторов POD.
Pod::ParseUtils | Внутренний модуль для Pod::Parser.
Pod::Plainer | Конвертор pod-документов в старый формат POD.
Pod::Select | Извлечение отдельных секций POD.
Pod::Text | Конвертор pod-документов в текстовый формат.
Pod::Text::Color | Конвертор pod-документов в текстовый формат с выделением цветом.
Pod::Text::Termcap | Конвертор pod-документов в текстовый формат с выделением управляющими кодами терминала.
Pod::Usage | Вывод сообщения на консоль.
Safe | Компиляция и исполнение программы при определенных ограничениях.
SBDM_File | Модуль связи с sdbm-файлами.
Search::Dict | Поиск ключа в файле словаря.
SelectSaver | Сохранение/восстановление указателя файла.
SelfLoader | Загрузка функций только по требованию.
Shell | Запуск системного процессора команд из PERL-программ.
Socket | Константы, связанные с сокетами, из файла socket.h.
Symbol | Манипулирование символами PERL и их именами.
Term::ANSIColor | Управление цветами терминала.
Term::Cap | Управление терминалом.
Term::Complete | Автодополнение слов, выводимых на терминал.
Term::ReadLine | Интерфейс для ввода строк с консоли.
Test | Оболочка для создания тестовых сценариев.
Test::Harness | Прогон стандартных тестов с выводом статистики.
Text::Abbrev | Создание таблицы сокращений для списка.
Text::ParseWords | Разбивка текста на слова.
Text::Soundex | Индексация английских слов упрощенными фонетическими ключами.
Text::Tabs | Преобразование табуляций в пробелы и обратно.
Text::Wrap | Автоматический разрыв длинных строк.
Thread | Модуль управления потоками Windows (экспериментальный).
Thread::Queue | Реализация очередей для многопоточной среды.
Thread::Semaphore | Реализация семафоров для многопоточной среды.
Thread::Signal | Создание отдельного потока для обработки сигналов.
Thread::Specific | Создание уникальных ключей для потоков.
Tie::Array | Базовый класс для связанных массивов.
Tie::Handle | Базовый класс для связанных описателей файлов.
Tie::Hash | Базовый класс для связанных ассоциативных массивов.
Tie::RefHash | Использование ссылок в качестве ключей ассоциативных массивов.
Tie::Scalar | Базовый класс для связанных скаляров.
Tie::SubstrHash | Ассоциативные массивы с ключами и записями постоянной длины.
Time::gmtime | Доступ по имени к свойствам результата функции gmtime().
Time::Local | Преобразование даты и времени в количество миллисекунд.
Time::localtime | Доступ по имени к свойствам результата функции localtime().
Time::tm | Внутренний модуль для Time::gmtime и Time::localtime.
UNIVERSAL | Базовый класс для управления ссылками на объекты.
User::grent | Доступ по имени к свойствам результата функций getgr*().
User::pwent | Доступ по имени к свойствам результата функций getpw*().
XSLoader | Динамическая загрузка библиотек C.


WDH: Интерфейс CGI

Приложение 24.
Интерфейс CGI

Введение в CGI

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

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

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

  1. запустить с компьютера клиента на сервере определенную программу (обычно называемую сценарием сервера);
  2. передать ей (опять же от клиента) определенные параметры;
  3. передать результаты работы программы от сервера обратно клиенту.

Для решения этой задачи нужен единый интерфейс клиент-сервер, который не зависел бы ни от платформы, ни от операционной системы, ни от языка программирования, на котором реализован сценарий сервера. Такой несложный интерфейс был создан в 1993 г. в NCSA (The National Centre for Supercomputing Applications) под названием CGI (Common Gateway Interface) и продолжает использоваться без существенных изменений по сей день. Мы опираемся в последующем изложении на спецификацию CGI/1.1, ревизию 03 от 25 июня 1999 г. Общая схема взаимодействия клиента с сервером иллюстрируется следующим рисунком:

Передача запроса от клиента к серверу

Вспомним, что всякий запрос передается от обозревателя к серверу в форме URI, общий вид которого таков (подробности см. в Приложении 2):

протокол://пользователь@сервер:порт/путь?запрос

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

протокол "://" SERVER_NAME ":" SERVER_PORT SCRIPT_NAME PATH_INFO "?" QUERY_STRING

где SERVER_NAME, SERVER_PORT, SCRIPT_NAME, PATH_INFO и QUERY_STRING — метапеременные, соответствующие составным элементам URI и описанные ниже.

Примечания.

  1. Протокол URI и протокол CGI не всегда совпадают. Например, если доступ к ресурсу осуществляется через защитный механизм SSL (Secure Sockets Layer), то именем протокола URI будет https, а именем протокола CGI по-прежнему http. Впрочем, CGI не содержит механизмов, позволяющих сценарию извлечь имя протокола, поэтому можно считать, что оно всегда http. Кроме того, URI запроса к CGI не может содержать закладок.
  2. В действительности, URI сценария содержит не SCRIPT_NAME и PATH_INFO, а их кодированную форму. Дело в том, что URL может состоять только из символов базовой латиницы, а в запросе могут присутствовать и иные символы. В этом случае они преобразуются в кодировку UTF-8, как описано в Приложении 2, а затем передаются серверу.

Запуск сценария и передача ему параметров

Как отмечалось выше, сценарием может быть исполняемый модуль, написанный на любом языке (например, на C++). Но чаще всего в качестве сценария выступает интерпретируемый модуль (например, на языке PERL). При этом операционная система сервера распознает тип сценария и вызывает соответствующий интерпретатор (например, perl.exe).

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

Стандартные метапеременные

Следующие имена метапеременных являются стандартными и должны формироваться всеми серверами, поддерживающими интерфейс CGI.

Таблица П24.1. Стандартные метапеременные CGI
AUTH_TYPE | Тип авторизации. Если сервер признал полномочия пользователя, значение этой переменной "Basic", в противном случае оно не определено.
CONTENT_LENGTH | Десятичное число байтов в теле сообщения, если оно присоединено к запросу.
CONTENT_TYPE | Тип MIME тела сообщения, если оно присоединено к запросу.
GATEWAY_INTERFACE | Текущая версия CGI. В настоящее время это "CGI/1.1"
PATH_INFO | Указывает на ресурс или подресурс, который должен быть возвращен сценарием. Это часть URI между именем сценария и строкой запроса.
PATH_TRANSLATED | Значение PATH_INFO, в котором все виртуальные имена отображены в реальные каталоги сервера.
QUERY_STRING | Строка запроса к сценарию. Это все, что следует в URI запроса после "?".
REMOTE_ADDR | IP-адрес клиента.
REMOTE_HOST | Полное имя домена клиента.
REMOTE_IDENT | Если Веб-сервер поддерживает идентификацию по RFC 1413 Внешняя ссылка , сюда заносится имя удаленного пользователя. Используется только для регистрации.
REMOTE_USER | Если AUTH_TYPE = "Basic", то здесь содержится имя пользователя, переданное клиентом и проверенное сервером на наличие прав доступа.
REQUEST_METHOD | Метод запроса HTTP ("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS", "TRACE").
SCRIPT_NAME | Имя запускаемого сценария.
SERVER_NAME | Имя или IP-адрес сервера.
SERVER_PORT | Порт TCP/IP, на который пришел запрос.
SERVER_PROTOCOL | Имя и версия протокола, связанного с запросом. Обычно это "HTTP/1.1".
SERVER_SOFTWARE | Имя и версия Веб-сервера в формате "имя/версия".

Обработка тела сообщения

Если запрос помимо URI содержит присоединенные данные, то сервер должен занести размер этих данных в байтах в переменную CONTENT_LENGTH и обеспечить сценарию доступ к этим данным. Если не оговорено иное, доступ осуществляется через дескриптор файла "стандартный ввод" (stdin).

Сценарий считывает переданные ему данные, при необходимости анализирует метапеременные и формирует документ, который сервер должен передать клиенту.

Передача данных от сценария к серверу

Сценарий всегда должен вернуть какой-либо результат серверу, а сервер должен обеспечить механизм передачи результатов от сценария к серверу. Если не оговорено иное, эта передача осуществляется через дескриптор файла "стандартный вывод" (stdout). Сервер, в свою очередь, формирует из полученных от сценария данных стандатный HTTP-отклик и передает его клиенту.

Результатом работы сценария может быть либо сгенерированный HTML-документ, либо указание серверу вернуть пользователю определенный ресурс. Данные, передаваемые сценарием серверу, начинаются со служебного заголовка, состоящего из текстовых строк и заканчивающегося пустой строкой (т. е. строкой, состоящей из LF или CR/LF). Служебный заголовок может содержать три директивы, аналогичные полям заголовка HTTP:

Поле | Описание
Content-Type | Содержит тип MIME возвращаемого документа.
Location | Возвращает URI ресурса. Используется в том случае, когда сценарий передает серверу не сформированный документ, а ссылку на ресурс.
Status | Возвращает код состояния в формате число строка, где число — номер кода состояния, а строка — соответствующее сообщение. Этот код состояния заносится в строку состояния HTTP-отклика.

Пример документа, сформированного сценарием:

Content-type: text/html; charset=windows-1251
Status: 200 OK

<HTML><HEAD>
<TITLE>Вывод HTML из CHI-сценария</TITLE>
</HEAD><BODY>
<H1>Пример</H1>
<P>Как вам <STRONG>это</STRONG> нравиться?</P>
</BODY></HTML>

Реальные примеры CGI-сценариев приведены в гл. 6.13.


WDH: Анимация - Введение в Веб-анимацию

Часть XII.
Анимация: технологии
Shockwave и Flash

Документ в процессе разработки!

Глава 12.1. Введение в Веб-анимацию

12.1.1. Обзор анимации

Одним из популярных способов придания Веб-страницам привлекательности является использование на них небольших мультфильмов, которые в Вебе принято называть анимациями. Существует большое количество технологий анимации; простейшей из них является применение анимированных GIF-файлов, преимущество которых состоит в том, что они не требуют специальных подгружаемых модулей (все современные обозреватели правильно отображают GIF-анимацию). Есть, однако, гораздо более изощренные технологии, позволяющие нам создавать полноценные мультфильмы. Наиболее популярными из таких технологий являются Shockwave и Flash фирмы Macromedia.


WDH: HTML - Введение в HTML

Часть I.
Веб-страницы: язык HTML

"Язык — мясистый снаряд во рту, служащий для подкладки зубам пищи, для распознания вкуса ея, а также для словесной речи, или, у животных, для отдельных звуков."

Владимир Даль

Глава 1.1. Введение в HTML

1.1.1. Что такое HTML?

HTML (HyperText Markup Language) – это язык, принятый в World Wide Web для создания и публикации Веб-страниц. HTML предоставляет авторам средства для:

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

Фактически, современная Веб-страница формируется с помощью трех языковых средств:

  • язык HTML используется для задания логической структуры документа (заголовки, абзацы, графические изображения и прочие объекты);
  • язык каскадных стилей CSS используется для задания способа отображения документа (цвета текста и фона, шрифты, способы выравнивания и позиционирования отдельных объектов на странице и т. п.);
  • языки программирования сценариев (чаще всего JavaScript) используются для написания сценариев, т. е. небольших программ, которые исполняются обозревателем в процессе отображения документа и обеспечивают его динамическое изменение в ответ на различные события.

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

Первоначально HTML был разработан Тимом Бернерсом-Ли (Tim Berners-Lee) и его коллегами из CERN Laboratories для обмена текстовыми документами и другими данными между учеными и приобрел популярность благодаря обозревателю Mosaic, авторы которого добавили к нему поддержку графических образов и ряд других полезных качеств. Быстрое развитие Сети в 90-е годы потребовало стандартизации этого языка, и в ноябре 1995 г. по эгидой IETF был создан HTML 2.0. Следующим шагом стала кодификация W3C в январе 1997 г. новой, гораздо более мощной версии HTML 3.2. Наконец, в апреле 1998 г. появился HTML 4.0, который является в настоящее время действующим стандартом языка (в уточненной редакции HTML 4.01, опубликованной в декабре 1999 г.). Именно стандарт HTML 4.0 и будет предметом нашего рассмотрения в данной части книги.

По мере своего развития HTML не только приобретал новые возможности. Часть первоначально введенных в него понятий на сегодня официально объявлены морально устаревшими (deprecated), поскольку они лучше выражаются новыми средствами языка. Автор является сторонником создания HTML-документов в соответствии с требованиями стандарта (между прочим, почти вся эта книга написана на строгом HTML 4.0). Поэтому в этой главе мы не описываем и не используем морально устаревшие элементы и атрибуты языка, хотя они по традиции поддерживаются обозревателями и их можно встретить на многих Веб-страницах; их краткое описание можно найти в Приложении 10. По той же причине не упоминаются в нашем справочнике ни полностью устаревшие (obsolete) элементы языка HTML, ни те дополнения к нему, которые были сделаны разработчиками популярных обозревателей, но не являются стандартными. Вместе с тем, мы увязываем стандарт языка с его реализацией в обозревателях Microscape и потому приводим для каждого элемента сведения о том, как он поддерживается этими обозревателями.

1.1.2. Составные элементы HTML-документа

1.1.2.1. Элементы и теги

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

Элементы — это структуры, которые описывают отдельные составляющие HTML-документа. Элемент состоит из трех частей: начального тега, содержимого и конечного тега. Тег — это специальный текст, заключенный в угловые скобки "<" и ">". Конечный тег имеет то же имя, что начальный тег, но начинается с косой черты "/". Например, элемент EM (выделение текста) выглядит так:

<EM>выделяемый текст</EM>

Имена элементов могут быть набраны в любом регистре, т. е. <EM> и <em> равнозначны.

Элементы должны либо следовать друг за другом, либо быть вложены один в другой. Если начальный тег <EM> расположен внутри элемента <P>…</P>, то и конечный тег </EM> должен быть расположен внутри этого элемента.

Конечные теги некоторых элементов могут быть опущены. Например, конечный тег элемента LI (пункт списка) не обязателен, поскольку начало очередного пункта списка означает конец предыдущего пункта:

<UL>
  <LI>Первый пункт списка без конечного тега
  <LI>Второй пункт списка с необязательным конечным тегом</LI>
  <LI>Третий пункт списка без конечного тега
</UL>

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

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

Некоторые элементы, такие, как BR (новая строка), не имеют конечного тега, поскольку не имеют содержимого.

1.1.2.2. Атрибуты

Атрибуты элемента определяют его свойства. Например, элемент IMG (графический образ) имеет атрибут src, указывающий расположение графического файла, и атрибут alt, задающий альтернативный текст на тот случай, если обозреватель не отображает графику:

<IMG src="mylogo.gif" alt="Юрий Лукач">

Атрибуты всегда включаются в начальный тег элемента и имеют вид:

имя_атрибута="значение_атрибута"

Значение атрибута может быть заключено в одинарные или двойные кавычки. Кавычки можно опустить, если значение атрибута состоит только из латинских букв (A-Za-z), цифр (0-9), дефисов ("-"), подчеркиваний ("_"), двоеточий (":") и точек (".").

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

1.1.2.3. Специальные символы

Ряд символов в языке HTML зарезервирован и должен представляться специальным образом:

левая угловая скобка ("<") | &lt;
правая угловая скобка (">") | &gt;
амперсант ("&") | &amp;
двойная кавычка (") | &quot;

Для некоторых символов, отсутствующих на клавиатуре, также есть специальные обозначения. Например, символ авторского права © представляется как &copy;. Полный перечень специальных символов приведен в Приложении 6.

При желании авторы могут пользоваться и числовой кодировкой символов в стандарте Unicode. При этом символ может быть задан своим десятичным кодом (&#код;) или шестнадцатеричным кодом (&#xкод;). Например &#169; представляет символ авторского права ©, а &#x410; – русскую букву А.

Поддержка:   Internet Explorer  Некоторые специальные символы не отображаются.
             Netscape Navigator  Некоторые специальные символы не отображаются;
              шестнадцатеричные коды символов не распознаются.

1.1.2.4. Комментарии

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

  • начинайте комментарий с символов "<!--",
  • завершайте комментарий символами "-->",
  • не используйте внутри комментария символов "--".

Пример комментариев:

<!-- это комментарий -->
<!-- а вот еще комментарий,
     занимающий более одной строки -->

1.1.3. Типы данных HTML

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

CDATA
Значения атрибутов типа CDATA являются цепочками символов, включая, возможно, специальные символы. При отображении переносы строк игнорируются, а символы возврата каретки и табуляции заменяются на пробелы. Также игнорируются начальные и конечные пробелы в значении атрибута. Обычно (но не всегда) значения типа CDATA зависят от регистра.
ID и NAME
Значения атрибутов типа ID и NAME должны начинаться с латинской буквы (A-Za-z) и состоять только из латинских букв (A-Za-z), цифр (0-9), дефисов ("-"), подчеркиваний ("_"), двоеточий (":") и точек ("."). Эти значения зависят от регистра. Они отличаются тем, что NAME может содержать специальные символы, а ID не может.
IDREF и IDREFS
Значения типа IDREF и IDREFS указывают на идентификаторы, т. е. на значения атрибута id других элементов. Значение типа IDREF — это единственный идентификатор, а значение типа IDREFS — это список идентификаторов, разделенных пробелами. IDREF и IDREFS зависят от регистра.
Число
Числовые значения атрибутов — это десятичные числа, состоящие хотя бы из одной цифры (0-9).
Текст
Текстовые значения атрибутов — это значения типа CDATA, представляющие собой осмысленный текст.
URI
Значения атрибутов типа URI — это унифицированные идентификаторы ресурсов (полные или относительные), синтаксис которых должен соответствовать Приложению 2.
Цвет
Цветовые значения атрибутов могут задаваться либо шестнадцатеричным числом с префиксом "#" вида "#rrggbb", задающим RGB-код цвета, либо одним из 16-ти символических имен, приведенных в Таблице П9.1. Имена цветов не зависят от регистра.

Примечание. Обозреватели Microscape дополнительно поддерживают имена цветов, перечисленные в Таблице П9.2.

Пиксели
Значения этого типа — целые числа, задающие количество пикселей.
Размер
Значения этого типа — либо целые числа, задающие количество пикселей, либо доли в процентах от размера по горизонтали или вертикали: например, 50% означает половину всего размера, а 50 означает 50 пикселей.
Кратный размер
Кратный размер — это либо целое число, задающее количество пикселей, либо доля в процентах от размера по горизонтали или вертикали, либо относительный размер вида i*, где i — целое число. При распределении пространства обозреватель сначала выделяет место для размеров, заданных в числах и процентах, а затем разделяет оставшееся пространство между элементами с относительными размерами. Элементу размером 3* будет выделено пространство в три раза большее, чем элементу размером 1*. Значение * эквивалентно 1* и часто означает "заполнить оставшееся пространство".
Кратные размеры
Значения этого типа — список кратных размеров, разделенных запятыми.
Тип файла
Значения атрибутов этого типа задают типы файлов MIME для связанных или вложенных ресурсов. Список всех зарегистрированных типов содержится в Приложении 4.
Типы файлов
Значения этого типа — список типов файлов, разделенных запятыми.
Код языка
Значения атрибутов этого типа задают код языка согласно Приложению 8. Код языка не зависит от регистра и не должен содержать пробелов.
Кодировка и Кодировки
Значения этого типа задают имя таблицы кодировки символов согласно Приложению 7. Значение типа Кодировка — это единственное имя таблицы кодировки, а значение типа Кодировки — это список имен, разделенных пробелами или запятыми. Они не зависят от регистра.
Символ
Значение символьного атрибута — это единственный символ Unicode, который может быть также специальным символом.
Дата-время
Значения атрибутов этого типа задают дату и время в формате ГГГГ-ММ-ДДТчч:мм:ссУВЗ, где ГГГГ — четырехзначный номер года, ММ — двузначный номер месяца (01 — 12), ДД — двузначный номер дня (01 — 31), чч — двузначный номер часа (00 — 23), мм — двузначный номер минуты (00 — 59), cc — двузначный номер секунды (00 — 59) и УВЗ — указатель временной зоны. Отметим, что буква Т, отделяющая дату от времени — это именно прописная латинская буква Т. Если какой-либо из компонентов времени неизвестен, то используется 00. Указатель временной зоны может принимать следующие значения:
  • Z (прописная), указывающая на время по Гринвичскому меридиану (UTC, Universal Coordinated Time);
  • +чч:мм, положительная разница с временем UTC в часах и минутах;
  • -чч:мм, отрицательная разница с временем UTC в часах и минутах.
Типы ссылок
Значения атрибутов этого типа представляют собой список типов ссылок, разделенных пробелами. Тип ссылки не зависит от регистра и не может содержать пробелов. HTML 4.0 определяет перечисленные ниже типы ссылок, хотя авторы могут использовать и свои собственные типы. Например, в HTML 4.0 пропущен очень популярный тип ссылки Made, обеспечивающий контакт с автором документа:
<LINK rev="Made" href="mailto:somebody@somewhere.com">
Таблица 1.1. Типы ссылок в HTML
Alternate | Альтернативная версия документа. С атрибутом lang указывает на перевод данного документа на другой язык, с атрибутом media указывает на версию документа, предназначенную для другого носителя (например, для печати).
Stylesheet | Указывает на внешнюю таблицу стилей. Этот тип ссылки может использоваться в сочетании с типом Alternate для альтернативных таблиц стилей по выбору пользователя.
Start | Ссылка на первый документ в коллекции. Сообщает поисковым системам, какой из документов коллекции автор считает начальным.
Next | Ссылка на следующий документ в коллекции. Такие обозреватели, как WebTV, могут использовать эту ссылку для предварительной загрузки следующего документа с целью экономии времени.
Prev | Ссылка на предыдущий документ в коллекции.
Contents | Ссылка на документ, содержащий оглавление.
Index | Ссылка на документ, содержащий алфавитный указатель.
Glossary | Ссылка на документ, содержащий глоссарий терминов.
Copyright | Ссылка на документ, содержащий сведения об авторском праве.
Chapter | Ссылка на документ, служащий главой в коллекции документов.
Section | Ссылка на документ, служащий разделом в коллекции документов.
Subsection | Ссылка на документ, служащий подразделом в коллекции документов.
Appendix | Ссылка на документ, служащий приложением в коллекции документов.
Help | Ссылка на документ, содержащий справочную информацию.
Bookmark | Указывает на закладку, т. е. содержит ссылку по имени, которое задается атрибутом title.
Shortcut Icon | Ссылка на значок документа в папке "Избранное" для обозревателя Internet Explorer 5.x.
Устройства
Значения атрибутов этого типа представляют собой список имен устройств для отображения документа, разделенных пробелами. Имена устройств зависят от регистра и могут быть следующими.
Таблица 1.2. Имена устройств отображения
all | все типы устройств
aural | синтезатор речи
braille | тактильное устройство Брайля для слепых
embossed | печатающее устройство Брайля
handheld | переносное устройство (например, пейджер)
print | принтер
projection | проектор
screen | графический дисплей
tty | неграфический дисплей (терминал, телетайп)
tv | телевизор
Сценарий
Значения атрибутов этого типа — это сценарии клиента, которые обычно представляют собой вызов функции или несколько операторов на интерпретируемом языке. Синтаксис сценария определяется синтаксическими правилами соответствующего языка программирования.
Таблица стилей
Значения атрибутов этого типа — таблицы стилей на языке CSS.
Фрейм
Значения атрибутов этого типа задают имена фреймов. Они должны начинаться с латинской буквы (A-Za-z), за исключением следующих специальных значений.
Таблица 1.3. Специальные имена фреймов
_blank | Загрузить документ в новое безымянное окно.
_self | Загрузить документ в окно текущего фрейма.
_parent | Загрузить документ в окно предка текущего фрейма. Если фрейм не имеет предка, эквивалентно _self.
_top | Загрузить документ в полное текущее окно, отменяя тем самым все фреймы.

1.1.4. Общие атрибуты элементов HTML

Ряд атрибутов применим к большинству элементов HTML. Эти атрибуты подразделяются на:

  • базовые атрибуты (class, id, style и title), которые определяют общие свойства элементов;
  • локализующие атрибуты (dir и lang), которые указывают на свойства языка, на котором написано содержимое элемента;
  • обработчики событий, которые определяют реакцию данного элемента на различные события.

1.1.4.1. Идентификатор элемента: атрибут id

Синтаксис: id = ID
Поддержка:   Internet Explorer  Полное соответствие стандарту (2.0+)
             Netscape Navigator  Полное соответствие стандарту (3.0+)

Атрибут id присваивает элементу имя, уникальное в пределах данного документа. Никакие два элемента не могут иметь одинаковых значений id. Этот атрибут имеет несколько применений в HTML:

  • в качестве селектора стилей отдельных элементов;
  • в качестве закладки для гиперссылок;
  • для указания на конкретный элемент из сценария;
  • в качестве имени элемента OBJECT.

В следующем примере атрибут id использован для идентификации двух абзацев:

<P id="firstp">Мой первый абзац.</P>
<P id="secondp">Мой второй абзац.</P>

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

P#firstp { color: navy; background: transparent }
P#secondp { color: black; background: transparent }

Эти же абзацы могут использоваться как цель в гиперссылках:

<P>См. также <A HREF="#firstp">первый абзац</A>.</P>

Этот атрибут применим ко всем элементам, кроме BASE, HEAD, HTML, META, SCRIPT, STYLE и TITLE.

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

1.1.4.2. Класс элемента: атрибут class

Синтаксис: class = список CDATA
Поддержка:   Internet Explorer  Полное соответствие стандарту (2.0+)
             Netscape Navigator  Списки имен классов игнорируются (4.0+)

Атрибут class указывает, что элемент является членом определенного класса. В отличие от атрибута id любое количество элементов может относиться к одному классу. Далее, элемент может принадлежать к нескольким классам — в этом случае значением атрибута является список имен классов, разделенных пробелами.

Примечание. Большинство обозревателей не поддерживают списки классов, попросту игнорируя такой атрибут class.

Атрибут class особенно полезен в селекторах стилей. Рассмотрим следующий пример:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<STYLE type="text/css">
  p { font-size: medium }
  p.note { font-size: small }
</STYLE>
</HEAD>
<BODY>
<P>Обычный абзац</P>
<P class="note">Примечание</P>
</BODY>
</HTML>

Здесь в заголовке документа заданы размеры шрифта для обычных абзацев и для абзацев класса note (примечание). Теперь для того, чтобы включить в текст примечание, достаточно присвоить соответствующему абзацу (т. е. элементу P) атрибут class="note". Именно так построены все примечания в данном справочнике.

Этот атрибут применим ко всем элементам, кроме BASE, HEAD, HTML, META, PARAM, SCRIPT, STYLE и TITLE.

1.1.4.3. Стиль элемента: атрибут style

Синтаксис: style = таблица стилей
Поддержка:   Internet Explorer  Полное соответствие стандарту (3.0+)
             Netscape Navigator  Полное соответствие стандарту (4.0+)

Атрибут style позволяет задать стиль элемента внутри его начального тега, например:

<P>Популярным экранным шрифтом является
  <SPAN style="font-family: Verdana">Verdana</SPAN>.</P>

Для использования этого атрибута в заголовок документа должен быть включен метаописатель

<META http-equiv="Content-Style-Type" content="text/css">

В большинстве случаев употребление атрибутов class и id предпочтительнее, т. к. они обеспечивают разделение содержимого документа и стиля его отображения, что обычно упрощает сопровождение разработки.

Этот атрибут применим ко всем элементам, кроме BASE, HEAD, HTML, META, PARAM, SCRIPT, STYLE и TITLE.

1.1.4.4. Титул элемента: атрибут title

Синтаксис: title = текст
Поддержка:   Internet Explorer  Полное соответствие стандарту, выводится как подсказка (4.0+)
             Netscape Navigator  Не поддерживается

Атрибут title определяет титул элемента и часто используется обозревателями как подсказка (tooltip), которая выводится на экран, когда курсор помещается на данный элемент. Он особенно полезен в элементах A, LINK, IMG и OBJECT, в которых он указывает на титул связанного или вложенного ресурса. Приведем несколько примеров.

Ссылка на почтовый ящик:

<A href="mailto:yurylukach@homepage.com"
  title="Пошлите мне свои замечания">yurylukach@homepage.com</A>

Ссылка на Веб-страницу:

<A href="http://www-genome.wi.mit.edu/ftp/pub/software/WWW/cgi_docs.html"
  title="Библиотека CGI-сценариев">CGI.pm</A>

Ссылка на альтернативную Веб-страницу:

<LINK rel="Alternate" href="index.ru.html" hreflang=ru lang=ru title="Русская версия">

Ссылка на аплет:

<OBJECT classid="java:Audio.class" codetype="application/java"
  style="width: 400; height: 250"
  standby="Готовы слушать музыку?" title="Моя любимая песня">
  <IMG src="music.gif" alt="" title="Beatles' Yesterday">
  Yesterday – моя <EM>любимая</EM> песня!
</OBJECT>

Атрибут title полезен также с элементами ABBR и ACRONYM, где он позволяет дать расшифровку сокращения. Примеры:

<P>Он весит 80 <ABBR title="килограммов" lang=ru>кг</ABBR>.</P>
<ACRONYM title="Организация Объединенных Наций">ООН</ACRONYM>

1.1.4.5. Язык элемента: атрибут lang

Синтаксис: lang = код языка
Поддержка:   Internet Explorer  Распознается, но игнорируется (2.0+)
             Netscape Navigator  Распознается, но игнорируется (3.0+)

Атрибут lang определяет естественный язык, на котором написаны значения остальных атрибутов данного элемента и его содержимое (а также всех вложенных элементов, не имеющих своего атрибута lang). Хотя этот атрибут поддерживается не слишком широко, он находит все большее применение, например:

  • некоторые поисковые системы индексируют документы по их языку;
  • синтезаторы речи могут использовать правила произношения, определяемые конкретным языком;
  • обозреватели могут в зависимости от языка использовать различные шрифты, учитывать правила переноса слов, проверять правописание и т. д.

Значение атрибута lang не зависит от регистра. Список его возможных значений приведен в Приложении 8.

Использование lang также позволяет авторам легко менять стиль текста в зависимости от языка. Например, один из языков в двуязычном документе может изображаться курсивом или произноситься другим голосом в синтезаторе речи. Текст такого документа должен оформляться следующим образом:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
  <TITLE>Welcome - Добро пожаловать</TITLE>
</HEAD>
<BODY>
  <H1><SPAN lang=en>Welcome</SPAN> - <SPAN lang=ru>Добро пожаловать</SPAN></H1>
  <P lang=en>This paragraph is in English.</P>
  <P lang=ru>Этот абзац на русском языке.</P>
</BODY>
</HTML>

Основной язык документа может быть задан атрибутом lang в элементе HTML или в поле заголовка HTTP Content-Language.

Этот атрибут применим ко всем элементам, кроме BASE, BR, FRAME, FRAMESET, IFRAME, PARAM и SCRIPT.

Примечание. Атрибут lang не должен использоваться для задания направления вывода текста — оно задается атрибутом dir.

1.1.4.6. Направление вывода текста: атрибут dir

Синтаксис: dir = ltr | rtl
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Не поддерживается

Атрибут dir определяет направление вывода текста: слева направо (dir="ltr", по умолчанию) или справа налево (dir="rtl"). Всем символам в кодировке Unicode приписано направление, с тем, чтобы текст отображался правильно. Так, латинские и русские буквы выводятся слева направо, а еврейские и арабские – справа налево.

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

Допустим, например, что русское предложение содержит ивритскую фразу, которая содержит английскую цитату. В этом случае направление вывода ивритской фразы потребует явного указания направления: ивритская фраза, включая английскую цитату, должна быть заключена в элемент SPAN или BDO с атрибутом dir="rtl".

Этот атрибут применим ко всем элементам, кроме BASE, BR, FRAME, FRAMESET, IFRAME, PARAM и SCRIPT.

1.1.4.7. Обработчики событий

Синтаксис: имя_события = сценарий
Поддержка:   Internet Explorer  Полное соответствие стандарту (4.0+)
             Netscape Navigator  Полное соответствие стандарту (3.0+)

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

Следующий пример использует операторы языка JavaScript для обработки двух событий, связанных с кнопкой "Submit", а именно выводит подсказку в строке состояния, когда курсор мыши попадает на кнопку, и очищает строку состояния, когда курсор мыши оказывается за ее пределами. Обратите внимание, что значения атрибутов заключены в одинарные кавычки из-за того, что двойные кавычки использованы внутри них. Подробно правила обработки событий описаны в гл. 4.11.

<INPUT type=submit
  onmouseover='window.status="Вы заполнили всю форму?";'
  onmouseout='window.status="";'>

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

<META http-equiv="Content-Script-Type" content="text/javascript">

Следующие атрибуты событий применимы ко всем элементам, кроме BASE, BDO, BR, FRAME, FRAMESET, HEAD, HTML, IFRAME, META, PARAM, SCRIPT, STYLE и TITLE. Все они связаны либо с нажатием клавиш на клавиатуре, либо с движением мыши и нажатием ее кнопок.

Таблица 1.4. Стандартные события в HTML
Имя события | Происходит
onclick | при щелчке кнопки мыши на элементе
ondblclick | при двойном щелчке кнопки мыши на элементе
onmousedown | при нажатии кнопки мыши на элементе
onmouseup | при отпускании кнопки мыши на элементе
onmouseover | при попадании курсора мыши на элемент
onmousemove | при движении курсора мыши по элементу
onmouseout | при попадании курсора мыши за пределы элемента
onkeypress | при нажатии и отпускании клавиши на элементе
onkeydown | при нажатии клавиши на элементе
onkeyup | при отпускании клавиши на элементе


WDH: HTML - Структура HTML-документа

Глава 1.2. Структура HTML-документа

Любой HTML-документ состоит из трех основных секций:

  • строки, содержащей декларацию типа документа;
  • заголовка документа (заключенного в теги <HEAD>…</HEAD>);
  • тела документа (заключенного в теги <BODY>…</BODY> или <FRAMESET>…</FRAMESET>);

Перед каждой секцией и после нее могут находиться символы пробела, табуляции, новой строки и комментарии. Заголовок и тело документа должны быть заключены в теги <HTML>…</HTML>.

Пример простого HTML-документа:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Мой первый HTML-документ</TITLE>
</HEAD>
<BODY>
<P>Это HTML-документ.</P>
</BODY>
</HTML>

Поясним подробнее содержимое каждой секции.

1.2.1. Декларация типа документа

Поддержка:   Internet Explorer  Игнорируется
             Netscape Navigator  Игнорируется

Рекомендуется начинать любой HTML-документ со строки, содержащей декларацию типа документа (DTD, document type declaration). HTML 4.0 поддерживает три типа таких деклараций:

  • Документ строго соответствует стандарту HTML 4.0, т. е. не содержит ни морально устаревших элементов, ни фреймов. Декларация имеет вид:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
  • Документ является переходным к стандарту HTML 4.0, т. е. может содержать морально устаревшие элементы. Декларация имеет вид:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
  • Документ содержит фреймы. Декларация имеет вид:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"
  "http://www.w3.org/TR/html4/frameset.dtd">

Поясним структуру приведенных деклараций. Каждая из них говорит о том, что последующий документ является HTML-документом, созданным в соответствии со стандартом HTML 4.0, разработанном W3C. Последние две буквы первой строки декларации обозначают язык DTD, который всегда является английским ( "EN"). Вторая строка декларации содержит URI, откуда обозреватель может загрузить данную DTD.

Примечания.

  1. Многие авторы оформляют эту декларацию в укороченном виде, опуская URI, т. е. так, как указано в приведенном выше примере.
  2. Декларация типа документа является рекомендуемой, но не обязательной частью HTML-документа, поскольку старые обозреватели ее игнорируют. Первым обозревателем, учитывающим ее, стал Netscape 6, который при отсутствии DTD отображает документы в режиме совместимости с Netscape 4, а при ее наличии — в соответствии с Веб-стандартами. Internet Explorer 6 также поддерживает два режима отображения в зависимости от заданной DTD.

WDH+ См. также WDH+: <!DOCTYPE ...> начинает работать.

1.2.2. Элемент HTML

Синтаксис: <HTML>…</HTML> (оба тега не обязательны)
Атрибуты:  lang, dir
Поддержка:   Internet Explorer  Атрибуты lang и dir игнорируются
             Netscape Navigator  Атрибуты lang и dir игнорируются

Этот элемент указывает, что последующий документ является HTML-документом. Он следует за декларацией типа документа и включает в себя все остальное содержимое документа. Он часто содержит атрибут lang, задающий базовый язык документа. Иными словами, типичный HTML-документ имеет следующее строение:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<HTML lang="en">
  …Заголовок и тело документа…
</HTML>

1.2.3. Заголовок документа

1.2.3.1. Элемент HEAD

Синтаксис: <HEAD>…</HEAD> (оба тега не обязательны)
Атрибуты:  lang, dir
           profile = URI (URI словаря метаданных)
Поддержка:   Internet Explorer  Атрибуты lang, dir и profile игнорируются
             Netscape Navigator  Атрибуты lang, dir и profile игнорируются

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

  • единственный титул документа (TITLE);
  • метаописатели документа (META);
  • базовый URI внешних ссылок (BASE);
  • ссылки на другие документы (LINK);
  • внутренние таблицы стилей (STYLE);
  • сценарии клиента (SCRIPT).

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

1.2.3.2. Титул документа: элемент TITLE

Синтаксис: <TITLE>…</TITLE>
Атрибуты:  lang, dir
Поддержка:   Internet Explorer  Атрибуты игнорируются, титул отображается в заголовке обозревателя
             Netscape Navigator  Атрибуты игнорируются, титул отображается в заголовке обозревателя

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

<HEAD>
  <TITLE>Справочник Веб-разработчика</TITLE>
</HEAD>

Титул документа должен кратко отражать суть его содержимого; рекомендуемый размер титула — не более 60 символов.

1.2.3.3. Метаописатели документа: элемент META

Синтаксис: <META> (содержимого и конечного тега нет)
Атрибуты:  lang, dir (для атрибута content)
           http-equiv = NAME (заголовок сообщения HTTP)
           name = NAME (название свойства)
           content = CDATA (значение свойства)
           scheme = CDATA (имя схемы, интерпретирующей значение свойства)
Поддержка:   Internet Explorer  Атрибуты lang, dir и scheme игнорируются (2.0+)
             Netscape Navigator  Атрибуты lang, dir и scheme игнорируются (4.0+)

Элемент META содержит метаописатели таких свойств документа, как имя автора документа, его описание, ключевые слова и т. д. Спецификация HTML 4.0 не содержит стандартного списка этих свойств, поэтому авторы пока свободны в их определении.

Каждый элемент META содержит пару атрибутов: название свойства (name) и значение свойства (content), например, следующий метаописатель задает имя автора документа:

<META name="Author" content="Ю. С. Лукач">

Дополнительно он может содержать атрибут lang, указывающий язык, на котором написано значение свойства:

<META name="Author" lang="en" content="Yury S. Lukach">

Многие поисковые системы используют свойства description (описание документа) и keywords (ключевые слова) для извлечения дополнительной информации о документе. При этом описание должно быть кратким (не длиннее 200 символов), а список ключевых слов разделяться запятыми:

<META name="Description" content="Web Developer's Handbook. HTML Reference.">
<META name="Keywords" content="Web development, HTML reference">

Некоторые поисковые системы поддерживают также свойство robots, содержащее указания для роботов, собирающих информацию о документах в Сети. Значение свойства robots — это список следующих директив, разделенных запятыми:

index | эта страница должна быть индексирована
noindex | эта страница не должна быть индексирована
follow | прослеживать гиперссылки на странице
nofollow | не прослеживать гиперссылки на странице
all | = index, follow (принято по умолчанию)
none | = noindex, nofollow

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

<META name="robots" content="noindex,follow">

Вместо атрибута name метаописатель может содержать атрибут http-equiv для указания того, что данное свойство является заголовком сообщения HTTP. Такие метаописатели указывают обозревателю, как следует отображать данный документ. Существует три базовых свойства документа, которые задаются таким образом:

  • кодировка символов документа (см. Приложение 7):
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
  • язык таблиц стилей, принятый по умолчанию:
<META http-equiv="Content-Style-Type" content="text/css">
  • язык программирования сценариев, принятый по умолчанию:
<META http-equiv="Content-Script-Type" content="text/javascript">

Кроме того, атрибут http-equiv используется в следующих конструкциях:

<META http-equiv="Expires" content="Sun, 7 May 2000 12:04:32 GMT">
  • задает дату и время истечения срока действия документа: полезен для того, чтобы заставить обозреватель загрузить документ не из кэш-памяти, а с сервера;
<META http-equiv="Refresh" content="10; URL=http://www.newserver.com/newpage.htm">
  • указывает серверу, что через 10 секунд после завершения загрузки текущего документа нужно загрузить вместо него http://www.newserver.com/newpage.htm.

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

1.2.3.4. Базовый URI документа: элемент BASE

Синтаксис: <BASE> (содержимого и конечного тега нет)
Атрибуты:  href = URI (базовый URI документа)
           target = фрейм (имя фрейма для отображения ссылок)
Поддержка:   Internet Explorer  Соответствует стандарту
             Netscape Navigator  Соответствует стандарту

Элемент BASE задает в обязательном атрибуте href базовый URI для данного документа, который используется обозревателем для приведения относительных URI к полным. Подробности см. в Приложении 2.

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

  • когда документ хранится в нескольких узлах Сети, и мы хотим указать "эталонное" хранилище;
  • когда URI документа неизвестен (например, при его получении по электронной почте).

Рассмотрим следующий пример:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
  <TITLE>Наша продукция</TITLE>
  <BASE href="http://www.bestseller.com/products/intro.html">
</HEAD>
<BODY>
  <P>Лучшие в мире <A href="../images/hornhoof.gif">рога и копыта</A>!
</BODY>
</HTML>

С учетом базового URI ссылка "../images/hornhoof.gif" в этом примере соответствует полному URI "http://www.bestseller.com/images/hornhoof.gif".

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

1.2.3.5. Взаимосвязь документов: элемент LINK

Синтаксис: <LINK> (содержимого и конечного тега нет)
Атрибуты:  id, class, style, title, lang, dir, события
           rel = типы ссылок (прямая ссылка)
           rev = типы ссылок (обратная ссылка)
           href = URI (URI ссылки)
           target = фрейм (имя фрейма для отображения ссылки)
           type = тип файла (тип файла, на который указывает ссылка)
           media = устройства (устройства для отображения ссылки)
           hreflang = код языка (язык ссылки)
           charset = кодировка (кодировка ссылки)
Поддержка:   Internet Explorer  Атрибуты type, hreflang и charset игнорируются;
              допустимые значения media: screen, print и all (5.0+)
             Netscape Navigator  Атрибуты type, media, hreflang и charset игнорируются (4.0+)

Элемент LINK определяет взаимосвязь между документами. Заголовок документа может содержать любое количество этих элементов. Многие обозреватели не поддерживают элементы LINK, поэтому авторы не должны полагаться на то, что обозреватель сделает перечисленные в них ссылки доступными пользователю.

Каждый элемент LINK должен содержать атрибут rel или rev и атрибут href. При этом атрибут rel определяет прямую ссылку, а атрибут rev — обратную ссылку. Например,

<LINK rel="Glossary" href="glossary.html">

означает, что документ glossary.html является глоссарием терминов для текущего документа (прямая ссылка), а

<LINK rev="Subsection" href="section2.html">

означает, что текущий документ является подразделом документа section2.html (обратная ссылка). Значением атрибутов rel и rev является список типов ссылок, разделенных пробелами.

Важным применением элемента LINK является подключение к документу внешней таблицы стилей. В этом случае элемент LINK имеет вид:

<LINK rel="StyleSheet" href="style.css" type="text/css">

Такой элемент может дополнительно содержать атрибут media для указания того, к отображению на каких устройствах применяется данная таблица стилей:

<LINK rel="StyleSheet" href="aural.css" type="text/css" media="aural">

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

Наконец, атрибуты hreflang и charset указывают на язык и кодировку ссылки и предназначены для указания поисковым системам, где искать альтернативные версии данного документа. Для этого используется тип ссылки Alternate:

<LINK
  rel="Alternate"
  type="text/html"
  href="indexru.htm"
  hreflang="ru"
  charset="windows-1251"
  lang="ru" title="Русская версия">
<LINK
  rel="Alternate"
  type="text/html"
  href="indexfr.htm"
  hreflang="fr"
  lang="fr" title="Version francaise">

Тип ссылки Alternate используется также для указания на версии текущего документа, предназначенного для отображения другими типами устройств. Например, указатель на версию документа для печати может иметь вид:

<LINK
  rel="Alternate"
  media="print"
  lang="ru" title="Справочник в формате PostScript"
  type="application/postscript"
  href="manual.ps">

В частности, альтернативная внешняя таблица стилей может быть задана элементом:

<LINK rel="Alternate StyleSheet" href="style.css" type="text/css" media="...">

1.2.3.6. Внутренние таблицы стилей: элемент STYLE

Синтаксис: <STYLE>…</STYLE>
Атрибуты:  lang, dir
           type = тип файла (тип таблицы стилей)
           media = устройства (устройства для отображения документа)
           title = текст (титул таблицы стилей)
Поддержка:   Internet Explorer  Атрибуты lang и dir игнорируются;
              допустимые значения media: screen, print и all (5.0+)
             Netscape Navigator  Атрибуты lang, dir и media игнорируются (4.0+)

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

Обязательный атрибут type указывает на тип таблицы стилей, т. е. на язык, на котором описываются стили. Для каскадных таблиц стилей этот атрибут всегда должен иметь значение "text/css". Пример:

<HEAD>
  <STYLE type="text/css">
  <!--
    H1 {border-width: 1; border: solid; text-align: center}
  -->
  </STYLE>
</HEAD>
<BODY>
  <H1>Этот заголовок имеет указанный выше стиль</H1>
</BODY>

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

<STYLE type="text/css" media="screen">
<!--
  H1 {color: blue}
-->
</STYLE>
<STYLE type="text/css" media="print">
<!--
  H1 {text-align: center}
-->
</STYLE>

1.2.4. Тело документа: элемент BODY

Синтаксис: <BODY>…</BODY> (оба тега не обязательны)
Атрибуты:  id, class, style, title, lang, dir, события
           onload = сценарий (документ загружен)
           onunload = сценарий (документ выгружен)
Поддержка:   Internet Explorer  Атрибуты lang и dir игнорируются
             Netscape Navigator  Атрибуты lang и dir игнорируются

Тело документа содержит HTML-элементы, предназначенные для отображения обозревателем. Тело заключается в теги <BODY>…</BODY> или <FRAMESET>…</FRAMESET>, если документ содержит фреймы (о них см. Главу 1.7). Напомним, что наше описание не включает морально устаревшие элементы и атрибуты. Поэтому элемент BODY должен использовать только общие атрибуты и два нестандартных обработчика событий:

  • onload — происходит, когда обозреватель завершил загрузку документа в окно;
  • onunload — происходит, когда обозреватель завершил удаление документа из окна.

Все остальные атрибуты тела документа являются морально устаревшими и должны заменяться на стили CSS, например:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<STYLE type="text/css">
  BODY { background: white; color: black}
  A:link { color: red }
  A:visited { color: maroon }
  A:active { color: purple }
</STYLE>
</HEAD>
<BODY>
  …тело документа…
</BODY>
</HTML>

1.2.5. Блочные и текстовые элементы

Большинство элементов HTML, используемых в теле документа, подразделяются на блочные (block-level) и текстовые (inline) элементы. Блочные элементы могут содержать как текстовые элементы, так и другие блочные элементы. При отображении они всегда выводятся как отдельный абзац. Текстовые элементы могут содержать только текст и другие текстовые элементы, но не могут содержать блочных элементов. При отображении они выводятся в текущей строке.

Ниже при описании каждого из элементов HTML мы указываем, к какому из этих двух типов он относится.


WDH: HTML - Отображение текста

Глава 1.3. Отображение текста

1.3.1. Отображение пробелов

При отображении элементов HTML использует два важных понятия: пробел и слово. Слово — это последовательность любых символов, не являющихся пробелами, а пробелами считаются следующие символы:

  • символ пробела (&#x20;)
  • символ табуляции (&#x09;)
  • символ перевода формата (&#x0C;)
  • пробел нулевой ширины (&#x200B;)
  • разрывы строк.

Обозреватель при отображении любых элементов HTML, кроме PRE, разбивает отображаемый текст на слова и выводит эти слова, используя соответствующий разделитель, зависящий от языка текста и устройства, на которое производится отображение. Так, при выводе на экран слов, написанных латиницей или кириллицей, они разделяются обычными пробелами (&#x20;), при выводе текста на тайском языке используется пробел нулевой ширины (&#x200B;), а при выводе китайского или японского текста разделители слов вообще не отображаются.

Даже если информация о языке текста отсутствует, обозреватель всегда заменяет последовательность пробелов на один пробел. Поэтому для отображения нескольких пробелов подряд следует применять символ неразрывный пробел (&nbsp;). Исключение составляет элемент PRE, при отображении которого сохраняются все пробелы в содержимом элемента.

Поддержка:   Internet Explorer  Не поддерживается пробел нулевой ширины.
             Netscape Navigator  Не поддерживается пробел нулевой ширины.

1.3.2. Строки и абзацы

1.3.2.1. Абзац: элемент P

Синтаксис: <P>…</P> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (3.0+)

Элемент P (paragraph) определяет абзац текста. HTML не дает определения того, как должен выглядеть абзац. Большинство обозревателей отделяет новый абзац от предыдущего текста пустой строкой и не делает отступа текста в начале абзаца, но эти установки могут быть изменены атрибутом style, например, абзац:

<P style="text-indent: 5%; text-align: justify">
  Этот текст начинается с красной строки и выровнен по правому краю.
  Рекомендуется выносить подобные установки в таблицы стилей.
</P>

будет выглядеть так:

Этот текст начинается с красной строки и выровнен по правому краю. Рекомендуется выносить подобные установки в таблицы стилей.

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

Элемент P не может содержать других блочных элементов.

Примечание. Не рекомендуется использовать пустые элементы P (т. е. элементы вида <P></P>) для создания пустых строк, так как большинство обозревателей их игнорируют. Пользуйтесь для этого конструкцией <P>&nbsp;</P>.

1.3.2.2. Разрыв строки: элемент BR

Синтаксис: <BR> (содержимого и конечного тега нет)
Атрибуты:  id, class, style, title
Поддержка:   Internet Explorer  Полное соответствие стандарту (3.0+)
             Netscape Navigator  Полное соответствие стандарту (4.0+)

Разрыв строки задается в HTML символами возврат каретки (&#x0D;), перевод строки (&#x0A;) или парой возврат каретки/перевод строки. Символы разрыва строки отображаются как символы пробела. Правила отображения разрывов строк описаны в предыдущем разделе, отметим здесь только еще одну особенность: если разрыв строки следует сразу за начальным тегом элементом или непосредственно предшествует его конечному тегу, то он игнорируется обозревателем.

Элемент BR (break) используется для насильственного разрыва строки. Он полезен для форматирования текста в таких элементах, как ADDRESS, но не должен применяться для "украшения" текста в абзацах и ячейках таблиц — при изменении ширины окна или размера шрифта такие украшения дают малосимпатичные эффекты.

Для того, чтобы запретить разрыв строки между двумя словами, используйте в качестве разделителя не пробел, а неразрывный пробел (&nbsp;).

1.3.2.3. Перенос слов

Для переноса слов в HTML используются два символа: дефис ("-", &#x2D;) и мягкий перенос (&shy;). Дефис отображается как обычный символ. Мягкий перенос указывает обозревателю, где возможен разрыв строки, и должен обрабатываться по следующим правилам:

  • если по мягкому переносу производится разрыв строки, то он должен отображаться символом дефис;
  • если по мягкому переносу не производится разрыв строки, то он не должен отображаться;
  • при операциях поиска и сортировки мягкий перенос должен игнорироваться.
Поддержка:   Internet Explorer  Мягкий перенос правильно обрабатывается только в словах, содержащих
              символы базовой латиницы; в остальных случаях отображается как дефис.
             Netscape Navigator  Мягкий перенос отображается как дефис.

1.3.2.4. Форматированный текст: элемент PRE

Синтаксис: <PRE>…</PRE> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (3.0+)

Элемент PRE (preformatted) содержит предварительно отформатированный текст. Это означает, что при его отображении:

  • пробелы выводятся без сжатия;
  • не производится автоматический перенос слов на новую строку;
  • используется шрифт фиксированной ширины (fixed-pitch font).

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

<PRE>
function makearray(n) {
  this.length = n;
  for(var i = 1; i <= n; i++)
    this[i] = 0;
  return this;
}
</PRE>

будет отображаться так:

function makearray(n) {
  this.length = n;
  for(var i = 1; i <= n; i++)
    this[i] = 0;
  return this;
}

Авторы не должны изменять таблицами стилей перечисленные выше свойства элементов PRE.

1.3.3. Заголовки: элементы H1 — H6

Синтаксис: <Hn>…</Hn> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (3.0+)

Элементы H1 — H6 (header) используются для создания заголовков в документе. Пример отображения заголовков:

Заголовок документа (H1)

Часть 1. Заголовок части (H2)

Глава 1. Заголовок главы (H3)

1.1. Заголовок H4

1.1.1. Заголовок H5
§1. Заголовок H6

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

1.3.4. Фразовые элементы

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

1.3.4.1. Выделение текста: элемент EM

Синтаксис: <EM>…</EM> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту, отображается курсивом (5.0+)
             Netscape Navigator  Отображается курсивом, атрибут dir игнорируется (3.0+)

Элемент EM (emphasis) используется для выделения текста. По умолчанию отображается курсивным шрифтом. Синтезаторы речи могут использовать для выделения текста увеличение громкости, изменение тембра и т. п. Поскольку данный элемент определяет логический стиль, который может быть переопределен в таблицах стилей, его применение предпочтительнее, чем применение элемента I (курсивный шрифт).

Например, начало предыдущего абзаца на языке HTML выглядит так:

<P>Элемент <STRONG>EM</STRONG>
используется для <EM>выделения текста</EM>.</P>

1.3.4.2. Сильное выделение: элемент STRONG

Синтаксис: <STRONG>…</STRONG> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту, отображается полужирным шрифтом (5.0+)
             Netscape Navigator  Отображается полужирным шрифтом, атрибут dir игнорируется (3.0+)

Элемент STRONG (strong emphasis) используется для сильного выделения текста. По умолчанию отображается полужирным шрифтом. Синтезаторы речи могут использовать для сильного выделения текста увеличение громкости, изменение тембра и т. п. Поскольку данный элемент определяет логический стиль, который может быть переопределен в таблицах стилей, его применение предпочтительнее, чем применение элемента B (полужирный шрифт).

Например, начало предыдущего абзаца на языке HTML выглядит так:

<P>Элемент <STRONG>STRONG</STRONG> (strong emphasis)
используется для <EM>сильного выделения текста</EM>.</P>

1.3.4.3. Ссылка: элемент CITE

Синтаксис: <CITE>…</CITE> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту, отображается курсивом (5.0+)
             Netscape Navigator  Отображается курсивом, атрибут dir игнорируется (3.0+)

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

<P>Во вчерашнем номере <CITE>Московского комсомольца</CITE> напечатана рецензия
на новую книгу В. Пелевина <CITE>Чапаев и Пустота</CITE>.</P>

будет отображаться так:

Во вчерашнем номере Московского комсомольца напечатана рецензия на новую книгу В. Пелевина Чапаев и Пустота.

1.3.4.4. Определение термина: элемент DFN

Синтаксис: <DFN>…</DFN> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту, отображается курсивом (5.0+)
             Netscape Navigator  Не поддерживается.

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

<DFN>Unicode - это международный стандарт кодировки символов.</DFN>

будет отображаться так:

Unicode - это международный стандарт кодировки символов.

1.3.4.5. Фрагмент программного кода: элемент CODE

Синтаксис: <CODE>…</CODE> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту, отображается телетайпным шрифтом (5.0+)
             Netscape Navigator  Отображается телетайпным шрифтом, атрибут dir игнорируется (3.0+)

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

Пример: следующий фрагмент документа

<PRE><CODE>
function makearray(n) {
  this.length = n;
  for(var i = 1; i <= n; i++)
    this[i] = 0;
  return this;
}
</CODE></PRE>

будет отображаться так:

function makearray(n) {
  this.length = n;
  for(var i = 1; i <= n; i++)
    this[i] = 0;
  return this;
}

1.3.4.6. Пример вывода результатов: элемент SAMP

Синтаксис: <SAMP>…</SAMP> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту, отображается телетайпным шрифтом (5.0+)
             Netscape Navigator  Отображается телетайпным шрифтом, атрибут dir игнорируется (3.0+)

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

<P>При обнаружении синтаксической ошибки компилятор выдает следующее сообщение:</P>
<P><SAMP>Syntax error</SAMP></P>

будет отображаться так:

При обнаружении синтаксической ошибки компилятор выдает следующее сообщение:

Syntax error

1.3.4.7. Пример ввода данных: элемент KBD

Синтаксис: <KBD>…</KBD> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту, отображается телетайпным шрифтом (5.0+)
             Netscape Navigator  Отображается телетайпным шрифтом, атрибут dir игнорируется (3.0+)

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

<P>В ответ на запрос введите <KBD>Y</KBD> или <KBD>N</KBD>.</P>

будет отображаться так:

В ответ на запрос введите Y или N.

1.3.4.8. Переменные и аргументы: элемент VAR

Синтаксис: <VAR>…</VAR> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту, отображается курсивом (5.0+)
             Netscape Navigator  Отображается курсивом, атрибут dir игнорируется (3.0+)

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

<P>Версии языка HTML нумеруются в формате <VAR>X</VAR>.<VAR>Y</VAR>.</P>

будет отображаться так:

Версии языка HTML нумеруются в формате X.Y.

1.3.4.9. Аббревиатура: элемент ABBR

Синтаксис: <ABBR>…</ABBR> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Не поддерживается.
             Netscape Navigator  Не поддерживается.

Элемент ABBR (abbreviation) используется для маркировки аббревиатур. При этом атрибут title должен содержать расшифровку аббревиатуры, позволяя обозревателям отображать ее как "подсказку" (tooltip) при указании курсором мыши на аббревиатуру. Примеры:

Он весит 75 <ABBR lang="ru" title="килограммов">кг</ABBR>.
<ABBR title="District of Columbia">D.C.</ABBR>

Поскольку этот элемент не поддерживается современными обозревателями, вместо него следует использовать элемент ACRONYM.

1.3.4.10. Акроним: элемент ACRONYM

Синтаксис: <ACRONYM>…</ACRONYM> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (4.0+)
             Netscape Navigator  Не поддерживается.

Элемент ACRONYM используется для маркировки акронимов, т. е. аббревиатур, которые произносятся как единое слово, а не по буквам. При этом атрибут title должен содержать расшифровку аббревиатуры, позволяя обозревателям отображать ее как "подсказку" (tooltip) при указании курсором мыши на аббревиатуру. Примеры:

<ACRONYM lang="ru" title="Организация Объединенных Наций">ООН</ACRONYM>
<ACRONYM title="North Atlantic Treaty Organization">NATO</ACRONYM>

Если аббревиатура произносится по буквам, то стандарт рекомендует использовать вместо этого элемента элемент ABBR. Однако, последний не поддерживается современными обозревателями; поэтому для любых сокращений следует пользоваться элементом ACRONYM.

1.3.5. Задание шрифта

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

1.3.5.1. Телетайпный шрифт: элемент TT

Синтаксис: <TT>…</TT> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (3.0+)

Элемент TT (teletype) указывает, что его содержимое должно отображаться телетайпным шрифтом (т. е. шрифтом, имитирующим пишущую машинку). Пример его отображения:

Это телетайпный шрифт.

В большинстве случаев предпочтительнее применение фразовых элементов CODE, SAMP или KBD либо использование стилей с атрибутом font-family: monospace.

1.3.5.2. Курсивный шрифт: элемент I

Синтаксис: <I>…</I> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (3.0+)

Элемент I (italic) указывает, что его содержимое должно отображаться курсивным шрифтом. Пример его отображения:

Это курсивный шрифт.

В большинстве случаев предпочтительнее применение фразовых элементов EM, DFN, VAR или CITE либо использование стилей, которые позволяют определять различные виды курсивных шрифтов.

1.3.5.3. Полужирный шрифт: элемент B

Синтаксис: <B>…</B> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (3.0+)

Элемент B (bold) указывает, что его содержимое должно отображаться полужирным шрифтом. Пример его отображения:

Это полужирный шрифт.

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

1.3.5.4. Крупный шрифт: элемент BIG

Синтаксис: <BIG>…</BIG> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (3.0+)

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

Это крупный шрифт.

В большинстве случаев предпочтительнее применение заголовков (например, H3) либо использование стилей с атрибутом font-size: larger.

1.3.5.5. Мелкий шрифт: элемент SMALL

Синтаксис: <SMALL>…</SMALL> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (3.0+)

Элемент SMALL указывает, что его содержимое должно отображаться мелким шрифтом. Пример его отображения:

Это мелкий шрифт.

В большинстве случаев предпочтительнее использование стилей с атрибутом font-size: smaller.

1.3.5.6. Верхние и нижние индексы: элементы SUP и SUB

Синтаксис: <SUP>…</SUP> и <SUB>…</SUB> (текстовые элементы)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (3.0+)

Элементы SUP (superscript, верхний индекс) и SUB (subscript, нижний индекс) применяются главным образом для отображения химических, физических и математических формул, а также для отображения особенностей письма некоторых естественных языков. Примеры:

H<SUB>2</SUB>O | H2O
E = mc<SUP>2</SUP> | E = mc2
<SPAN lang="fr">M<SUP>lle</SUP> Dupont</SPAN> | Mlle Dupont

1.3.5.7. Сочетание шрифтов

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

<B><I>полужирный курсивный шрифт</I></B> | полужирный курсивный шрифт
<TT><BIG>крупный телетайпный шрифт</BIG></TT> | крупный телетайпный шрифт
<BIG>шрифты <BIG>разных</BIG> размеров</BIG> | шрифты разных размеров

1.3.6. Цитаты

1.3.6.1. Блочные цитаты: элемент BLOCKQUOTE

Синтаксис: <BLOCKQUOTE>…</BLOCKQUOTE> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           cite = URI (URI, где хранится источник цитаты)
Поддержка:   Internet Explorer  Атрибут cite игнорируется, отображается сдвигом вправо (3.0+)
             Netscape Navigator  Атрибуты dir и cite игнорируются, отображается сдвигом вправо (1.0+)

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

Элемент BLOCKQUOTE обычно отображается как текст, сдвинутый вправо. Не рекомендуется использовать его просто для сдвига текста, если этот текст не связан с цитированием; для этого существует свойство таблиц стилей margin-left. Пример: следующая цитата из стихотворения И. Бродского "Одиссей Телемаку"

<BLOCKQUOTE cite="http://www.myweb.com/brodsky/ulysses.html">
<P>Мой Телемак, Троянская война<BR>
окончена. Кто победил - не помню.<BR>
Должно быть греки: столько мертвецов<BR>
вне дома бросить могут только греки…</P>
</BLOCKQUOTE>

будет отображаться так:

Мой Телемак, Троянская война
окончена. Кто победил - не помню.
Должно быть греки: столько мертвецов
вне дома бросить могут только греки…

1.3.6.2. Краткие цитаты: элемент Q

Синтаксис: <Q>…</Q> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           cite = URI (URI, где хранится источник цитаты)
Поддержка:   Internet Explorer  Атрибут cite игнорируется, отображается обычным текстом (без кавычек),
              атрибут title задает подсказку (tooltip) (4.0+)
             Netscape Navigator  Не поддерживается.

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

Обозреватели должны отображать элемент Q в зависимости от языка цитаты, заданного атрибутом lang. В частности, обозреватель должен заключать цитату в соответствующие кавычки. Проблема в том, что ни один обозреватель этого не делает. С другой стороны, стандарт требует, чтобы автор своих кавычек не ставил (иначе в новых обозревателях текст будет отображаться в кавычках дважды). В качестве компромиссного решения мы рекомендуем кавычек не ставить, но дополнительно заключать цитату в элемент EM, чтобы выделить ее текст. Например, элемент

<P>По словам Наполеона, <EM><Q>Воображение правит миром</Q></EM>.</P>

будет отображаться так:

По словам Наполеона, Воображение правит миром.

1.3.7. Маркировка изменений в документе

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

1.3.7.1. Вставка текста: элемент INS

Синтаксис: <INS>…</INS> (блочный или текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           cite = URI (URI, где хранится объяснение внесения изменения)
           datetime = дата-время (дата и время внесения изменения)
Поддержка:   Internet Explorer  Атрибуты cite и datetime игнорируются, отображается подчеркнутым текстом,
              атрибут title задает подсказку (tooltip) (4.0+)
             Netscape Navigator  Не поддерживается.

Элемент INS (insert) означает вставку нового текста в документ. Он может иметь два необязательных атрибута. Атрибут cite указывает на URI документа, содержащего объяснение причины внесения изменения. Атрибут datetime содержит дату и время внесения изменения.

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

<P>Элемент CENTER определяет блок, содержимое которого должно
  центрироваться обозревателями по горизонтали.
  <INS cite="http://www.w3.org/TR/REC-html40/appendix/changes.html#h-A.1.2"
    datetime="1997-12-19T00:00:00-05:00">
     В HTML 4.0 этот элемент морально устарел.</INS>
</P>

1.3.7.2. Удаление текста: элемент DEL

Синтаксис: <DEL>…</DEL> (блочный или текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           cite = URI (URI, где хранится объяснение внесения изменения)
           datetime = дата-время (дата и время внесения изменения)
Поддержка:   Internet Explorer  Атрибуты cite и datetime игнорируются, отображается перечеркнутым
              текстом, атрибут title задает подсказку (tooltip) (4.0+)
             Netscape Navigator  Не поддерживается.

Элемент DEL (delete) означает удаление текста из документа. Он может иметь два необязательных атрибута. Атрибут cite указывает на URI документа, содержащего объяснение причины внесения изменения. Атрибут datetime содержит дату и время внесения изменения.

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

<DEL cite="http://www.w3.org/TR/REC-html40/appendix/changes.html#h-A.1.3"
  datetime="1997-12-19T00:00:00-05:00" title="Элемент XMP устарел">
  <P>Элемент XMP содержит предварительно отформатированный текст,
    в котором все теги, кроме </XMP>, отображаются как обычный текст.</P>
</DEL>


WDH: HTML - Списки

Глава 1.4. Списки

1.4.1. Общее описание

HTML поддерживает три способа хранения и отображения списков. Любой список состоит из одного или нескольких элементов списков. Списки подразделяются на:

  • маркированные (неупорядоченные) списки;
  • нумерованные (упорядоченные) списки;
  • списки определений.

Только что приведенный список является маркированным и выглядит на языке HTML так:

<UL>
  <LI>маркированные (неупорядоченные) списки;</LI>
  <LI>нумерованные (упорядоченные) списки;</LI>
  <LI>списки определений.</LI>
</UL>

Нумерованный список выглядит аналогично, но его элементы нумеруются:

  1. первый элемент списка;
  2. второй элемент списка;
  3. третий элемент списка.

На языке HTML это записывается так:

<OL>
  <LI>первый элемент списка;</LI>
  <LI>второй элемент списка;</LI>
  <LI>третий элемент списка.</LI>
</OL>

Наконец, списки определений состоят из пар термин/определение, хотя их применение гораздо шире. Пример использования списка определений для составления театрального репертуара:

1 июля
А. К. Толстой. Царь Федор Иоаннович
4 июля
У. Теккерей. Ярмарка тщеславия
9 июля
А. Островский. Волки и овцы

На языке HTML это записывается так:

<DL>
  <DT><STRONG>1 июля</STRONG></DT>
  <DD>А. К. Толстой. <EM>Царь Федор Иоаннович</EM></DD>
  <DT><STRONG>4 июля</STRONG></DT>
  <DD>У. Теккерей. <EM>Ярмарка тщеславия</EM></DD>
  <DT><STRONG>9 июля</STRONG></DT>
  <DD>А. Островский. <EM>Волки и овцы</EM></DD>
</DL>

Списки могут вкладываться друг в друга, причем допускается вложение списков одного типа в списки другого типа. Следующий рецепт приготовления яичницы с ветчиной демонстрирует список определений, в который вложены маркированный список (ингредиенты) и нумерованный список (способ приготовления):

Ингредиенты:
  • яйцо 6 шт.
  • ветчина 200 г
  • масло сливочное 2 ст. ложки
  • соль по вкусу
  • зелень
Способ приготовления:
  1. Ветчину нарезать мелкими кубиками и обжарить с маслом.
  2. Разбить на обжаренную ветчину яйца.
  3. Посолить и жарить на слабом огне.
  4. Перед подачей посыпать зеленью.

Способ отображения списков зависит от обозревателя и может быть уточнен с помощью задания стиля списка.

1.4.2. Маркированные списки: элемент UL

Синтаксис: <UL>…</UL> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (4.0+)

Элемент UL (unordered list) определяет маркированный список. Его содержимым должны быть один или несколько элементов LI. Обозреватели обычно отображают элементы маркированного списка с отступом вправо и с маркером перед началом элемента (см. примеры, приведенные выше). Свойство стилей list-style позволяет авторам изменять вид маркеров, запрещать их вывод и т. п.

1.4.3. Нумерованные списки: элемент OL

Синтаксис: <OL>…</OL> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (4.0+)

Элемент OL (ordered list) определяет нумерованный список. Его содержимым должны быть один или несколько элементов LI. Обозреватели обычно отображают элементы нумерованного списка с отступом вправо и с номером перед началом элемента (см. примеры, приведенные выше). Свойство стилей list-style позволяет авторам изменять способ нумерации элементов списка.

1.4.4. Элементы списков: элемент LI

Синтаксис: <LI>…</LI> (блочный элемент, конечный тег необязателен)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (4.0+)

Элемент LI (list item) определяет элемент маркированного или нумерованного списка. Он может включать в себя другие блочные элементы, в т. ч. и элементы OL и UL, позволяя тем самым создавать многоуровневые вложенные списки. Способ его отображения зависит от типа списка и может быть изменен свойством стилей list-style.

1.4.5. Списки определений: элементы DL, DT и DD

Синтаксис: <DL>…</DL> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Синтаксис: <DT>…</DT> (блочный элемент, конечный тег необязателен)
Атрибуты:  id, class, style, title, lang, dir, события
Синтаксис: <DD>…</DD> (блочный элемент, конечный тег необязателен)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (4.0+)

Элемент DL (definition list) определяет список определений. Он отличается от остальных типов списков тем, что каждый элемент этого списка представляется двумя элементами HTML: элементом DT (definition term), содержащим имя определяемого термина, и элементом DD (definition description), содержащим определение этого термина (см. примеры, приведенные выше). Элемент DT может содержать любые текстовые (но не блочные) элементы. Элемент DD может содержать как текстовые, так и блочные элементы, позволяя тем самым создавать многоуровневые вложенные списки.

Стандарт не исключает возможности давать несколько определений одного термина или одно определение нескольким терминам, как показано в следующем примере:

<DL>
  <DT>Uniform Resource Identifier</DT>
  <DT>Унифицированный идентификатор ресурса</DT>
  <DD>Стандартизованная строка, указывающая на ресурс Интернета,
    такой как HTML-документ или дисковый файл.</DD>
</DL>

Этот пример будет отображаться так:

Uniform Resource Identifier
Унифицированный идентификатор ресурса
Стандартизованная строка, указывающая на ресурс Интернета, такой как HTML-документ или дисковый файл.

Как отмечалось выше, списки определений имеют довольно широкий круг применений. Одним из них является представление диалогов, в которых элемент DT содержит имя говорящего, а DD - его или ее слова. Пример такого диалога из "Вишневого сада" А. П. Чехова:

<DL>
  <DT>Фирс</DT>
  <DD>Перед несчастьем тоже было: и сова кричала, и самовар гудел бесперечь.</DD>
  <DT>Гаев</DT>
  <DD>Перед каким несчастьем?</DD>
  <DT>Фирс</DT>
  <DD>Перед волей.</DD>
</DL>

Этот диалог будет отображаться так:

Фирс
Перед несчастьем тоже было: и сова кричала, и самовар гудел бесперечь.
Гаев
Перед каким несчастьем?
Фирс
Перед волей.


WDH: HTML - Гиперссылки, объекты и графические образы

Глава 1.6. Гиперссылки, объекты и графические образы

1.6.1. Гиперссылки и закладки: элемент A

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

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

Строение гиперссылки

Для создания анкеров в языке HTML используется элемент A.

Синтаксис: <A>…</A> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           name = CDATA (название закладки)
           href = URI (URI ссылки)
           rel = типы ссылок (прямая ссылка)
           rev = типы ссылок (обратная ссылка)
           type = тип файла (тип файла, на который указывает ссылка)
           target = фрейм (фрейм для отображения ссылки)
           hreflang = код языка (язык ссылки)
           charset = кодировка (кодировка ссылки)
           accesskey = символ (имя клавиши быстрого доступа)
           tabindex = число (номер в порядке нажатия табуляции)
           shape = rect | circle | poly | default (область в карте ссылок)
           coords = координаты (координаты в карте ссылок)
           onfocus = сценарий (при получении элементом фокуса)
           onblur = сценарий (при потере элементом фокуса)
Поддержка:   Internet Explorer  Атрибуты type, hreflang, charset, shape, coords игнорируются;
              клавиша, заданная в accesskey, должна нажиматься вместе с Alt (5.0+)
             Netscape Navigator  Атрибуты rel, rev, type, hreflang, charset, coords, tabindex и
              accesskey игнорируются (4.0+)

Элемент A (anchor) определяет положение анкера в документе. Он применяется для создания закладок и для создания гиперссылок. Его содержимым могут быть любые текстовые элементы, кроме A.

Для создания закладок (т. е. анкеров цели) используется атрибут name. Например, следующий элемент в документе mydoc.html определяет закладку myheading:

<H1><A name="myheading">Мой заголовок</A></H1>

Для создании гиперссылки на нее из того же документа используется анкер:

<A href="#myheading">…</A>

а из другого документа — анкер:

<A href="mydoc.html#myheading">…</A>

Примечания.

  1. Элемент A не может быть вложен в другой элемент A, поэтому следите, чтобы анкеры закладок не содержали анкеров гиперссылок. Во избежании этого можно использовать в одном элементе A и атрибут name, и атрибут href.
  2. Стандарт HTML рекомендует использовать вместо атрибута name атрибут id. Современные обозреватели поддерживают эту возможность, однако это может вызвать трудности в динамических страницах из-за несовместимости обозревателей.

Для создания гиперссылок (т. е. анкеров источника) используется атрибут href. Его значением должен быть URI ресурса, на который указывает гиперссылка. Анкер гиперссылки может иметь следующие необязательные атрибуты:

  • Атрибут title задает краткое описание анкера цели и отображается как "подсказка".
  • Атрибут target используется только во фреймовых документах и задает имя фрейма, в котором должна отображаться цель гиперссылки.
  • Атрибуты hreflang и charset указывают на язык и кодировку ссылки.
  • Атрибут accesskey задает символ Unicode в качестве клавиши быстрого перехода по гиперссылке.
  • Значением атрибута tabindex должно быть целое число в диапазоне от 0 до 32767. Это число задает номер данной гиперссылки при движении по Веб-странице нажатиями клавиши Tab. Если tabindex равно 0 или не задано, то данный элемент получит фокус после всех элементом с положительным значением tabindex. При совпадении значений tabindex у нескольких элементов первым получает фокус тот, который раньше встречается в документе.
  • Атрибуты rel и rev имеют то же назначение, что и у элемента LINK.
  • Атрибуты shape и coord используются только в картах ссылок и описаны в п. 6.6.1.

Примеры:

&ltA href="album.html">Мой фотоальбом</A>
<A href="../images/me.jpg">Моя фотография</A>
<A href="sounds/yester.mid" type="audio/midi" accesskey="Y">Yesterday (MIDI-файл)</A>
<A href="section2.html" title="Таблицы стилей" rel="next"
  target="_blank">Раздел 2</A>
<A href="mailto:myname@mail.com" title="Сообщите Ваше мнение">myname@mail.com</A>
<A href="http://babel.alis.com:8080/langues/iso639.zh.htm" charset="big5"
  hreflang="zh">ISO 639 (китайский язык)</A>

Помимо базовых событий, элемент A допускает обработку еще двух событий:

  • onfocus — происходит, когда гиперссылка получает фокус;
  • onblur — происходит, когда гиперссылка теряет фокус.

1.6.2. Введение в объекты, образы и аплеты

Если бы HTML-документы состояли только из текста, WWW не приобрел бы и сотой доли своей сегодняшней популярности. К счастью, разработчики языка поняли это достаточно быстро и добавили к стандарту поддержку графических образов (т. е. рисунков и фотографий), аплетов (т. е. программ, которые автоматически загружаются и исполняются на компьютере-клиенте), мультимедийных объектов (т. е. аудиофайлов и видеоклипов) и других HTML-документов. Предыдущие версии языка HTML позволяли авторам включать в HTML-документы графические образы (в виде элемента IMG) и аплеты языка Java (в виде элемента APPLET). Эти элементы имели достаточно серьезные ограничения по использованию, поэтому в HTML 4.0 появился новый элемент OBJECT, который обеспечивает включение в документы любых объектов, типы которых известны обозревателю. Следующая таблица показывает, как возможности элемента OBJECT соотносятся с возможностями старых элементов:

Тип объекта | Конкретный элемент HTML | Общий элемент HTML
Графический образ | IMG | OBJECT
Мультимедийный файл | нет | OBJECT
Аплет | APPLET (морально устарел) | OBJECT
Другой HTML-документ | IFRAME | OBJECT

Из таблицы видно, что

  • для включения в документ графических образов используются элементы IMG или OBJECT;
  • для включения в документ мультимедийных файлов и аплетов следует использовать только элемент OBJECT;
  • для включения в документ других HTML-документов используются элементы IFRAME или OBJECT.

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

1.6.3. Вставка образа: элемент IMG

Синтаксис: <IMG> (содержимого и конечного тега нет)
Атрибуты:  id, class, style, title, lang, dir, события
           src = URI (URI графического файла)
           alt = текст (альтернативный текст)
           longdesc = URI (URI подробного описания образа)
           name = CDATA (название образа)
           width = размер (ширина образа)
           height = размер (высота образа)
           usemap = URI (URI клиентской карты ссылок)
           ismap = ismap (серверная карта ссылок)
Поддержка:   Internet Explorer  Атрибут longdesc игнорируется (5.0+)
             Netscape Navigator  Атрибут longdesc игнорируется (4.0+)

Элемент IMG (image) включает в документ графический образ. Он может содержаться в любых текстовых и блочных элементах, кроме PRE. Обязательный атрибут src указывает на местоположение файла, в котором хранится соответствующее изображение; этот файл должен быть в одном из трех форматов, поддерживаемых обозревателями (GIF, JPEG или PNG). Обязательный атрибут alt задает альтернативный текст, который выводится обозревателем вместо образа, если вывод графических изображений отключен или не поддерживается. Все остальные атрибуты являются необязательными.

  • Атрибут longdesc содержит ссылку на подробное описание данного образа. Это описание должно дополнять краткое описание, заданное атрибутом alt. Он особенно полезен, если с образом связана карта ссылок; в этом случае он должен содержать пояснения к карте.
  • Атрибут name содержит название образа, на которое можно ссылаться в таблицах стилей и сценариях. Этот атрибут сохраняется только в целях совместимости со старыми обозревателями; в настоящее время рекомендуется использовать вместо него атрибут id.
  • Атрибуты width и height задают размеры образа на экране по горизонтали и вертикали соответственно. Эти атрибуты полезнее всего, когда они указывают точные размеры образа в пикселях. Их задание позволяет обозревателю зарезервировать пространство для образа при загрузке документа и тем самым несколько ускорить его отображение. Помните, однако, что многие обозреватели выделяют пространство для образа на основе этих атрибутов даже тогда, когда они отображают не образ, а альтернативный текст. Это может привести к тому, что альтернативный текст будет виден не полностью (если размеры образа малы или текст достаточно велик). Разумеется, размеры образа можно указать и в процентах от размера экрана (не от размера образа!), но образы, масштабированные обозревателями обычно выглядят удручающе, поэтому подобной практики следует по возможности избегать.
  • Атрибут usemap указывает на клиентскую карту ссылок, определенную элементом MAP. Его значением должно быть имя закладки, заданное атрибутом name соответствующего элемента MAP.
  • Атрибут ismap указывает на серверную карту ссылок. Если элемент IMG содержит этот атрибут, и пользователь щелкает мышью на отображении образа, обозреватель передает координаты точки щелчка серверу, а тот передает обозревателю соответствующий документ.

Пример:

<IMG src="http://www.somecompany.com/People/Yury/family.jpg"
  alt="Фотография моей семьи на отдыхе">

Тот же эффект может быть достигнут с помощью элемента OBJECT:

<OBJECT data="http://www.somecompany.com/People/Yury/family.jpg" type="image/jpeg">
  Фотография моей семьи на отдыхе
</OBJECT>

1.6.4. Вставка объекта: элемент OBJECT

Синтаксис: <OBJECT>…</OBJECT> (блочный элемент)
Атрибуты:  id, class, style, title, события
           classid = URI (URI кода объекта)
           data = URI (URI данных объекта)
           archive = CDATA (список архивных файлов)
           codebase = URI (базовый URI для classid, data, archive)
           width = размер (ширина объекта)
           height = размер (высота объекта)
           usemap = URI (URI клиентской карты ссылок)
           name = CDATA (название объекта для форм)
           codetype = тип файла (тип кода объекта)
           type = тип файла (тип данных объекта)
           standby = текст (сообщение, отображаемое при загрузке объекта)
           tabindex = число (номер в порядке нажатия табуляции)
           declare = declare (декларация объекта, а не вызов его)
Поддержка:   Internet Explorer  Атрибуты archive, usemap, standby и declare игнорируются (5.0+)
             Netscape Navigator  Атрибуты archive, usemap, codetype, standby, tabindex и declare
              игнорируются (4.0+)

Элемент OBJECT обеспечивает включение в документ различных объектов. Он может содержаться в заголовке документа и любых текстовых и блочных элементах, кроме PRE. Его содержимым являются элементы PARAM, за которыми могут следовать текстовые или блочные элементы. При этом все элементы, следующие за элементами PARAM, задают альтернативное содержание, которое должно отображаться, если обозреватель не поддерживает данный тип объектов.

Стандарт поясняет назначение элемента OBJECT следующим образом. Обозреватели содержат встроенные механизмы для отображения данных определенных типов, например текста и графических образов в формате GIF и JPEG. Для отображения данных, которые они не умеют отображать сами, обозреватели могут вызывать внешние приложения. Например, для выполнения Java-аплета обозреватель должен передать имя этого аплета и параметры его вызова виртуальной Java-машине и отобразить результаты ее работы в своем окне. Элемент OBJECT позволяет авторам указывать обозревателю тип объекта, включаемого в документ, с тем, чтобы обозреватель принял решение: будет он его отображать сам или передаст исполнение внешней программе.

В самом общем случае автор должен передать обозревателю следующую информацию об объекте:

  1. Тип и местоположение включаемого объекта (например, расположение файла, содержащего исполняемый код аплета).
  2. Тип и местоположение данных для объекта (например, формат и расположение файла, содержащего графический образ).
  3. Дополнительные параметры (например, начальные значения параметров аплета).

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

Графические образы

Для включения в документ графического образа мы должны указать только два его атрибута: type, задающий формат графического файла, и data, указывающий его URI. Пример:

<OBJECT type="image/png" data="http://www.somecompany.com/Images/family.png">
  Фотография моей семьи на отдыхе
</OBJECT>

Java-аплеты

Для включения в документ аплета на языке Java мы должны указать его тип (codetype), местоположение (classid) и, возможно, тип (type) и местоположение (data) данных, которыми он пользуется. Кроме того, для запуска аплета может потребоваться задание начальных значений его параметров (см. ниже описание элемента PARAM). Пример:

<OBJECT codetype="application/java" classid="java:EmblazeVideo.class">
  Ваш обозреватель не поддерживает Java-аплеты.
</OBJECT>

Управляющие элементы ActiveX

Для включения в документ управляющего элемента ActiveX мы должны указать только его GUID (classid). Иногда нужно также указать, где находится соответствующая динамическая библиотека(codebase). Кроме того, для запуска элемента ActiveX может потребоваться задание начальных значений его параметров (см. ниже описание элемента PARAM). Подробнее об элементах ActiveX и их использовании см. п. 3.13.1. Примеры:

<OBJECT id="browserIcons" classid="clsid:EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B">
<PARAM name="AlignLeft" value="0">
<PARAM name="AutoSize" value="1">
  Элемент ActiveX не найден!
</OBJECT>
<OBJECT id="menuView" classid="clsid:52DFAE60-CEBF-11CF-A3A9-00A0C9034920"
  codebase="http://activex.microsoft.com/controls/iexplorer/btnmenu.ocx">
</OBJECT>

Теперь мы можем описать назначение каждого атрибута.

  • Атрибут classid указывает местоположение исполняемого кода объекта (например, файла класса для Java-аплетов) или его GUID (для элементов ActiveX). Способ задания его значений ясен из приведенных выше примеров.
  • Атрибут data задает URI файла данных, необходимых для включения объекта.
  • Атрибут archive может содержать список URI архивных файлов, разделенных пробелами. Он позволяет обозревателю при загрузке Веб-страницы произвести загрузку всех необходимых архивов (например, библиотек, используемых Java-аплетом) и тем самым уменьшить время отображения объекта. Для файлов Java стандартным форматом архивов является формат JAR.
  • Атрибут codebase задает базовый URI для ресурсов, указанных в атрибутах classid, data и archive. Если местоположение этих ресурсов задано относительными URI, то их полные URI разрешаются с помощью значения codebase. Этот же атрибут используется для задания местоположения динамических библиотек, используемых управляющими элементами ActiveX.
  • Атрибуты width и height задают размеры окна для отображения объекта по горизонтали и вертикали соответственно. Большинство обозревателей требуют, чтобы эти атрибуты задавались всегда, т. к. они не могут вычислить необходимый размер окна автоматически.
  • Атрибут usemap указывает на клиентскую карту ссылок, определенную элементом MAP. Его значением должно быть имя закладки, заданное атрибутом name соответствующего элемента MAP. В отличие от карт ссылок, заданных элементом IMG, элемент OBJECT позволяет задать полную текстовую альтернативу карте ссылок в случае, если обозреватель не отображает графику. Кроме того, в данном случае элемент MAP может быть помещен внутрь элемента OBJECT и тогда не будет отображаться.
  • Атрибут name задает название объекта и используется только в тех случаях, когда данный объект является частью формы.
  • Атрибут codetype указывает тип объекта, заданного атрибутом classid. Этот атрибут является необязательным, но рекомендуемым. Если он не задан, то его значением по умолчанию считается значение атрибута type.
  • Атрибут type указывает тип данных, заданных атрибутом data. Этот атрибут является необязательным, но рекомендуемым.
  • Атрибут standby задает текст, который может отображаться обозревателем во время загрузки объекта.
  • Значением атрибута tabindex должно быть целое число в диапазоне от 0 до 32767. Это число задает номер данного элемента при движении по Веб-странице нажатиями клавиши Tab. Если tabindex равно 0 или не задано, то данный элемент получит фокус после всех элементом с положительным значением tabindex. При совпадении значений tabindex у нескольких элементов первым получает фокус тот, который раньше встречается в документе.
  • Задание атрибута declare означает, что данный элемент является только декларацией объекта, а инициализация этого объекта будет произведена другим элементом, ссылающимся на id данного объекта. Это позволяет загружать объект через гиперссылку, кнопку или другой объект, например:
    <OBJECT id="video" codetype="application/java"
  classid="java:EmblazeVideo.class" declare="declare">
</OBJECT>
...
<P>Вы готовы к <A href="#video">просмотру видеоклипа</A>?</P>

1.6.5. Инициализация объекта: элемент PARAM

Синтаксис: <PARAM> (содержимого и конечного тега нет)
Атрибуты:  id
           name = CDATA (название параметра)
           value = CDATA (значение параметра)
           valuetype = data | ref | object (тип значения)
           type = тип файла (тип файла ресурса)
Поддержка:   Internet Explorer  Атрибуты id, valuetype и type игнорируются (5.0+)
             Netscape Navigator  Атрибуты id, valuetype и type игнорируются (4.0+)

Элемент PARAM (parameter) используется только в начале элемента OBJECT для задания начальных значений параметров объекта. Обязательный атрибут name задает название параметра, значение которого задается данным элементом, а атрибут value задает значение этого параметра. Атрибут valuetype задает тип атрибута value; он может принимать следующие значения:

data | Данные (принято по умолчанию). Значение атрибута value передаются объекту как текстовая строка.
ref | Ссылка. Значением атрибута value является URI ресурса, в котором хранятся значения параметра. В этом и только в этом случае тип файла ресурса должен быть задан атрибутом type.
object | Объект. Значением атрибута value является значение атрибута id элемента OBJECT с атрибутом declare, имеющегося в этом же документе.

Современные обозреватели поддерживают только параметры типа data.

Все остальные синтаксические свойства названий и значений параметров определяются типом объекта, к которому они относятся. Примеры использования элемента PARAM приведены выше.

1.6.6. Карты ссылок

Помимо текстовых гиперссылок, HTML-документы могут содержать т. н. карты ссылок, позволяющие разбить графический образ на несколько активных областей и связать с каждой областью определенное действие (загрузить другой документ, запустить какую-либо программу и т. п.). При активизации области щелчком мыши обозреватель выполняет соответствующее действие. Существуют два типа карт ссылок:

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

При этом клиентские карты предпочтительнее по двум причинам:

  • они доступны пользователям, чьи обозреватели не поддерживают графику;
  • пользователь может сразу видеть по форме курсора мыши, указывает ли мышь на активную область.

1.6.6.1. Клиентские карты: элементы MAP и AREA

Синтаксис: <MAP>…</MAP> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           name = CDATA (название карты)
Поддержка:   Internet Explorer  Соответствует стандарту (5.0+)
             Netscape Navigator  Соответствует стандарту (4.0+)
Синтаксис: <AREA> (содержимого и конечного тега нет)
Атрибуты:  id, class, style, title, lang, dir, события
           shape = rect | circle | poly | default (область в карте ссылок)
           coords = координаты (координаты в карте ссылок)
           href = URI (URI ссылки)
           nohref = nohref (неактивная область)
           alt = текст (альтернативный текст)
           target = фрейм (фрейм для отображения ссылки)
           accesskey = символ (имя клавиши быстрого доступа)
           tabindex = число (номер в порядке нажатия табуляции)
           onfocus = сценарий (при получении элементом фокуса)
           onblur = сценарий (при потере элементом фокуса)
Поддержка:   Internet Explorer  Соответствует стандарту; клавиша, заданная в accesskey, должна
              нажиматься вместе с Alt (5.0+)
             Netscape Navigator  Атрибуты alt, accesskey и tabindex не поддерживаются (4.0+)

Элемент MAP применяется для создания клиентских карт ссылок. Его содержимым могут быть либо элементы AREA, либо любые блочные элементы. MAP употребляется совместно с элементами IMG, OBJECT или INPUT, загружающими графический образ, карту которого он определяет. При этом обязательный атрибут name содержит название карты, которое используется как имя закладки в атрибуте usemap ассоциированного с картой ссылок. Пример:

<MAP name="mymap">
  <AREA href="reference.htm" alt="Справочник по HTML и CSS" coords="5,5,95,195">
  <AREA href="design.htm" alt="Введение в Веб-дизайн" coords="105,5,195,195">
  <AREA href="tools.htm" alt="Инструментарий" coords="205,5,295,195">
</MAP>
<IMG src="sitemap.gif" alt="Карта узла" usemap="#mymap" width="300" height="200">

В этом примере содержимым элемента MAP являются три элемента AREA, определяющие активные области графического образа. Такой элемент MAP не отображается обозревателями; его присутствие в документе обнаруживается только по подсказкам, заданным в атрибутах alt элементов AREA. Но, как отмечено выше, элемент MAP может содержать и блочные элементы, которые, в свою очередь, должны содержать анкеры, определяющие активные области образа и соответствующие гиперссылки. В этом случае только что приведенный пример мог бы выглядеть так:

<MAP name="mymap">
  <P>Выберите раздел:
  <A href="reference.htm" coords="5,5,95,195">Справочник по HTML и CSS</A>
  <A href="design.htm" coords="105,5,195,195">Введение в Веб-дизайн</A>
  <A href="tools.htm" coords="205,5,295,195">Инструментарий</A>
  </P>
</MAP>
<OBJECT data="sitemap.gif" type="image/gif" usemap="#mymap" width="300" height="200">
</OBJECT>

В этом случае содержимое элемента MAP отображается как набор текстовых гиперссылок. Если мы хотим скрыть его, то элемент следует перенести внутрь ассоциированного c ним элемента OBJECT. Отметим, что при наличии в MAP каких-либо элементов помимо AREA, обозреватели игнорируют все элементы AREA.

Теперь рассмотрим подробнее строение элемента AREA, который определяет активную область карты ссылок и соответствующую гиперссылку. Атрибуты shape и coord задают соответственно форму активной области и ее координаты относительно левого верхнего угла графического образа; они могут принимать следующие значения:

Таблица 1.5. Атрибуты ссылок в картах ссылок
Атрибут shape | Описание | Атрибут coord | Примечание
rect | прямоугольник (по умолчанию) | "xлевый, yверхний, xправый, yнижний" |
circle | круг | "xцентра, yцентра, радиус" | Если радиус задан в процентах, то обозреватель вычисляет его на основе ширины и длины ассоциированного объекта и выбирает наименьшее из двух этих значений.
poly | многоугольник | "x1, y1, …, xn, yn" | Координаты первой и последней точки должны совпадать, чтобы описанная ломаная была замкнутой. Если это не так, обозреватель добавляет первую точку в конец цепочки координатных пар, чтобы замкнуть многоугольник.
default | весь образ | не используется |

Атрибут href определяет URI гиперссылки, связанной с данной активной областью. Если он не задан или элемент AREA содержит атрибут nohref, то данная область не является активной. Обязательный атрибут alt задает альтернативный текст, который выводится обозревателем вместо образа, если вывод графических изображений отключен или не поддерживается. Этот же текст выводится обозревателем в качестве подсказки при попадании курсора мыши на активную область. Все остальные атрибуты являются необязательными.

  • Атрибут target используется только во фреймовых документах и задает имя фрейма, в котором должна отображаться цель гиперссылки.
  • Атрибут accesskey задает символ Unicode в качестве клавиши быстрого перехода по гиперссылке.
  • Значением атрибута tabindex должно быть целое число в диапазоне от 0 до 32767. Это число задает номер данного элемента при движении по Веб-странице нажатиями клавиши Tab. Если tabindex равно 0 или не задано, то данный элемент получит фокус после всех элементом с положительным значением tabindex. При совпадении значений tabindex у нескольких элементов первым получает фокус тот, который раньше встречается в документе.
  • Атрибут onfocus задает сценарий, который выполняется, когда активная область получает фокус.
  • Атрибут onblur задает сценарий, который выполняется, когда активная область теряет фокус.

1.6.6.2. Серверные карты

Серверные карты используются в тех случаях, когда карта ссылок слишком сложна для клиентской карты. Серверные карты могут создаваться только для образов, заданных элементом IMG или INPUT, который должен находиться внутри анкера гиперссылки и иметь атрибут ismap. Пример:

<A href="http://www.acme.com/cgi-bin/topresult.cgi">
  <IMG src="game.gif" ismap="ismap" alt="Результаты игр"></A>

При щелчке мыши по этому образу обозреватель формирует запрос к серверу, с которого загружен текущий HTML-документ. Этот запрос формируется в соответствии с интерфейсом CGI, который подробно описан в Части VI, по следующим правилам:

  • Обозреватель запоминает координаты щелчка мыши в пикселях относительно левого верхнего угла графического образа. Если обозреватель не поддерживает экранные координаты (например, это синтезатор речи), координаты принимаются равными 0, 0.
  • На основе этих координат формируется URI запроса к серверу на запуск сценария; для этого к URI сценария, заданному атрибутом href гиперссылки, добавляется запрос вида ?x,y. Если, например, координаты мыши были равны 15 и 24, то в приведенном выше примере будет сформирован следующий запрос: http://www.acme.com/cgi-bin/topresult.cgi?15,24.
  • Сервер принимает строку запроса и исполняет указанный сценарий с указанными параметрами.

1.6.7. Форматы графических файлов

Число форматов, в которых сохраняются графические данные, очень велико. Однако, в WWW их количество сводится всего к трем форматам: GIF, JPEG и PNG. Исторически ситуация сложилась так, что первые Веб-обозреватели поддерживали форматы GIF и JPEG, поэтому эти два формата стали стандартом de facto для хранения графики в Веб. Затем специально для сетевой графики был разработан формат PNG, который должен составить конкуренцию формату GIF. В этом разделе мы приводим краткую характеристику каждого из перечисленных форматов и даем рекомендации по их применению.

Поддержка:   Internet Explorer  Поддерживает все три формата
             Netscape Navigator  Поддерживает все три формата

1.6.7.1. Формат GIF

Формат GIF (Graphics Interchange Format) был первоначально разработан для пользователей сети CompuServe и существует в двух вариантах: GIF87a и GIF89a. Наше описание относится ко второму из них.

Формат GIF обеспечивает сжатие данных, которое обычно варьируется от 3:1 до 5:1. Графика, сохраняемая в этом формате, ограничивается 256 цветами (8 бит на пиксель), поэтому он не пригоден для хранения полноцветных фотографий, но идеально подходит для хранения значков, эмблем и других искусственно созданных изображений с ограниченным количеством цветов.

Стандарт GIF89a поддерживает три эффекта, полезных при создании Веб-страниц:

  • Черезстрочный показ (interlaced images). При таком показе сначала отображается каждая восьмая строка образа, затем каждая четвертая и т. д. В результате, по мере загрузки графического файла обозревателем изображение "проявляется" на экране в несколько проходов. Это может быть полезно пользователям, работающих с медленными модемами, т. к. они могут понять, что изображено на рисунке, не дожидаясь его полной загрузки.
  • Прозрачность (transparency). В прозрачном GIF-изображении один из цветов обозначается как прозрачный, что позволяет фону документа проступать сквозь него. В результате рисунок отображается не прямоугольником, наложенным на фон документа, а как бы вырастает из этого фона.
  • Анимация (animation). Анимированный GIF-файл содержит несколько изображений, которые отображаются обозревателем, последовательно сменяя друг друга. Кроме того, в нем содержится информация о промежутках времени между сменой изображений и о количестве повторений цикла их прокрутки. В частности, анимированные GIF-файлы применяются для создания рекламных заставок (banners), которыми сегодня кишат все коммерческие Веб-страницы.

1.6.7.2. Формат JPEG

Формат JPEG (Joint Photographic Expert Group) предназначен для хранения полноцветных изображений (24 бита на пиксель, т. е. 16,7 млн. цветов). Он использует мощный метод сжатия данных, который, однако, может привести к потере качества изображения. Тем не менее, часто можно сжимать изображения с коэффициентом 10:1 и даже 20:1 без заметной для глаза потери качества. Этот формат следует использовать для хранения полноцветных фотографий и не следует использовать для хранения изображений, уже приведенных к 256-цветовой палитре. Кроме того, JPEG не годится для изображений с резким переходом между цветами — это объясняется особенностями его алгоритма сжатия.

Аналогом черезстрочных GIF-файлов являются т. н. прогрессивные JPEG-файлы (p-JPEG), которые также отображаются с постепенной прорисовкой. Прозрачность в JPEG-образах не поддерживается.

1.6.7.3. Формат PNG

Формат PNG (Portable Network Graphics) — это новый графический стандарт, разработанный W3C и призванный заменить GIF, однако пока он используется не слишком широко. Особенности формата PNG:

  • более высокая степень сжатия изображения, чем у GIF;
  • поддержка 1-, 2-, 4-, 8-, 16-, 24- и 32-битовых изображений;
  • черезстрочный показ изображения;
  • несколько уровней прозрачности;
  • встроенная гамма-коррекция изображений.


WDH: HTML - Формы

Глава 1.8. Формы

1.8.1. Общее описание

Все рассмотренные нами до сих пор элементы обеспечивали только пассивное взаимодействие пользователя с обозревателем — просмотр Веб-страниц и переход к другим Веб-страницам с помощью гиперссылок. Однако, во многих случаях Веб нуждается в активном взаимодействии с пользователем, т. е. в получении от него информации. Для интерактивного взаимодействия с пользователем язык HTML содержит т. н. формы. Форма — это раздел HTML-документа, которая наряду с обычным содержанием содержит управляющие элементы (поля ввода, кнопки, флажки, переключатели, меню и т. д.), а также метки этих элементов. Пользователь заполняет форму, изменяя ее управляющие элементы (например, путем ввода текста или выбора пункта меню), а затем пересылает заполненную форму для обработки серверу; обычно это Веб-сервер или сервер электронной почты.

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

HTML поддерживает следующие типы управляющих элементов:

Кнопки (buttons)
Существуют три типа кнопок:
  • кнопки пересылки формы: при нажатии пересылают форму для обработки серверу;
  • кнопки сброса формы: при нажатии инициализируют форму, сбрасывая значения всех ее элементов в начальные;
  • кнопки общего вида: при нажатии на такую кнопку происходит вызов связанного с этим событием сценария.

Кнопки могут быть созданы с помощью элементов BUTTON или INPUT.

Флажки (checkboxes)
Флажок — это элемент, имеющий два состояния: выбран или не выбран. Флажок выбран, если установлен его атрибут checked. При пересылке формы успешными являются только выбранные флажки. Флажки создаются с помощью элемента INPUT.
Переключатели (radio buttons)
Переключатели подобны флажкам, но с одним отличием: если несколько переключателей имеют одно и то же имя элемента, то выбран может быть только один из них. Иными словами, они реализуют набор взаимоисключающих вариантов. Переключатели создаются с помощью элемента INPUT.
Меню (menus)
Меню позволяют пользователю осуществлять выбор из нескольких вариантов. Меню создается элементом SELECT в сочетании с элементами OPTGROUP и OPTION.
Поля ввода текста (text input)
Имеются два элемента, обеспечивающих ввод текста пользователем. Элемент INPUT создает однострочное, а элемент TEXTAREA — многострочное поле ввода. В обоих случаях введенный текст становится текущим значением элемента.
Селекторы файлов (file select)
Этот управляющий элемент позволяет пользователю выбрать файл для передачи его содержимого серверу при пересылке формы. Селекторы файлов создаются с помощью элемента INPUT.
Скрытые элементы (hidden controls)
Возможно создание управляющих элементов, которые не отображаются обозревателем, но значения которых передаются при пересылке формы. Они обеспечивают сохранение необходимых параметров между сеансами обмена информацией между клиентом и сервером, которая иначе была бы утеряна. Для создания скрытых элементов используется элемент INPUT.
Объектные элементы (object controls)
Формы могут содержать объекты общего вида, содержимое которых передается при пересылке формы. Такие элементы создаются с помощью элемента OBJECT.

WDH+ Об обработке форм см. WDH+: Полнофункциональная проверка формы.

1.8.2. Создание формы: элемент FORM

Синтаксис: <FORM>…</FORM> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           action = URI (URI обработчика формы)
           method = get | post (метод HTTP пересылки формы)
           enctype = тип файла (тип файла для пересылки формы)
           accept = типы файлов (список допустимых типов файлов)
           accept-charset = кодировки (список допустимых кодировок символов)
           name = CDATA (название формы для сценариев)
           target = фрейм (фрейм для отображения результатов)
           onsubmit = сценарий (пересылка формы)
           onreset = сценарий (инициализация формы)
Поддержка:   Internet Explorer  Атрибуты accept и accept-charset игнорируются (5.0+)
             Netscape Navigator  Атрибуты accept и accept-charset игнорируются (4.0+)

Элемент FORM используется для создания интерактивных форм и служит контейнером для управляющих элементов, образующих форму. Помимо управляющих элементов он может содержать сценарии и любые блочные элементы, кроме FORM. Данный элемент может содержаться в элементах BLOCKQUOTE, BODY, BUTTON, DD, DEL, DIV, FIELDSET, FORM, IFRAME, INS, LI, MAP, NOFRAMES, NOSCRIPT, OBJECT, TD и TH.

Обязательный атрибут action задает URI программы, принимающей и обрабатывающей результаты заполнения формы пользователем. Обычно это CGI-сценарий или Java-программа, работающая на Веб-сервере. Кроме того, в качестве action возможно задание URI электронной почты вида mailto:name@server.com.

Способ пересылки формы определяется атрибутами method и enctype. Он состоит в следующем:

  1. Формируется набор данных формы как последовательность пар имя-элемента/текущее-значение для всех успешных управляющих элементов.
  2. Этот набор данных кодируется в соответствии с типом файла, заданным атрибутом enctype.
  3. Кодированные данные передаются серверу в соответствии с методом HTTP, заданным атрибутом method:
    • Если method=get (принято по умолчанию), то к URI обработчика формы добавляется '?' и набор данных формы, закодированный в соответствии с типом файла "application/x-www-form-urlencoded". Полученный URI передается Веб-серверу в запросе HTTP "GET". В этом случае все данные формы должны быть символами базовой латиницы, а их допустимый объем ограничен.
    • Если method=post, то обозреватель выполняет запрос HTTP "POST" с URI запроса, заданным в method, и телом сообщения, созданным в соответствии с типом файла, заданным в enctype (обычно это "multipart/form-data").

Элемент FORM может также иметь следующие необязательные атрибуты:

  • Атрибут accept задает список типов файлов, разделенных запятыми, которые поддерживаются сервером обработчика формы. Обозреватель может использовать этот список для отфильтровки только допустимых файлов в селекторах файлов (см. элемент INPUT с type=file), но современные обозреватели обычно игнорируют этот атрибут.
  • Атрибут accept-charset задает список кодировок символов, разделенных запятыми или пробелами, которые поддерживаются сервером обработчика формы. По умолчанию содержит строку "UNKNOWN" и обычно интерпретируется как кодировка символов документа, содержащего данный элемент FORM.
  • Атрибут name содержит название формы, на которое можно ссылаться в таблицах стилей и сценариях. Этот атрибут сохраняется только в целях совместимости со старыми обозревателями; в настоящее время рекомендуется использовать вместо него атрибут id.
  • Атрибут target используется только во фреймовых документах и задает имя фрейма, в котором должен отображаться отклик пересылки формы.

Кроме того, данный элемент поддерживает обработку двух нестандартных событий:

  • onsubmit — происходит при пересылке формы для обработки;
  • onreset — происходит при сбросе всех значений формы.

Следующий пример формы содержит поля ввода, переключатели и кнопки сброса и пересылки формы:

<FORM action="http://mysite.com/cgi-bin/adduser" method="post">
  <P>
  <LABEL for="firstname">Имя: </LABEL>
    <INPUT type="text" id="firstname"><BR>
  <LABEL for="lastname">Фамилия: </LABEL>
    <INPUT type="text" id="lastname"><BR>
  <LABEL for="email">E-mail: </LABEL>
    <INPUT type="text" id="email"><BR>
  <INPUT type="radio" name="sex" value="Male" checked="checked"> Мужчина<BR>
  <INPUT type="radio" name="sex" value="Female"> Женщина<BR>
  <INPUT type="submit" value="Send"> <INPUT type="reset">
  </P>
</FORM>

Отображаться эта форма будет примерно так:

Пример отображения формы

1.8.3. Ввод данных: элемент INPUT

Синтаксис: <INPUT> (содержимого и конечного тега нет)
Атрибуты:  id, class, style, title, lang, dir, события
           type = text | password | checkbox | radio | submit | reset |
                  file | hidden | image | button (тип ввода)
           name = CDATA (имя управляющего элемента)
           value = CDATA (начальное значение элемента)
           checked = checked (состояние выбран для флажков и переключателей)
           readonly = readonly (только чтение для текста и паролей)
           disabled = disabled (элемент запрещен)
           size = CDATA (начальная ширина элемента)
           maxlength = число (максимальное количество символов текста)
           src = URI (URI графического образа кнопки)
           alt = текст (альтернативный текст для кнопки)
           usemap = URI (URI клиентской карты ссылок)
           ismap = ismap (серверная карта ссылок)
           accesskey = символ (имя клавиши быстрого доступа)
           tabindex = число (номер в порядке нажатия табуляции)
           accept = типы файлов (список допустимых типов файлов)
           onfocus = сценарий (при получении элементом фокуса)
           onblur = сценарий (при потере элементом фокуса)
           onselect = сценарий (при выборе текста элемента)
           onchange = сценарий (при изменении значения элемента)
Поддержка:   Internet Explorer  Атрибуты accept, usemap и ismap игнорируются; клавиша, заданная в
              accesskey, должна нажиматься вместе с Alt (5.0+)
             Netscape Navigator  Атрибуты accept, alt, accesskey, tabindex, disabled, readonly,
              usemap и ismap игнорируются (4.0+)

Элемент INPUT создает управляющий элемент формы, предназначенный для ввода данных пользователем. Он может содержаться в любых блочных или текстовых элементах, кроме BUTTON, но многие обозреватели отображают его только тогда, когда он находится внутри элемента FORM. Данный элемент используется для создания различных управляющих элементов, в зависимости от значения атрибута type:

text
Однострочное поле ввода текста (принято по умолчанию). Атрибут value задает начальное значение текста, size — размер поля ввода в символах, а maxlength — максимально возможное количество символов в данном поле. Атрибут readonly запрещает изменение текста поля.
password
Поле ввода пароля. Единственное отличие от поля ввода текста состоит в том, что вводимые символы маскируются, обычно заменой на звездочки. Однако, введенная информация передается серверу как обычный текст, поэтому этот элемент не обеспечивает уровня безопасности, достаточного для передачи номеров кредитных карт или другой существенно важной информации.
checkbox
Флажок. Атрибут value задает значение этого элемента, когда он выбран, а атрибут checked — выбран ли первоначально.
radio
Переключатель. Атрибут value задает значение этого элемента, когда он выбран, а атрибут checked — выбран ли первоначально.
reset
Кнопка сброса формы. Необязательный атрибут value перекрывает текст кнопки, принятый по умолчанию.
submit
Кнопка пересылки формы. Необязательный атрибут value перекрывает текст кнопки, принятый по умолчанию. Если форма содержит несколько таких кнопок, то атрибут name используется для передачи имени кнопки обработчику формы, что позволяет последнему осуществлять различные действия в зависимости от того, какая из кнопок пересылки формы была нажата.
image
Графическая кнопка пересылки формы. Атрибут src задает URI графического образа кнопки, а alt — альтернативный текст надписи на кнопке. При щелчке мышью по такой кнопке происходит пересылка формы, причем координаты щелчка мыши передаются серверу в виде name.x=x-value и name.y=y-value, где name — имя кнопки, а x-value и y-value — координаты в пикселях относительно верхнего левого угла образа. Атрибут usemap указывает на клиентскую карту ссылок и его значением должно быть имя закладки, заданное атрибутом name соответствующего элемента MAP. Атрибут ismap указывает на серверную карту ссылок.
button
Кнопка общего вида. Атрибут value задает текст кнопки, а атрибут onclick должен задавать сценарий, вызываемый при нажатии этой кнопки.
file
Селектор файлов. Атрибут value задает начальное имя файла, но обозреватели обычно игнорируют его из соображений безопасности. Необязательный атрибут accept задает список типов файлов, разделенных запятыми, которые поддерживаются сервером обработчика формы. Этот список может использоваться для отфильтровки только допустимых файлов, но современные обозреватели обычно игнорируют этот атрибут. Форма, содержащая селектор файлов, должна иметь атрибуты method=post и enctype="multipart/form-data".
hidden
Скрытый элемент.

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

Необязательные атрибуты accesskey и tabindex применимы ко всем типам элементов, кроме скрытых:

  • Атрибут accesskey задает символ Unicode в качестве клавиши быстрого доступа к элементу.
  • Значением атрибута tabindex должно быть целое число в диапазоне от 0 до 32767. Это число задает номер данного элемента при движении по Веб-странице нажатиями клавиши Tab. Если tabindex равно 0 или не задано, то данный элемент получит фокус после всех элементом с положительным значением tabindex. При совпадении значений tabindex у нескольких элементов первым получает фокус тот, который раньше встречается в документе.

Данный элемент поддерживает обработку следующих нестандартных событий:

  • onfocus — происходит, когда элемент получает фокус;
  • onblur — происходит, когда элемент теряет фокус;
  • onselect — происходит, когда выбран текст в поле типа text или password;
  • onchange — происходит, когда элемент теряет фокус и его значение изменилось с момента предыдущего получения фокуса.

Примеры использования элемента INPUT приведены в предыдущем разделе.

1.8.4. Кнопки: элемент BUTTON

Синтаксис: <BUTTON>…</BUTTON> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           type = submit | reset | button (тип ввода)
           name = CDATA (имя управляющего элемента)
           value = CDATA (начальное значение кнопки)
           disabled = disabled (элемент запрещен)
           accesskey = символ (имя клавиши быстрого доступа)
           tabindex = число (номер в порядке нажатия табуляции)
           onfocus = сценарий (при получении элементом фокуса)
           onblur = сценарий (при потере элементом фокуса)
Поддержка:   Internet Explorer  Соответствует стандарту; клавиша, заданная в accesskey, должна
              нажиматься вместе с Alt (5.0+)
             Netscape Navigator  Не поддерживается

Элемент BUTTON создает кнопку формы. Он может содержать любые текстовые элементы, кроме A, BUTTON, IFRAME, INPUT, LABEL, SELECT и TEXTAREA, и любые блочные элементы, кроме FORM и FIELDSET. Он может содержаться в любых текстовых и блочных элементах, кроме BUTTON.

Кнопки, созданные этим элементом, подобны кнопкам, созданным элементом INPUT, но они могут иметь содержимое. Атрибут name задает имя данного управляющего элемента, а value — его начальное значение. Атрибут type задает тип кнопки:

submit
Кнопка пересылки формы (принято по умолчанию).
reset
Кнопка сброса формы.
button
Кнопка общего вида.

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

  • Атрибут accesskey задает символ Unicode в качестве клавиши быстрого доступа к элементу.
  • Значением атрибута tabindex должно быть целое число в диапазоне от 0 до 32767. Это число задает номер данного элемента при движении по Веб-странице нажатиями клавиши Tab. Если tabindex равно 0 или не задано, то данный элемент получит фокус после всех элементом с положительным значением tabindex. При совпадении значений tabindex у нескольких элементов первым получает фокус тот, который раньше встречается в документе.

Данный элемент поддерживает обработку следующих нестандартных событий:

  • onfocus — происходит, когда элемент получает фокус;
  • onblur — происходит, когда элемент теряет фокус.

Следующий пример является переработкой с использованием элемента BUTTON примера формы, приведенного выше:

<FORM action="http://mysite.com/cgi-bin/adduser" method="post">
  <P>
  <LABEL for="firstname">Имя: </LABEL>
    <INPUT type="text" id="firstname"><BR>
  <LABEL for="lastname">Фамилия: </LABEL>
    <INPUT type="text" id="lastname"><BR>
  <LABEL for="email">E-mail: </LABEL>
    <INPUT type="text" id="email"><BR>
  <INPUT type="radio" name="sex" value="Male" checked="checked"> Мужчина<BR>
  <INPUT type="radio" name="sex" value="Female"> Женщина<BR>
  <BUTTON name="submit" value="submit" type="submit">Послать</BUTTON>
  <BUTTON name="reset" type="reset">Сбросить</BUTTON>
  </P>
</FORM>

Отображаться эта форма будет примерно так:

Пример отображения формы

1.8.5. Меню: элементы SELECT, OPTGROUP и OPTION

Синтаксис: <SELECT>…</SELECT> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           name = CDATA (имя управляющего элемента)
           size = число (количество видимых опций)
           multiple = multiple (разрешает множественный выбор)
           disabled = disabled (элемент запрещен)
           tabindex = число (номер в порядке нажатия табуляции)
           onfocus = сценарий (при получении элементом фокуса)
           onblur = сценарий (при потере элементом фокуса)
           onchange = сценарий (при изменении значения элемента)
Поддержка:   Internet Explorer  Соответствует стандарту (5.0+)
             Netscape Navigator  Атрибуты disabled и tabindex игнорируются (4.0+)

Элемент SELECT создает управляющий элемент формы, предназначенный для выбора пользователем опций из списка. Обычно этот элемент отображается в виде выпадающего меню. Его содержимым могут быть только элементы OPTGROUP и OPTION, которые определяют соответствующий список опций. Он может содержаться в любых блочных и текстовых элементах, кроме BUTTON.

Атрибут name задает имя данного управляющего элемента. Атрибут size указывает обозревателям размер видимой части списка опций. Если общее количество опций больше, то обозреватель должен обеспечить прокрутку окна списка, чтобы обеспечить доступ ко всем опциям.

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

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

Значением атрибута tabindex должно быть целое число в диапазоне от 0 до 32767. Это число задает номер данного элемента при движении по Веб-странице нажатиями клавиши Tab. Если tabindex равно 0 или не задано, то данный элемент получит фокус после всех элементом с положительным значением tabindex. При совпадении значений tabindex у нескольких элементов первым получает фокус тот, который раньше встречается в документе.

Данный элемент поддерживает обработку следующих нестандартных событий:

  • onfocus — происходит, когда элемент получает фокус;
  • onblur — происходит, когда элемент теряет фокус;
  • onchange — происходит, когда элемент теряет фокус и его значение изменилось с момента предыдущего получения фокуса.
Синтаксис: <OPTGROUP>…</OPTGROUP> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           label = текст (метка группы опций)
           disabled = disabled (элемент запрещен)

Поддержка:   Internet Explorer  Не поддерживается
             Netscape Navigator  Не поддерживается
Синтаксис: <OPTION>…</OPTION> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           value = CDATA (имя опции)
           label = текст (метка опции)
           selected = selected (опция начально выбрана)
           disabled = disabled (элемент запрещен)
Поддержка:   Internet Explorer  Атрибуты disabled и label игнорируются (5.0+)
             Netscape Navigator  Атрибуты disabled и label игнорируются (4.0+)

Элементы OPTION и OPTGROUP предназначены для задания соответственно опций и групп опций. Они могут употребляться только внутри элемента SELECT. Элемент OPTGROUP может содержать только элементы OPTION, а элемент OPTION — только обычный текст (включая специальные символы).

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

Теперь рассмотрим элемент OPTION. Атрибут value задает имя этого элемента, которое используется при пересылке формы; если этого атрибута нет, то именем опции считается содержимое данного элемента. Атрибут selected указывает, что данная опция является выбранной в момент отображения меню. Меню может содержать только одну опцию с этим атрибутом, если у него нет атрибута multiple. Атрибут label задает текст опции, который отображается обозревателем; если этого атрибута нет, то отображается содержимое данного элемента. Атрибут disabled употребляется так же, как в элементе SELECT.

Пример меню, содержащего все три описанных элемента:

<FORM action="http://mysite.com/cgi-bin/selector" method="post">
  <P>Какой обозреватель вы используете?
  <SELECT name="browser">
    <OPTGROUP label="Netscape Navigator">
      <OPTION label="4.x или выше">Netscape Navigator 4.x или выше</OPTION>
      <OPTION label="3.x">Netscape Navigator 3.x</OPTION>
      <OPTION label="2.x">Netscape Navigator 2.x</OPTION>
      <OPTION label="1.x">Netscape Navigator 1.x</OPTION>
    </OPTGROUP>
    <OPTGROUP label="Microsoft Internet Explorer">
      <OPTION label="4.x или выше">Internet Explorer 4.x или выше</OPTION>
      <OPTION label="3.x">Internet Explorer 3.x</OPTION>
      <OPTION label="2.x">Internet Explorer 2.x</OPTION>
      <OPTION label="1.x">Internet Explorer 1.x</OPTION>
    </OPTGROUP>
    <OPTGROUP label="Opera">
      <OPTION label="3.x или выше">Opera 3.x или выше</OPTION>
      <OPTION label="2.x">Opera 2.x</OPTION>
    </OPTGROUP>
    <OPTION selected="selected">Прочие</OPTION>
  </SELECT>
  <INPUT type="submit" value="Send"> <INPUT type="reset">
  </P>
</FORM>

1.8.6. Многострочное текстовое поле: элемент TEXTAREA

Синтаксис: <TEXTAREA>…</TEXTAREA> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           name = CDATA (имя управляющего элемента)
           rows = число (количество видимых строк)
           cols = число (количество видимых столбцов)
           readonly = readonly (только чтение)
           disabled = disabled (элемент запрещен)
           accesskey = символ (имя клавиши быстрого доступа)
           tabindex = число (номер в порядке нажатия табуляции)
           onfocus = сценарий (при получении элементом фокуса)
           onblur = сценарий (при потере элементом фокуса)
           onselect = сценарий (при выборе текста элемента)
           onchange = сценарий (при изменении значения элемента)
Поддержка:   Internet Explorer  Соответствует стандарту; клавиша, заданная в accesskey, должна
              нажиматься вместе с Alt (5.0+)
             Netscape Navigator  Атрибуты readonly, disabled, accesskey и tabindex игнорируются (4.0+)

Элемент TEXTAREA создает управляющий элемент формы, предназначенный для многострочного ввода данных пользователем. Его содержимым должен быть обычный текст, включая специальные символы. Он может содержаться в любых блочных и текстовых элементах, кроме BUTTON. Содержимое элемента TEXTAREA задает начальное значение отображаемого текста. При пересылке формы атрибут name задает имя данного управляющего элемента, а текущее содержимое поля ввода — его значение.

Обязательные атрибуты rows и cols задают, соответственно, количество строк и столбцов окна обозревателя, которое занимает при отображении данный элемент. Эти атрибуты являются скорее рекомендацией обозревателю, чем строгим ограничением; пользователь может ввести больше текста, чем позволяют указанные атрибуты, поэтому обозреватели обеспечивают прокрутку поля ввода по горизонтали и вертикали. Теоретически обозреватели могут принимать ввод текста любого размера, но на практике этот размер обычно ограничен объемом в 32Кб или 64Кб. Необязательный атрибут readonly запрещает изменение первоначального содержимого поля.

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

  • Атрибут accesskey задает символ Unicode в качестве клавиши быстрого доступа к элементу.
  • Значением атрибута tabindex должно быть целое число в диапазоне от 0 до 32767. Это число задает номер данного элемента при движении по Веб-странице нажатиями клавиши Tab. Если tabindex равно 0 или не задано, то данный элемент получит фокус после всех элементом с положительным значением tabindex. При совпадении значений tabindex у нескольких элементов первым получает фокус тот, который раньше встречается в документе.

Данный элемент поддерживает обработку следующих нестандартных событий:

  • onfocus — происходит, когда элемент получает фокус;
  • onblur — происходит, когда элемент теряет фокус.
  • onselect — происходит, когда выбран текст в поле ввода;
  • onchange — происходит, когда элемент теряет фокус и его значение изменилось с момента предыдущего получения фокуса.

Пример использования элемента TEXTAREA приведен в п. 1.8.8.

1.8.7. Метки: элемент LABEL

Синтаксис: <LABEL>…</LABEL> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           for = IDREF (идентификатор управляющего элемента)
           accesskey = символ (имя клавиши быстрого доступа)
           onfocus = сценарий (при получении элементом фокуса)
           onblur = сценарий (при потере элементом фокуса)
Поддержка:   Internet Explorer  Соответствует стандарту; клавиша, заданная в accesskey, должна
              нажиматься вместе с Alt (5.0+)
             Netscape Navigator  Не поддерживается

Элемент LABEL создает текстовую метку для управляющего элемента формы. Его содержимым могут быть любые текстовые элементы, кроме LABEL. Он может содержаться в любых блочных и текстовых элементах, кроме BUTTON.

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

  • Мы можем указать в атрибуте for элемента LABEL идентификатор соответствующего управляющего элемента. В этом случае значение атрибута for должно совпадать со значением атрибута id управляющего элемента, например:
<FORM action="…" method="post">
<TABLE>
  <TR>
    <TD><LABEL for="fname">Имя</LABEL>
    <TD><INPUT type="text" name="firstname" id="fname">
  <TR>
    <TD><LABEL for="lname">Фамилия</LABEL>
    <TD><INPUT type="text" name="lastname" id="lname">
</TABLE>
</FORM>
  • Если элемент LABEL не имеет атрибута for, то ассоциированный с ним управляющий элемент должен быть его содержимым, например:
<FORM action="…" method="post">
<P>
  <LABEL>Имя
    <INPUT type="text" name="firstname">
  </LABEL>
  <LABEL>Фамилия
    <INPUT type="text" name="lastname">
  </LABEL>
</P>
</FORM>

Необязательный атрибут accesskey задает символ Unicode в качестве клавиши быстрого доступа к элементу.

Данный элемент поддерживает обработку следующих нестандартных событий:

  • onfocus — происходит, когда элемент получает фокус;
  • onblur — происходит, когда элемент теряет фокус.

1.8.8. Группы управляющих элементов: элементы FIELDSET и LEGEND

Синтаксис: <FIELDSET>…</FIELDSET> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события

Поддержка:   Internet Explorer  Соответствует стандарту (5.0+)
             Netscape Navigator  Не поддерживается
Синтаксис: <LEGEND>…</LEGEND> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
           accesskey = символ (имя клавиши быстрого доступа)
Поддержка:   Internet Explorer  Соответствует стандарту; клавиша, заданная в accesskey, должна
              нажиматься вместе с Alt (5.0+)
             Netscape Navigator  Не поддерживается

Элемент FIELDSET определяет группу управляющих элементов формы. Объединяя взаимосвязанные управляющие элементы в группы, авторы могут разбить форму на несколько частей, облегчая пользователю ее заполнение. Содержимым этого элемента является элемент LEGEND, задающий титул группы элементов, за которым могут следовать любые блочные и/или текстовые элементы, включая другой элемент FIELDSET. Он может содержаться в элементах BLOCKQUOTE, BODY, DD, DEL, DIV, FIELDSET, FORM, IFRAME, INS, LI, MAP, NOFRAMES, NOSCRIPT, OBJECT, TD и TH.

Элемент LEGEND задает титул группы элементов. Он может содержать любые текстовые элементы и может употребляться только в начале элемента FIELDSET. Необязательный атрибут accesskey задает символ Unicode в качестве клавиши быстрого доступа к элементу.

Пример формы, разбитой на три группы управляющих элементов:

<FORM action="…" method="post">
 <P>
 <FIELDSET>
  <LEGEND>Личная информация</LEGEND>
  Фамилия: <INPUT name="personal_lastname" type="text" tabindex="1">
  Имя: <INPUT name="personal_firstname" type="text" tabindex="2">
  Адрес: <INPUT name="personal_address" type="text" tabindex="3">
 </FIELDSET>
 <FIELDSET>
  <LEGEND>История болезни</LEGEND>
  <INPUT name="history_illness"
         type="checkbox"
         value="Smallpox" tabindex="20"> Оспа
  <INPUT name="history_illness"
         type="checkbox"
         value="Mumps" tabindex="21"> Свинка
  <INPUT name="history_illness"
         type="checkbox"
         value="Dizziness" tabindex="22"> Головокружение
  <INPUT name="history_illness"
         type="checkbox"
         value="Sneezing" tabindex="23"> Кашель
 </FIELDSET>
 <FIELDSET>
  <LEGEND>Текущее лечение</LEGEND>
  Принимаете ли вы сейчас какие-либо лекарства?
  <INPUT name="medication_now"
         type="radio"
         value="Yes" tabindex="35">Да
  <INPUT name="medication_now"
         type="radio"
         value="No" tabindex="35">Нет

  Если вы принимаете сейчас лекарства, перечислите их ниже:
  <TEXTAREA name="current_medication"
            rows="20" cols="50"
            tabindex="40">
  </TEXTAREA>
 </FIELDSET>
 </P>
</FORM>

Отображаться эта форма будет примерно так:

Пример отображения формы


WDH: HTML - Сценарии

Глава 1.9. Сценарии

1.9.1. Общее описание

Сценарий клиента — это программа, которая вызывается из HTML-документа или непосредственно в него вложена и исполняется на компьютере-клиенте. Сценарии позволяют авторам дополнить их HTML-документы динамически изменяемыми свойствами и интерактивными возможностями, а именно:

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

Существуют два типа сценариев, которые могут быть присоединены к HTML-документу:

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

1.9.2. Определение сценария: элемент SCRIPT

Синтаксис: <SCRIPT>…</SCRIPT>
Атрибуты:  type = тип файла (тип MIME языка сценария)
           charset = кодировка (кодировка символов)
           src = URI (URI внешнего сценария)
           defer = defer (только декларация)
Поддержка:   Internet Explorer  Атрибут charset игнорируется (5.0+)
             Netscape Navigator  Атрибуты charset и defer игнорируются (4.0+)

Элемент SCRIPT определяет сценарий клиента. Он может содержаться в элементе HEAD, а также в любых текстовых и блочных элементах тела документа. Его содержимым должен быть сценарий на языке программирования, заданном обязательным атрибутом type согласно приведенной ниже таблице 1.7.

На практике атрибут type используется редко, т. к. обозреватели Microscape поддерживают более удобный нестандартный атрибут language, имеющий то же самое назначение, но более удобный синтаксис:

Таблица 1.7. Языки программирования сценариев
Язык программирования | type | language
JavaScript (JScript) | "text/javascript" | "javascript"
PerlScript | "text/perlscript" | "perlscript"
TCL | "text/tcl" | "tcl"
VBScript | "text/vbscript" | "vbscript"

Атрибут type может быть опущен, если документ содержит метаописатель, задающий язык программирования сценариев, принятый по умолчанию, например <META http-equiv="Content-Script-Type" content="text/javascript">.

Сценарии подразделяются на вложенные и внешние. Вложенный сценарий размещается непосредственно внутри элемента SCRIPT; в этом случае атрибуты src и charset должны отсутствовать. Пример внутреннего сценария:

<SCRIPT type="text/javascript">
  document.write("<p><b>Hello World!<\/b>")
</SCRIPT>

Внешний сценарий хранится в отдельном файле; в этом случае атрибут src должен содержать URI этого файла, а атрибут charset может использоваться для задания его кодировки символов (обычно это "ISO-8859-1"). Обратите внимание, что в случае вложенного сценария атрибут charset игнорируется. Пример внешнего сценария:

<SCRIPT type="text/javascript" src="global/hello.js"></SCRIPT>

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

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

<SCRIPT type="text/javascript">
  <!-- начало сценария
    document.write("<p><b>Hello, World!<\/b>");
  // конец сценария -->
</SCRIPT>

Обратите внимание, что "-->" содержится в однострочном комменарии языка JavaScript, начинающемся с "//". Примеры таких комментариев для других языков программирования будут приведены ниже.

1.9.3. Альтернативное содержание: элемент NOSCRIPT

Синтаксис: <NOSCRIPT>…</NOSCRIPT> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Все атрибуты игнорируются (5.0+)
             Netscape Navigator  Все атрибуты игнорируются (4.0+)

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

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

Элемент NOSCRIPT может содержать любые блочные элементы. Он может содержаться в элементах BLOCKQUOTE, BODY, BUTTON, DD, DEL, DIV, FIELDSET, FORM, INS, LI, MAP, NOSCRIPT, OBJECT, TD и TH. Вообще говоря, полезность данного элемента невелика, так как сценарии обычно используются для динамического изменения Веб-страницы, которое невозможно достичь статическими средствами. Пример:

<SCRIPT type="text/vbscript">
 …сценарий на языке VBScript, вставляющий данные в документ…
</SCRIPT>
<NOSCRIPT>
 <P>Доступ к <A href="http://someplace.com/data">данным.</A></P>
</NOSCRIPT>

1.9.4. Языки программирования сценариев

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

WDH+ О том, как определить имена и версии установленных в системе языков, см. WDH+: Версии сценарных языков.

JavaScript (JScript)

JavaScript был разработан Бренданом Эйком (Brendan Eich) в Netscape Communications как язык сценариев для обозревателей Netscape Navigator, начиная с версии 2.0. В дальнейшем к развитию этого языка подключилась корпорация Microsoft, чьи обозреватели Internet Explorer поддерживают JavaScript, начиная с версии 3.0. Версия Microsoft получила название JScipt, поскольку JavaScript является зарегистрированной маркой фирмы Netscape. JavaScript — это единственный язык сценариев, поддержка которого встроена в наиболее популярные обозреватели, что делает его стандартом de facto для программирования сценариев. Подробное описание JavaScript приведено в Части III.

Пример сценария:

<SCRIPT type="text/javascript">
<!-- начало сценария
  document.write("Hello, world!");
// конец сценария -->
</SCRIPT>

PerlScript

Сценарная версия языка PERL, работающая на стороне клиента под управлением Microsoft Internet Explorer 4.0+ и на стороне сервера под управлением Microsoft Internet Information Server 3.0+. Для его использования в Веб-страницах необходимо установить PerlScript на каждом компьютере-клиенте, поэтому он может применяться только в интрасетях. Рекомендуется использовать PerlScript в тех случаях, когда Вам необходима интенсивная обработка символьных выражений. Его последнюю версию можно бесплатно загрузить с узла http://www.activestate.com/ActivePerl/ Внешняя ссылка.

Пример сценария:

<SCRIPT type="text/perlscript">
<!-- начало сценария
  $window->document->write('Hello, world!');
# конец сценария -->
</SCRIPT>

TCL (Tool Command Language)

TCL был разработан Джоном Аустерхаутом (John Ousterhout) в конце 80-х. Часто упоминается как TCL/TK, поскольку обычно используется совместно с пакетом создания пользовательских интерфейсов TK. Для его использования в Веб-страницах необходимо установить TCL на каждом компьютере-клиенте, поэтому он может применяться только в интрасетях. Рекомендуется использовать TCL в тех случаях, когда Вам необходимо построение сложных графических пользовательских интерфейсов. Его последнюю версию можно бесплатно загрузить с узла http://dev.scriptics.com/ Внешняя ссылка.

<SCRIPT type="text/tcl">
<!-- начало сценария
  document write("Hello, world!")
# конец сценария -->
</SCRIPT>

VBScript

Сценарная версия языка Microsoft Visual Basic. Поддерживается только обозревателем Microsoft Internet Explorer и большинством разработчиков воспринимается как порождение ностальгии Билла Гейтса по программистской юности.

Пример сценария:

<SCRIPT type="text/vbscript">
<!-- начало сценария
  Document.Write "Hello, World!"
' конец сценария -->
</SCRIPT>


WDH: HTML - Прочие элементы

Глава 1.10. Прочие элементы

1.10.1. Группировка элементов: элементы DIV и SPAN

Синтаксис: <DIV>…</DIV> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Синтаксис: <SPAN>…</SPAN> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (4.0+)

Элементы DIV и SPAN в сочетании с атрибутами id, class, style и lang предназначены для группировки элементов HTML-документа. Различие между ними состоит в том, что DIV является блочным элементом, а SPAN — текстовым. В остальном они никак не ограничивают отображение своего содержимого и могут использоваться для задания стиля группы элементов, их языка в атрибуте lang и т. п.

Элемент DIV может содержать любые блочные и текстовые элементы и может содержаться в элементах BLOCKQUOTE, BODY, BUTTON, DD, DEL, DIV, FIELDSET, FORM, INS, LI, MAP, NOSCRIPT, OBJECT, TD и TH. Элемент SPAN может содержать любые текстовые элементы и может содержаться в любых текстовых и блочных элементах.

Пример использования элемента DIV для задания стиля отображения:

<DIV style="text-align: center">
Это текст будет центрироваться в окне обозревателя.
</DIV>

Пример использования элемента SPAN для задания языка текстового фрагмента:

<P>Чарлз Буковски - <SPAN lang="fr">enfant terrible</SPAN> американской литературы.</P>

1.10.2. Горизонтальная черта: элемент HR

Синтаксис: <HR>…</HR> (блочный элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Атрибут dir игнорируется (5.0+)
             Netscape Navigator  Атрибут dir игнорируется (4.0+)

Элемент HR (horizontal rule) используется для вывода на экран горизонтальной черты, которая обычно используется в качестве разделителя разделов документа. Например, <HR style="color: red"> будет отображаться так (Netscape это свойство стилей не поддерживает!):

Для большей гибкости рекомендуется вместо элемента HR использовать свойства таблиц стилей border-bottom или border-top. Например, следующий элемент

<DIV style="border-top: solid thin red">…</DIV>

задает вывод такой же горизонтальной черты над группой элементов, содержащихся в DIV (Netscape Navigator 4.x это свойство стилей не поддерживает и черту не отображает!):

1.10.3. Контактная информация: элемент ADDRESS

Синтаксис: <ADDRESS>…</ADDRESS> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir, события
Поддержка:   Internet Explorer  Полное соответствие стандарту, отображается курсивом (5.0+)
             Netscape Navigator  Отображается курсивом, атрибут dir игнорируется (3.0+)

Элемент ADDRESS должен содержать контактную информацию о данном документе. Он обычно размещается в начале или конце документа и содержит имена автора документа, адреса их электронной почты и т .п. В строгом HTML-документе он может содержать только текстовые элементы; он может содержаться в элементах BLOCKQUOTE, BODY, BUTTON, DD, DEL, DIV, FIELDSET, FORM, INS, LI, MAP, NOSCRIPT, OBJECT, TD и TH. Обозреватели обычно отображают его курсивным шрифтом. Пример: элемент

<ADDRESS>Автор: Ю. С. Лукач<BR>
  E-mail: <A href="mailto:yury@suncloud.ru">yury@suncloud.ru</A></ADDRESS>

будет отображаться так:

Автор: Ю. С. Лукач
E-mail: yury@suncloud.ru

1.10.4. Направление вывода текста: элемент BDO

Синтаксис: <BDO>…</BDO> (текстовый элемент)
Атрибуты:  id, class, style, title, lang, dir
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Не поддерживается

Элемент BDO (BiDi override) предназначен для задания направления вывода содержащегося в нем текста. Направление задается обязательным атрибутом dir. Он может содержать любые текстовые элементы и содержаться в любых блочных и текстовых элементах.

Как указывалось в описании атрибута dir, всем символам в кодировке Unicode приписано направление, с тем, чтобы текст отображался правильно. Так, латинские и русские буквы выводятся слева направо, а еврейские и арабские — справа налево. Unicode определяет двунаправленный алгоритм, который должен применяться всякий раз, когда документ содержит символы, выводимые справа налево. Хотя обычно этот алгоритм дает правильное изображение текста, существуют ситуации, когда направление вывода текста приходится задавать явно с помощью элемента BDO.

Авторы могут использовать и иной способ явного задания направления вывода текста. Для этого соответствующий фрагмент текста должен начинаться с символа Unicode &#x202D; для вывода слева направо или с символа &#x202E; для вывода справа налево. Символ &#x202C; завершает такой фрагмент и вновь передает управлению двунаправленному алгоритму отображения символов.

Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Специальные символы Unicode не поддерживаются


WDH: HTML - XHTML: язык HTML как XML-приложение

Глава 1.11. XHTML: язык HTML как XML-приложение

1.11.1. Введение в XHTML

В январе 2000 г. W3C опубликовал рекомендацию XHTML 1.0 по переформулировке спецификации HTML 4 как XML-приложения. Язык XML будет нами подробно рассмотрен в Части VIII; здесь же приводится только резюме упомянутой рекомендации. В сравнении с HTML 4, XHTML обладает следующими преимуществами:

  • XHTML-документы соответствуют стандарту XML, и, следовательно, они могут просматриваться, редактироваться и проверяться на синтаксическую правильность стандартными средствами поддержки языка XML.
  • XHTML-документы могут отображаться как существующими обозревателями HTML-документов, так и новыми обозревателями, поддерживающими стандарт XHTML.
  • XHTML-документы могут обращаться к сценариям и аплетам, основанным на объектной модели документов (DOM).

С практической точки зрения преимущества XHTML таковы:

  • И разработчики документов, и разработчики обозревателей постоянно ищут новые способы выражения своих идей с помощью новых HTML-тегов. XML обеспечивает единый и простой способ создания новых элементов языка и их дополнительных атрибутов. XHTML призван унифицировать такие расширения языка HTML посредством XHTML-модулей, которые будут поддерживать комбинации существующих элементов HTML с новыми элементами при разработке и отображении документов.
  • Постоянно возникают все новые способы и средства доступа к Сети: карманные компьютеры и телевизионные приставки, сотовые телефоны и пейджеры. По некоторым оценкам, к 2002 г. 75% просмотра Веб-страниц будет осуществляться с помощью этих альтернативных средств. XHTML был разработан с ориентацией на обобщенный обозреватель, который в сочетании с механизмами словарей метаданных должен обеспечить оптимальное преобразование содержимого документа при его отображении, с тем, чтобы, в конце концов, перейти к разработке таких документов, которые будут адекватно отображаться любым обозревателем, поддерживающим стандарт XHTML.

По мнению создателей языка HTML, он, несмотря на его ошеломляющий успех, за прошедшее десятилетие полностью исчерпал себя и превратился в труднообозримого монстра, поддержка которого из-за чрезмерно разросшегося набора тегов становится все более затруднительной. По этой причине история HTML заканчивается его четвертой версией; HTML 5 никогда создан не будет — точнее говоря, таковым можно считать XHTML 1.0, который начинает новую эпоху языков для Веб-документов, основанную на едином протоязыке XML, обеспечивающем своим приложениям расширяемость и переносимость.

1.11.2. Структура XHTML-документа

XHTML-документ имеет следующую структуру:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Заголовок документа</title>
</head>
<body>
...
</body>
</html>

Из этого примера видно, что XHML-документ состоит из следующих компонентов:

  • Декларация XML-документа (первая строка примера). Эта строка не является обязательной согласно стандарту XML, но W3C рекомендует всегда включать ее в начало XHTML-документа. Если же кодировка символов документа отлична от UTF-8 или UTF-16, то XML-декларация становится обязательной и должна содержать название кодировки символов в атрибуте encoding.
  • Декларация типа документа (вторая строка примера). Эта декларация является обязательной и может принимать одно из трех значений, которые соответствуют трем декларациям типов HTML-документов:
    • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
  "DTD/xhtml1-frameset.dtd">
  • Корневой элемент документа (остальные строки примера). Этим элементом является html с обязательным атрибутом xmlns, задающим пространство имен XHTML-документа. Значением xmlns должна быть строка "http://www.w3.org/1999/xhtml". Кроме того, для задания языка документа должны использоваться и атрибут lang, и атрибут xml:lang, как показано в примере.

1.11.3. Отличия от HTML

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

  • Каждый элемент должен иметь конечный тег, даже если стандарт HTML говорит, что он не обязателен. Если элемент не имеет конечного тега и содержимого, то его начальный тег должен оканчиваться на />, например <br />, <hr />, <img src="picture.jpg" alt="рисунок" />. Пробел перед дробной чертой не обязателен, но рекомендуется для совместимости с сегодняшними Веб-обозревателями.
  • Элементы должны либо следовать друг за другом, либо быть вложены один в другой, как это было рекомендовано в п. 1.1.2.1, хотя до сих пор Веб-обозреватели либерально относились к неправильному вложению элементов друг в друга.
  • Названия элементов и атрибутов HTML должны писаться строчными буквами, т. к. язык XML различает регистры, и в нем <body> и <BODY> — это различные теги.
  • Значения атрибутов всегда должны заключаться в кавычки (ср. п. 1.1.2.2). Не допускается краткая запись атрибутов вида <option selected>. Атрибут всегда должен иметь значение, в данном случае: <option selected="selected">.
  • Значения атрибутов нормализуются согласно стандарту XML. Это означает, что из них удаляются начальные и конечные пробелы, а каждая последовательность пробелов внутри значения атрибутов (включая разрывы строк) заменяется на один символ пробела.
  • Если элементы style или script содержат специальные символы, то их содержимое следует заключать в маркированную секцию CDATA, иначе процессор XML преобразует специальные символы в их эквиваленты до обработки обозревателем соответствующей таблицы стилей или сценария:
    <script>
 <![CDATA[
 …содержимое сценария…
 ]]>
 </script>

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

  • Атрибут name элементов a, form, frame, iframe, img и map объявлен в XHTML морально устаревшим; вместо него должен использоваться атрибут id. Более того, всюду в XHTML-документах для создания закладок следует пользоваться атрибутом id, например: <a id="myid">…</a>.

1.11.4. Обеспечение совместимости

Для того, чтобы XHTML-документ правильно отображался Веб-обозревателями, рекомендуется соблюдать следующие правила:

  • Поскольку XML-приложения пока не имеют зарегистрированного типа MIME, для XHTML-документов следует использовать тип "text/html" в метаописателе <META http-equiv="Content-Type" content="text/html; charset=windows-1251" />. Для задания кодировки символов документа следует указывать и этот метаописатель, и XML-декларацию <?xml version="1.0" encoding="WINDOWS-1251"?>. Помните, что XML-декларация имеет приоритет перед HTML-декларацией кодировки символов.
  • Для задания языка элемента должны использоваться и атрибут lang, и атрибут xml:lang, причем атрибут xml:lang имеет приоритет.
  • Если значение атрибута содержит символ амперсанта "&", то его следует заменить на соответствующий специальный символ &amp;. Например, если атрибут href элемента указывает на CGI-сценарий, принимающий параметры, то он должен записываться как http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;name=user, а не http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user.

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

  • Названия элементов и атрибутов CSS должны писаться строчными буквами.
  • Если ваша таблица стилей содержит свойства для элемента tbody, то таблицы в XHTML-документе должны явно содержать этот элемент (HTML добавляет его по умолчанию, а XML нет).
  • Обращайте внимание на те случаи, когда стандарт CSS по-разному определяет правила разбора свойств для HTML-документов и для XML-документов.


WDH: CSS - Введение в таблицы стилей

Часть II.
Каскадные таблицы стилей: язык CSS

"Le style c'est l'homme meme."
"Стиль — это сам человек."

Ж. Бюффон, "Рассуждение о стиле"

Глава 2.1. Введение в таблицы стилей

2.1.1. Что такое CSS?

В декабре 1996 г. W3C стандартизовал первый уровень каскадных таблиц стилей (CSS1), который определил правила описания стилей визуального отображения элементов HTML-документов. В мае 1998 г. им была принят стандарт второго уровня таблиц стилей (CSS2), который существенно расширил возможности таблиц стилей. Основными особенностями CSS2 являются следующие:

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

В основу данной части нашего справочника положен именно стандарт CSS2.

Цель создания каскадных таблиц стилей состояла в том, чтобы отделить структуру документа (описанную на языке HTML или подмножестве XML) от правил его отображения на различных устройствах (задаваемых таблицами CSS). Чтобы пояснить это утверждение, рассмотрим следующий пример HTML-документа:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Моя домашняя страница</TITLE>
<STYLE type="text/css">
<!-- скрыть стили CSS от старых обозревателей
  BODY { color: blue }
  H1 { color: red }
-->
</STYLE>
</HEAD>
<BODY>
<H1>Моя домашняя страница</H1>
<P>Добро пожаловать!</P>
</BODY>
</HTML>

Этот документ содержит элемент STYLE, содержащий два правила CSS: первое из них определяет, что цвет отображения элемента BODY должен быть красным, а второе — что цвет отображения элемента H1 должен быть синим. Поскольку стиль отображения элемента P не задан, он унаследует стиль своего родительского элемента, в данном случае элемента BODY. В результате данный HTML-документ будет отображаться так:

Моя домашняя страница

Добро пожаловать!

Теперь для изменения стиля отображения этого документа нам достаточно менять только содержимое элемента STYLE, не внося никаких модификаций в остальной HTML-документ. Для большей гибкости мы можем создать текстовый файл STYLE.CSS и перенести в него описание стилей:

BODY { color: blue }
H1 { color: red }

HTML-документ после этого следует изменить следующим образом:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Моя домашняя страница</TITLE>
<LINK rel="stylesheet" href="style.css" type="text/css">
</HEAD>
<BODY>
<H1>Моя домашняя страница</H1>
<P>Добро пожаловать!</P>
</BODY>
</HTML>

В дальнейшем для изменения стилей мы будем изменять только файл STYLE.CSS, не касаясь головного HTML-документа.

Теперь представим этот документ в виде дерева и введем соответствующую терминологию, которая будет нам необходима в дальнейшем изложении:

Дерево элементов HTML-документа

Корнем этого дерева является элемент HTML, который имеет двух сыновей — HEAD и BODY. Элемент HEAD является отцом элемента TITLE, а элемент BODY — отцом элементов H1 и P (два последних элемента называются братьями, причем H1 является старшим братом, а P — младшим). Все элементы дерева являются потомками корня, а тот является их предком. Таким образом можно представить в виде дерева любой документ, к которому применимы правила языка CSS.

2.1.2. Включение таблиц стилей в HTML-документ

Имеется три способа задания стилей в HTML-документе. Перечислим их в порядке предпочтения.

2.1.2.1. Внешние таблицы стилей

Для подключения к документу внешней таблицы стилей (т. е. таблицы стилей, хранящейся в отдельном файле) следует поместить в заголовок документа элемент LINK, как показано выше, например:

<LINK rel="stylesheet" href="style.css" type="text/css">

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

<LINK rel="stylesheet" href="style.css" type="text/css" media="screen, print">

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

2.1.2.2. Внутренние таблицы стилей

Для включения в документ внутренней таблицы стилей следует поместить в заголовок документа элемент STYLE. Пример:

<HEAD>
  <STYLE type="text/css">
  <!--
    H1 {border-width: 1; border: solid; text-align: center}
  -->
  </STYLE>
</HEAD>
<BODY>
  <H1>Этот заголовок имеет указанный выше стиль</H1>
</BODY>

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

2.1.2.3. Таблицы стилей элементов

Последним способом задания стилей является определения таблицы стилей отдельного элемента путем задания его атрибута style. Например, стиль элемента H1 из предыдущего примера мог бы быть задан и так:

<H1 style="border-width: 1; border: solid; text-align: center">
  Этот заголовок имеет указанный стиль</H1>

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

2.1.3. Синтаксис CSS

2.1.3.1. Кодировка символов

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

  • сначала анализируется charset в поле Content-Type метаописателя HTML-документа;
  • если его нет, то директива @charset;
  • если ее нет, то ссылка на таблицу стилей в документе (например, атрибут charset элемента LINK).

Для включения в таблицу стилей символов, отсутствующих в данной кодировке. следует использовать формат "\xxxx", где xxxx — шестнадцатеричный код символа в Unicode. Например, код "\410" задает прописную русскую букву А.

2.1.3.2. Директива @charset

Директива @charset задает кодировку символов таблицы стилей, например:

@charset "ISO-8859-1";

Данная директива должна быть первой в таблице стилей, причем таблица должна содержать не более одной директивы @charset. Список допустимых кодировок символов приведен в Приложении 7, но обозреватель не обязан поддерживать все перечисленные там кодировки.

Поддержка:    Internet Explorer  Соответствует стандарту (5.0+)
              Netscape Navigator  Не поддерживается

2.1.3.3. Операторы, директивы и правила

Таблица стилей состоит из набора операторов. При этом каждый оператор является либо директивой, либо правилом. Операторы могут разделяться пробелами. В CSS пробелами считаются только следующие символы Unicode: пробел (код 32), табуляция (код 9), перевод строки (код 10), возврат каретки (код 13) и перевод формата (код 12).

Директива (at-rule) начинается с символа at (@) и соответствующего ключевого слова. CSS2 содержит следующие директивы:

Таблица 2.1. Директивы языка CSS
@charset | Задает кодировку символов.
@font-face | Задает описания шрифтов.
@import | Включает другую таблицу стилей в текущую.
@media | Задает имена устройств отображения.
@page | Задает свойства страницы для печати.

Примеры директив:

@import "subs.css";
@media print {
  BODY { font-size: 10pt }
}

Правило (rule) состоит из селектора и блока деклараций, заключенного в фигурные скобки, например:

H1 {
  font-weight: bold;
  font-size: 12pt;
  font-family: Helvetica;
  font-variant: normal;
  font-style: normal
}

Здесь H1 — это селектор, за которым следует блок деклараций. Каждая декларация, как видно из данного примера, состоит из названия свойства (например, font-weight), символа двоеточия (:) и значения свойства (например, bold). Декларации должны разделяться точкой с запятой (;).

Отметим, что согласно определению CSS все его элементы не зависят от регистра. Таким образом мы можем писать h1 вместо H1, Font-Weight вместо font-weight и т .д. Тем не менее в целях единообразия в данном справочнике мы пишем имена селекторов прописными буквами, а названия свойств — строчными. Значения свойств, которые в документе могут зависеть от регистра, определяются языком документа. Так, названия тегов HTML не зависят от регистра, а названия тегов XML — зависят.

Таблицы стилей могут содержать комментарии. Комментарий начинается с символов /* и заканчивается символами */. Вложенные комментарии не допускаются. Пример:

H1 {
  font-weight: bold;	  /* жирность шрифта */
  font-size: 12pt;	  /* размер шрифта */
  font-family: Helvetica; /* название шрифта */
  font-variant: normal;	  /* вариант шрифта */
  font-style: normal	  /* стиль шрифта */
}

2.1.4. Типы данных CSS

Значения свойств CSS могут быть следующих типов.

Целые и действительные числа

Некоторые свойства могут иметь целые (далее обозначаются как <целое>) или действительные (далее обозначаются как <число>) значения. Эти значения могут записываться только в десятичной нотации. Целое число состоит из одной или более десятичных цифр 0-9. Действительное число либо является целым, либо состоит из нуля или более десятичных цифр, за которыми следует точка (.) и одна или более десятичных цифр. И перед целыми, и перед действительными числами может стоять знак: плюс (+) или минус (-). Примеры:

Целые числа | Действительные числа
101 | 101
-21 | 1.234567
1234567 | -.999

Размеры

Размеры (далее обозначаются как <размер>) указывают на вертикальный или горизонтальный размеры чего-либо. Размер задается как <число>, за которым следует единица измерения. Если размер равен 0, то единицу измерения можно не указывать.

Единицы измерения подразделяются на абсолютные и относительные. Абсолютные единицы измерения задают точный физический размер, а относительные — указывают размер относительно другого размера. Их описания сведены в следующие таблицы:

Таблица 2.2. Абсолютные единицы измерения
in | дюймы (1 дюйм = 2.54 см = 25.4 мм = 72 точки = 6 пик)
cm | сантиметры (1 см = 10 мм = 0.39 дюйма = 2.36 пики = 28.35 точки)
mm | миллиметры (1 мм = 0.1 см = 0.039 дюйма = 0.24 пики = 2.84 точки)
pt | точки (1 точка = 1/12 пики = 1/72 дюйма = 0.035 см = 0.35 мм)
pc | пики (1 пика = 12 точек = 1/6 дюйма = 0.423 см = 4.23 мм)
Таблица 2.3. Относительные единицы измерения
em | размер (font-size) соответствующего шрифта
ex | высота строчных букв (x-height) соответствующего шрифта
px | пиксели (размер зависит от устройства отображения)

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

Единицы em и ex основываются на размере шрифта того элемента, к которому относится данная декларация. При этом em задает размер шрифта, т. е. размер его наибольшей буквы (обычно это буква 'M', отсюда аббревиатура em), а ex — высоту строчных букв шрифта (обычно это высота буквы 'x', отсюда английское название x-height и аббревиатура ex). С другой стороны, единица px основана на размере пикселя устройства отображения (обычно это дисплей). Пиксель — это точка дисплея и ее размер зависит как от физических размеров экрана, так и от его разрешения: пиксель на экране с разрешением 640x480 будет больше, чем на экране с разрешением 1280x1024. Примеры задания размеров:

H1 { margin: 0.5em }
H1 { text-indent: 1ex }
H3 { font-size: 12px }
H1 { margin: 0.5in }
H2 { line-height: 3cm }
H3 { word-spacing: 4mm }
H4 { font-size: 12pt }
H4 { font-size: 1pc }

Процентные значения

Процентные значения (далее обозначаются как <процент>) указывают на величину чего-либо в процентах от другой величины. Они задаются как <число>, за которым следует символ процента (%), например:

H1 { font-size: 120% }

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

URI

Этот тип значений (далее обозначаемый как <uri>) задает ссылку на унифицированные идентификаторы ресурсов. URI задается в форме url(URI), например:

BODY { background: url(http://mysite.com/bg.gif) }

Текст внутри url() можно заключить в апострофы или кавычки — это ничего не изменит, например:

BODY { background: url("http://mysite.com/bg.gif") }

Цвета

Цветовые значения (далее обозначаются как <цвет>) могут задаваться либо шестнадцатеричным числом с префиксом "#" вида "#rrggbb", задающим RGB-код цвета, либо одним из 16-ти символических имен, приведенных в Таблице П9.1. CSS допускает использование краткой формы RGB-кодов вида "#rgb"; при этом краткая форма преобразуется в полную повторением цифр, а не добавлением нулей. Иными словами, код #FA1 соответствует полному коду #FFAA11. Кроме того, RGB-код цвета может быть задан конструкцией rgb(r,g,b), например, следующие декларации задают один и тот же красный цвет:

EM { color: red }               /* название цвета */
EM { color: #f00 }              /* #rgb */
EM { color: #ff0000 }           /* #rrggbb */
EM { color: rgb(255,0,0) }      /* целые в диапазоне 0 до 255 */
EM { color: rgb(100%,0%,0%) }   /* действительные в диапазоне от 0.0% до 100.0% */

Примечание. Обозреватели Microscape дополнительно поддерживают имена цветов, перечисленные в Таблице П9.2, но мы рекомендуем использовать вместо них соответствующие шестнадцатеричные значения.

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

Таблица 2.4. Системные цвета CSS
activeborder | Цвет рамки активного окна | inactivecaptiontext | Цвет текста заголовка неактивного окна
activecaption | Цвет фона заголовка активного окна | infobackground | Цвет фона подсказок (tooltips)
appworkspace | Цвет фона многооконной программы | infotext | Цвет текста подсказок (tooltips)
background | Цвет фона системной подложки (desktop) | menu | Цвет фона меню
buttonface | Цвет трехмерных кнопок | menutext | Цвет текста меню
buttonhighlight | Цвет выделенных трехмерных кнопок | scrollbar | Цвет фона полос прокрутки
buttonshadow | Цвет тени трехмерных кнопок | threeddarkshadow | Темная тень трехмерных элементов
buttontext | Цвет текста трехмерных кнопок | threedface | Цвет трехмерных элементов
captiontext | Цвет текста заголовков | threedhighlight | Цвет выделенных трехмерных элементов
graytext | Серый цвет (для запрещенных элементов) | threedlightshadow | Светлая тень трехмерных элементов
highlight | Цвет фона выделенных элементов | threedshadow | Тень трехмерных элементов
highlighttext | Цвет текста выделенных элементов | window | Цвет фона окон
inactiveborder | Цвет рамки неактивного окна | windowframe | Цвет фрейма окон
inactivecaption | Цвет фона заголовка неактивного окна | windowtext | Цвет текста в окнах

Строки

Текстовые строки (далее обозначаются как <строка>) могут быть заключены либо в кавычки, либо в апострофы. При этом если строка заключена в кавычки, для включения в нее символа кавычки нужно использовать форму \" или \22. Аналогично, если строка заключена в апострофы, для включения в нее символа апострофа нужно использовать форму \' или \27. Для включения в строку символа новой строки используется форма \A (код перевода строки в Unicode). Примеры текстовых строк:

"это 'строка'"
'это \'строка\''
'это "строка"'
"это \"строка\""
"это строка,\A состоящая из двух строк"

Счетчики

Счетчики (далее обозначаются как <счетчик>) обозначаются идентификаторами. Для извлечения значения счетчика используются обозначения counter(идентификатор) или counter(идентификатор, стиль). По умолчанию стиль равен decimal. Для доступа ко всем счетчикам с данным именем используются обозначения counters(идентификатор, строка) или counters(идентификатор,строка, стиль). Последняя функция возвращает значения всех счетчиков с данным именем, существующих в данный момент, разделенных текстом строка.

Доступ к значению счетчиков возможен только из свойства content. Подробности см. в п. 2.11.3.

Угловые величины

Угловые величины (далее обозначаются как <угол>) используются в звуковых таблицах стилей для задания пространственных характеристик звука. Угол задается как <число>, за которым следует угловая единица измерения. Если угол равен 0, то единицу измерения можно не указывать. CSS поддерживает следующие единицы измерения углов:

deg | градусы
grad | грады
rad | радианы

Эти единицы соотносятся следующим образом: 90 градусов = 100 градов = 1.570796326794897 радиан. Примеры угловых величин:

H1 { azimuth: 45deg }
P { azimuth: -10deg }
H1 { elevation: 100grad }
P { elevation: 3.14rad }

Времена

Времена (далее обозначаются как <время>) используются в звуковых таблицах стилей для задания временных характеристик звука. Время задается как <число>, за которым следует единица измерения времени. Если время равно 0, то единицу измерения можно не указывать. CSS поддерживает следующие единицы измерения времени:

ms | миллисекунды (1 мс = 0.001 с)
s | секунды (1с = 1000 мс)

Времена не могут быть отрицательными. Примеры:

H1 { pause-before: 1s }
P { pause: 20ms }

Частоты

Частоты (далее обозначаются как <частота>) используются в звуковых таблицах стилей для задания частотных характеристик звука. Частота задается как <число>, за которым следует единица измерения частоты. Если частота равна 0, то единицу измерения можно не указывать. CSS поддерживает следующие единицы измерения частот:

hz | герцы (1 Гц = 0.001 кГц)
khz | килогерцы (1 кГц = 1000 Гц)

Частоты не могут быть отрицательными. Примеры:

H1 { pitch: 200hz }	/* басовый звук */
P { pitch: 6khz }	/* дрожащий звук */

2.1.5. Типы устройств отображения

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

  • визуальные, звуковые и тактильные устройства;
  • непрерывные и страничные устройства;
  • символьные и графические устройства;
  • интерактивные и статические устройства;
  • all — все устройства.

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

Таблица 2.5. Типы устройств отображения
Устройство | Группы устройств
 | визуальное/ звуковое/ тактильное | непрерывное/ страничное | символьное/ графическое | интерактивное/ статическое
aural | звуковое | непрерывное | — | и то, и другое
braille | тактильное | непрерывное | символьное | и то, и другое
emboss | тактильное | страничное | символьное | и то, и другое
handheld | визуальное | и то, и другое | и то, и другое | и то, и другое
print | визуальное | страничное | графическое | статическое
projection | визуальное | страничное | графическое | статическое
screen | визуальное | непрерывное | графическое | и то, и другое
tty | визуальное | непрерывное | символьное | и то, и другое
tv | визуальное, звуковое | и то, и другое | графическое | и то, и другое

2.1.6. Директива @media

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

@media print {
  BODY { font-size: 10pt }
}
@media screen {
  BODY { font-size: 12pt }
}
@media screen, print {
  BODY { line-height: 1.2 }
}
Поддержка:    Internet Explorer  Только устройства screen, print и all (5.0+)
              Netscape Navigator  Не поддерживается


WDH: CSS - Селекторы, псевдоклассы и псевдоэлементы

Глава 2.2. Селекторы, псевдоклассы и псевдоэлементы

2.2.1. Базовые селекторы

Как было сказано выше, каждое правило CSS состоит из селектора и набора деклараций. Декларации определяют свойства отображения, а селектор указывает, к каким именно элементам документа именно эти декларации должны применяться (такие элементы называются субъектами этого селектора). Начнем с формального определения селекторов.

Базовый селектор
Универсальный селектор или селектор типа.
Универсальный селектор
Символ звездочка (*), означающий, что его субъектами являются все элементы документа. Если звездочка является не единственной составляющей селектора, то она может опускаться.
Селектор типа
Совпадает с именем элемента в документе и указывает, что его субъектами являются все элементы документа с данным именем.
Простой селектор
Базовый селектор, за которым следуют нуль или более селекторов атрибутов, селекторов идентификаторов или псевдоклассов (в любом порядке).
Составной селектор
Образуется из простых селекторов соединением их с помощью специальных символов.

Как мы видим, основу этих определений составляют базовые селекторы. Поясним их определения примерами:

* { font-family: sans-serif }	/* Применяется ко всем элементам документа */
H1 { font-family: sans-serif }	/* Применяется ко всем элементам H1 */

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

H1 { font-family: sans-serif }
H2 { font-family: sans-serif }
H3 { font-family: sans-serif }

эквивалентен одному правилу

H1, H2, H3 { font-family: sans-serif }
Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Не поддерживает универсальные селекторы (4.0+)

2.2.2. Селекторы классов

Для HTML-документов CSS поддерживает селекторы классов, которые основаны на использовании атрибута class и имеют вид element.class. Пусть, например, наша таблица стилей содержит правило

P.warning { font-style: italic }

Тогда следующий элемент HTML-документа

<P class="warning">Рекомендуется выбирать названия классов,
  отражающие их назначение.</P>

будет отображаться курсивным шрифтом:

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

Селектор класса может не содержать названия элемента, например

.warning { font-style: italic }

Такое правило относится ко всем элементам, имеющим атрибут class="warning".

Примечание. Селектор класса, не содержащий имени элемента, следует понимать как селектор *.class, в котором универсальный селектор * опущен.

CSS позволяет задавать и подмножества значения атрибута class, например правило

P.warning.red { font-style: italic }

будет применимо к элементам с атрибутом class="warning red blue", но не применимо к элементам с атрибутом class="warning blue".

Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Не поддерживает множественные классы (4.0+)

2.2.3. Селекторы идентификаторов

Документы могут содержать элементы с атрибутами ID, задающими уникальные идентификаторы этих элементов. Для HTML-документов это атрибут id, в приложениях XML название соответствующего атрибута определяется приложением. Соответствующий селектор идентификатора в CSS имеет вид element#id или просто #id.

Примечание. Селектор идентификатора, не содержащий имени элемента, следует понимать как селектор *#id, в котором универсальный селектор * опущен.

В примере

<HEAD>
  <STYLE type="text/css">
    #p001 { letter-spacing: 0.3em }
  </STYLE>
</HEAD>
<BODY>
   <P id="p001">Разреженный текст</P>
</BODY>

правило стиля будет применено к элементу P с атрибутом id="p001". С другой стороны, в следующем примере

<HEAD>
  <STYLE type="text/css">
    H1#p001 { letter-spacing: 0.3em }
  </STYLE>
</HEAD>
<BODY>
   <P id="p001">Широкий текст</P>
</BODY>

правило стиля применимо только к элементу H1 с атрибутом id="p001" и поэтому не будет применено к элементу P с этим атрибутом.

Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Полное соответствие стандарту (4.0+)

2.2.4. Селекторы атрибутов

Теперь рассмотрим простые селекторы, которые являются уточнением базовых селекторов. Выше мы уже познакомились с двумя типами простых селекторов, которые применяются для задания стилей HTML-документов: селекторы классов и селекторы идентификаторов. Здесь мы познакомимся еще с одной группой селекторов, а именно с селекторами атрибутов. Эти селекторы обладают мощным и гибким синтаксисом и предназначены для работы с любыми документами, которые поддерживаются языком CSS. К сожалению, они пока не поддерживаются Веб-обозревателями. Существуют четыре вида селекторов атрибутов:

[attr]
Применяется ко всем элементам, имеющим атрибут attr, независимо от его значения.
[attr=value]
Применяется ко всем элементам, чей атрибут attr имеет значение value.
[attr~=value]
Применяется ко всем элементам, чей атрибут attr имеет состоит из списка значений, разделенных пробелами, и одно из этих значений равно value.
[attr|=value]
Применяется ко всем элементам, чей атрибут attr имеет значение, состоящее из нескольких "слов", разделенных дефисом, причем первое из этих слов равно value (первоначально предназначалось для выделения кода основного языка из полного кода языка).

Значения атрибутов должны быть идентификаторами или текстовыми строками. Зависят ли они от регистра, определяется языком документа. Приведем примеры.

H1[title] { color: blue }		/* Применяется ко всем элементам H1, */
                    /* имеющим атрибут title */
SPAN[class="example"] { color: blue }	/* Применяется ко всем элементам SPAN, */
                    /* имеющим атрибут class="example" */
SPAN[class~="example"] { color: blue }	/* Эквивалентно селектору SPAN.example */
*[lang="fr"] { display: none }		/* Применяется ко всем элементам, */
                    /* имеющим атрибут lang="fr" */
*[lang|="en"] { color: red }		/* Применяется ко всем элементам, у которых */
                    /* атрибут lang начинается с "en" (например, */
                    /* "en-us" или "us-gb") */
Поддержка:   Internet Explorer  Не поддерживаются
             Netscape Navigator  Не поддерживаются

2.2.5. Селекторы потомков

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

H1 { color: red }
EM { color: red }
H1 EM { color: blue }

Здесь первые два правила определяют стили отображения для всех элементов H1 и EM соответственно, а третье правило как раз и решает нашу задачу. Таким образом, для задания селектора потомка достаточно образовать селектор из селектора, задающего предка, и селектора, задающего потомка, разделив их пробелом. Рассмотрим еще один пример:

DIV * EM { color: blue }

Данное правило будет применяться ко всем элементам EM, которые находятся внутри любых элементов (универсальный селектор), которые заключены в элемент DIV.

Поддержка:   Internet Explorer  Полное соответствие стандарту (5.0+)
             Netscape Navigator  Не поддерживает универсальные селекторы (4.0+)

2.2.6. Селекторы детей

CSS поддерживает использование селекторов детей, т. е. селекторов тех элементов, которые являются детьми другого элемента в дереве документа. Селекторы детей образуются путем соединения нескольких селекторов символом ">". Следующее правило будет применяться ко всем элементам P, которые являются детьми элемента BODY (иными словами, оно применимо к тем и только тем элементам P, которые находятся внутри элемента BODY, и никакого промежуточного элемента между BODY и P нет):

BODY > P { text-indent: 3em }

В следующем примере сочетаются селекторы потомков и селекторы детей:

DIV OL>LI P { line-height: 1.5 }

Субъектом этого правила будет элемент P, который является потомком элемента LI, который является ребенком элемента OL, который является потомком элемента DIV. Обратите внимание, что необязательные пробелы вокруг символа ">" в этом примере опущены.

Поддержка:   Internet Explorer  Не поддерживаются
             Netscape Navigator  Не поддерживаются

2.2.7. Селекторы соседей

CSS поддерживает использование селекторов соседей, т. е. селекторов тех элементов, которые являются братьями в дереве документа и расположены в документе непосредственно друг за другом. Селекторы соседей образуются путем соединения нескольких селекторов символом "+". Следующее правило уменьшает расстояние между элементами H1 и H2, если H2 непосредственно следует в документе за H1:

H1 + H2 { margin-top: -5mm }

Приведем аналогичный пример, но в нем элемент H1 должен относиться иметь атрибут class="opener":

H1.opener + H2 { margin-top: -5mm }
Поддержка:   Internet Explorer  Не поддерживаются
             Netscape Navigator  Не поддерживаются

2.2.8. Псевдоэлементы и псевдоклассы

Все рассмотренные до сих пор селекторы основывались на положении элемента в дереве документа. Однако, для некоторых целей отображения данных одного дерева недостаточно. С этой целью в CSS были включены понятия псевдоэлементов и псевдоклассов, обеспечивающие возможности отображения документа, не описываемые в терминах дерева документа. Разница между этими понятиями состоит в том, что псевдоклассы могут употребляться в любом месте селектора, а псевдоэлементы только после субъекта селектора.

2.2.9. Псевдоклассы

2.2.9.1. Псевдокласс :first-child

Псевдокласс :first-child соответствует элементу, который является первым ребенком данного элемента. В следующем примере субъектами селектора будут те элементы P, которые являются первым ребенком элемента DIV:

DIV > P:first-child { text-indent: 3em }

В результате первый элемент P внутри DIV в следующем фрагменте будет выводиться с отступом в начале текста

<P>Последний абзац перед примечанием.</P>
<DIV class="note">
<P>Первый абзац внутри примечания.</P>
</DIV>

а такой же элемент P в этом фрагменте отображается без отступа, т. к. не является первым ребенком DIV:

<P>Последний абзац перед примечанием.</P>
<DIV class="note">
<H2>Примечание.</H2>
<P>Первый абзац внутри примечания.</P>
</DIV>

Следующее правило указывает, что элемент EM, содержащийся в элементе P, который является первым ребенком, должен отображаться полужирным шрифтом:

P:first-child EM { font-weight: bold }

Следующие два селектора эквивалентны между собой:

* > A:first-child   /* A является первым ребенком любого элемента */
A:first-child       /* То же самое */
Поддержка:   Internet Explorer  Не поддерживается
             Netscape Navigator  Не поддерживается

2.2.9.2. Псевдоклассы :link и :visited

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

A:link { color: red }
:link { color: red }

Если следующая гиперссылка

<A class="external" href="http://www.out.com/">Внешняя ссылка</A>

будет посещена пользователем, то правило

A.external:visited { color: blue }

вызовет ее отображением голубым цветом.

Поддержка:   Internet Explorer  Соответствие стандарту (5.0+)
             Netscape Navigator  Не поддерживает :visited (4.0+)

2.2.9.3. Псевдоклассы :hover, :active и :focus

Стиль отображения некоторых элементов может динамически изменяться в результате определенных действий пользователя. Для этого CSS содержит три следующих псевдокласса:

  • Псевдокласс :hover применяется к соответствующему элементу, когда пользователь навел курсор мыши на этот элемент, но не активировал его щелчком мыши.
  • Псевдокласс :active применяется к соответствующему элементу, когда пользователь активировал его щелчком мыши.
  • Псевдокласс :focus применяется к соответствующему элементу, когда он получает фокус (в результате нажатия определенных клавиш).

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

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

A:link    { color: red }    /* непосещенные ссылки */
A:visited { color: blue }   /* посещенные ссылки */
A:hover   { color: yellow } /* ссылки под курсором мыши*/
A:active  { color: lime }   /* активные ссылки */
Поддержка:   Internet Explorer  Поддерживает :hover и :active только применительно к элементу A (5.0+)
             Netscape Navigator  Не поддерживаются (4.0+)

2.2.9.4. Псевдокласс :lang

Псевдокласс :lang( код языка ) указывает на язык элемента. В языке HTML язык элемента задается атрибутом lang или соответствующим метаописателем; в языке XML — атрибутом XML:LANG. Например, следующие правила задают кавычки для элементов, написанных на английском и русском языках соответственно:

HTML:lang(en) { quotes: '« ' ' »' }
HTML:lang(ru) { quotes: '»' '«' '\2039' '\203A' }
Поддержка:   Internet Explorer  Не поддерживается
             Netscape Navigator  Не поддерживается

2.2.10. Псевдоэлементы

2.2.10.1. Псевдоэлемент :first-line

Псевдоэлемент :first-line применим к любому блочному элементу и задает стиль отображения его первой строки. Например, следующий фрагмент HTML-документа

<STYLE>
P:first-line { text-transform: uppercase }
</STYLE>

<P>Это длинный абзац, который будет разбит
обозревателем на несколько строк.
При этом первая строка абзаца будет отображаться
прописными буквами, как это задано в
таблице стилей.</P>

будет отображаться так:

ЭТО ДЛИННЫЙ АБЗАЦ, КОТОРЫЙ БУДЕТ РАЗБИТ ОБОЗРЕВАТЕЛЕМ НА НЕСКОЛЬКО СТРОК. ПРИ ЭТОМ
первая строка абзаца будет отображаться прописными буквами, как это задано в таблице стилей.

К данному псевдоэлементу применимы только следующие свойства: свойства шрифтов, свойства цвета, свойства фона, word-spacing, letter-spacing, text-decoration, vertical-align, text-transform, line-height, text-shadow и clear.

Поддержка:   Internet Explorer  Соответствие стандарту (5.5+)
             Netscape Navigator  Не поддерживается (4.0+)

2.2.10.2. Псевдоэлемент :first-letter

Псевдоэлемент :first-letter применим к любому блочному элементу и задает стиль отображения его первой буквы. Например, следующий фрагмент HTML-документа

<STYLE>
P:first-letter { font-size: 200%; font-weight: bold }
</STYLE>

<P>Это абзац, первая буква которого
будет выделена обозревателем.</P>

будет отображаться так:

Это абзац, первая буква которого будет выделена обозревателем.

К данному псевдоэлементу применимы только следующие свойства: свойства шрифтов, свойства цвета, свойства фона, свойства границ, свойства заполнителей, свойства рамок, text-decoration, vertical-align (только если float равно none), text-transform, line-height, float, text-shadow и clear.

Поддержка:   Internet Explorer  Соответствие стандарту (5.5+)
             Netscape Navigator  Не поддерживается (4.0+)

2.2.10.3. Псевдоэлементы :before и :after

Псевдоэлементы :before и :after используются для вставки автоматически генерируемого содержимого соответственно перед или после указанного элемента. Подробно они описаны в п. 2.11.2.

Поддержка:   Internet Explorer  Не поддерживаются
             Netscape Navigator  Не поддерживаются


WDH: CSS - Значения свойств, каскадность и наследование

Глава 2.3. Значения свойств, каскадность и наследование

2.3.1. Вычисление значений свойств

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

Специфицированное значение определяется с помощью следующих механизмов, перечисленных в порядке предпочтения:

  1. Если каскад возвращает значение, то используется оно.
  2. В противном случае, если свойство является наследуемым, то используется соответствующее значение отцовского элемента
  3. В противном случае, используется начальное значение свойства (оно указано ниже в определении каждого из свойств).

Специфицированные значения могут быть как абсолютными (например, red или 2mm), так и относительными (например, auto или 2em или 10%). Для абсолютных значений вычисленное значение совпадает со специфицированным. С другой стороны, относительные значения должны быть преобразованы к абсолютным. Так, процентные величины преобразуются в числа путем умножения на соответствующее значение; размеры, заданные в em, ex или px, умножаются на размер шрифта или пикселя; значение auto заменяется на величину, вычисляемую по формуле, указанной в определении соответствующего свойства и т. п.

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

2.3.2. Наследование

Некоторые свойства наследуются детьми элемента в дереве документа. В определении каждого свойства указывается, является оно наследуемым или нет. Пусть, например, элемент H1 содержит элемент EM:

<H1>Этот заголовок <EM>очень важен</EM>!</H1>

Если элементу EM не присвоен цвет, то он унаследует цвет своего отца, т. е. элемента H1.

По этой причине для задания стиля отображения элементов "по умолчанию", достаточно задать стиль элемента HTML или BODY. Все остальные элементы являются потомками этих элементов, поэтому они будут наследовать их свойства. При этом важно помнить, что значения, заданные в виде процентных величин, не наследуются!

Многие свойства имеют в качестве возможного значения значение inherit. Оно означает, что в качестве значения свойства должно использоваться вычисленное значение данного свойства отцовского элемента.

2.3.3. Директива @import

Директива @import позволяет нам включать в свою таблицу стилей другие таблицы стилей. Она должна содержать URI импортируемой таблицы стилей; следующие две директивы эквивалентны и демонстрируют синтаксис данной директивы:

@import "mystyle.css";
@import url(mystyle.css);

Директива @import может содержать список названий устройств отображения, к которым должна применяться данная таблица стилей, разделенных запятыми, например:

@import url("fineprint.css") print;
@import url("bluish.css") projection, tv;

Если списка названий устройств нет, то предполагается, что он равен all, т. е. импортируемая таблица стилей применима ко всем устройствам.

Директивы @import должны располагаться в таблице стилей перед первым правилом и не могут находиться внутри блока; в противном случае они игнорируются обозревателем.

Поддержка:   Internet Explorer  Поддерживаются только устройства all, screen и print (5.0+)
             Netscape Navigator  Не поддерживается

2.3.4. Каскадность

2.3.4.1. Порядок каскадов

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

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

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

По умолчанию, вес правил таблицы автора больше, чем вес правил таблицы пользователя (за исключением правил с атрибутом !important, для которых это соотношение является обратным). Вес правил таблиц автора и пользователя больше, чем вес правил таблицы обозревателя. Общий порядок определения правила и свойства, которые будут применены к элементу, таков:

  1. Выбираются все декларации, которые соответствуют данному устройству отображения; из них выбираются все правила, чьи селекторы соответствуют данному элементу.
  2. Декларации сортируются по весу их источника происхождения, как описано выше.
  3. Производится вторичная сортировка по специфичности селектора: более специфичные селекторы сильнее, чем более общие.
  4. И, наконец, последняя сортировка: если два правила имеют одинаковый вес и специфичность, то применяется последнее из них. При этом правила импортированных таблиц располагаются до всех правил импортирующей таблицы.

2.3.4.2. Атрибут !important

Для того, чтобы правила пользовательской таблицы стилей могли перекрывать авторскую, CSS содержит атрибут !important. Правило пользовательской таблицы стилей, имеющее такой атрибут, имеет больший вес, чем соответствующее правило авторской таблицы стилей. Рассмотрим следующий пример:

/* Из таблицы стилей пользователя */
P { text-indent: 1em !important }
P { font-style: italic !important }
P { font-size: 18pt }

/* Из таблицы стилей автора */
P { text-indent: 1.5em !important }
P { font: 12pt sans-serif !important }
P { font-size: 24pt }

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

Поддержка:   Internet Explorer  Соответствует стандарту (4.0+)
             Netscape Navigator  Не поддерживается

2.3.4.3. Специфичность селектора

Специфичность селектора вычисляется следующим образом:

  1. подсчитать количество атрибутов id в селекторе;
  2. подсчитать количество атрибутов class в селекторе;
  3. подсчитать количество имен элементов в селекторе (все псевдоэлементы игнорируются).

Теперь запишем эти три числа подряд, чтобы получить число из трех цифр (нам, возможно, придется привести числа a, b и c к системе счисления с большим основанием, чтобы каждое из них выражалось одной цифрой). Результатом и будет специфичность селектора (чем она выше, тем селектор специфичней). Приведем список примеров селекторов, отсортированных по их специфичности:

#id1         {…} /* a=1 b=0 c=0 --> спефифичность = 100 */
UL UL LI.red {…} /* a=0 b=1 c=3 --> спефифичность = 013 */
LI.red       {…} /* a=0 b=1 c=1 --> спефифичность = 011 */
LI           {…} /* a=0 b=0 c=1 --> спефифичность = 001 */

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


WDH: CSS - Границы, заполнители и рамки

Глава 2.4. Границы, заполнители и рамки

2.4.1. Общий формат отображения

В этой главе мы описываем общий формат визуального отображения элементов документа, используемый CSS. Для каждого элемента генерируется объемлющий его прямоугольник, строение которого показано на рисунке.

Объемлющий прямоугольник элемента

Как видно из рисунка, объемлющий прямоугольник состоит, помимо содержимого (content), из заполнителя (padding), рамки (border) и границы (margin). В свою очередь, каждый из этих слоев распадается на четыре части: левую (left), правую (right), верхнюю (top) и нижнюю (bottom). На рисунке эти части обозначены соответствующими сокращениями: "LM" - левая граница (left margin), "TB" - верхняя рамка (top border) и т. п.

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

Край содержимого или внутренний край
Ограничивает отображаемое содержимое элемента.
Край заполнителя
Ограничивает заполнитель прямоугольника. Если ширина заполнителя равна 0, то край заполнителя совпадает с внутренним краем элемента. Прямоугольник, ограниченный краем заполнителя, иначе называется вмещающим блоком элемента.
Край рамки
Ограничивает рамку прямоугольника. Если ширина рамки равна 0, то край рамки совпадает с краем заполнителя элемента.
Край границы или внешний край
Ограничивает границу прямоугольника. Если ширина границы равна 0, то край границы совпадает с краем рамки элемента.

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

Размеры области содержимого в прямоугольнике, или ширина содержимого и высота содержимого, зависят от нескольких факторов: что именно является содержимым элемента (текст, таблица или другие элементы), заданы ли свойства элемента width и height и т. д. Подробно эти вопросы обсуждаются в гл. 2.6. Ширина объемлющего прямоугольника равна сумме ширин левой и правой границы, левой и правой рамки, левого и правого заполнителя и ширины содержимого. Его высота равна сумме высот верхней и нижней границы, верхней и нижней рамки, верхнего и нижнего заполнителя и высоты содержимого.

Фон различных областей объемлющего прямоугольника определяется следующим образом:

  • Содержимое: свойство background генерирующего элемента.
  • Заполнитель: свойство background генерирующего элемента.
  • Рамка: свойства рамки генерирующего элемента.
  • Граница: границы всегда прозрачны.

Проиллюстрируем введенные понятия примером, в котором использованы все четыре области объемлющего прямоугольника.

Текст абзаца

Этот прямоугольник сгенерирован следующим элементом:

<P style="background-color: yellow; color: blue; margin: 20px 25%; padding: 10px;
   border: thick solid green">Текст абзаца</P>

2.4.2. Свойства границы

Свойства границы задают размеры границы объемлющего прямоугольника. Все они имеют тип <размер-границы>, который определяется следующим образом:

<размер-границы> = <размер> | <процент> | auto
  <размер>
    Задает фиксированный размер.
  <процент>
    Вычисляется относительно ширины вмещающего блока, даже для вертикальных границ.
  auto
    См. раздел 2.6.2.

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

2.4.2.1. Размер верхней границы: свойство margin-top

Синтаксис:  margin-top: <размер-границы> | inherit
Начально:   0
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство margin-top задает размер верхней границы объемлющего прямоугольника. Например, следующее правило убирает верхнюю границу документа:

BODY { margin-top: 0 }

2.4.2.2. Размер нижней границы: свойство margin-bottom

Синтаксис:  margin-bottom: <размер-границы> | inherit
Начально:   0
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство margin-bottom задает размер нижней границы объемлющего прямоугольника. Например, следующее правило изменяет нижнюю границу документа:

BODY { margin-bottom: 3em }

2.4.2.3. Размер левой границы: свойство margin-left

Синтаксис:  margin-left: <размер-границы> | inherit
Начально:   0
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство margin-left задает размер левой границы объемлющего прямоугольника. Например, следующее правило задает отступ для элементов BLOCKQUOTE:

BLOCKQUOTE { margin-left: 25% }

2.4.2.4. Размер правой границы: свойство margin-right

Синтаксис:  margin-right: <размер-границы> | inherit
Начально:   0
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство margin-right задает размер правой границы объемлющего прямоугольника. Например, следующее правило задает ширину узких абзацев:

P.narrow { margin-right: 50% }

2.4.2.5. Размеры границы: свойство margin

Синтаксис:  margin: <размер-границы> {1,4} | inherit
Начально:   не определено для сокращений
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство margin является сокращением для свойств margin-top, margin-bottom, margin-left и margin-right. Оно задает размер всех границ объемлющего прямоугольника одновременно.

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

BODY { margin: 1em }             /* все границы равны 1em */
BODY { margin: 1em 2em }         /* top & bottom = 1em, right & left = 2em */
BODY { margin: 1em 2em 3em }     /* top=1em, right=2em, bottom=3em, left=2em */
BODY { margin: 1em 2em 3em 4em } /* top=1em, right=2em, bottom=3em, left=4em */

2.4.2.6. Слияние границ

В некоторых ситуациях CSS допускает слияние границ соседних объемлющих прямоугольников. Слияние границ означает, что соседние границы объединяются в одну границу новой ширины.

Горизонтальные границы не сливаются никогда. Вертикальные границы могут сливаться согласно следующим правилам:

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

2.4.3. Свойства заполнителя

Свойства заполнителя задают размеры заполнителя объемлющего прямоугольника. Все они имеют тип <размер-заполнителя>, который определяется следующим образом:

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

В отличие от размеров границ, размеры заполнителей не могут быть отрицательными.

2.4.3.1. Размер верхнего заполнителя: свойство padding-top

Синтаксис:  padding-top: <размер-заполнителя> | inherit
Начально:   0
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство padding-top задает размер верхнего заполнителя объемлющего прямоугольника. Пример:

BLOCKQOUTE { padding-top: 0.5em }

2.4.3.2. Размер нижнего заполнителя: свойство padding-bottom

Синтаксис:  padding-bottom: <размер-заполнителя> | inherit
Начально:   0
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство padding-bottom задает размер нижнего заполнителя объемлющего прямоугольника. Пример:

BLOCKQOUTE { padding-bottom: 0.5em }

2.4.3.3. Размер левого заполнителя: свойство padding-left

Синтаксис:  padding-left: <размер-заполнителя> | inherit
Начально:   0
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство padding-left задает размер левого заполнителя объемлющего прямоугольника. Пример:

BLOCKQUOTE { padding-left: 20px }

2.4.3.4. Размер правого заполнителя: свойство padding-right

Синтаксис:  padding-right: <размер-заполнителя> | inherit
Начально:   0
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство padding-right задает размер правого заполнителя объемлющего прямоугольника. Пример:

BLOCKQUOTE { padding-right: 20px }

2.4.3.5. Размеры заполнителя: свойство padding

Синтаксис:  padding: <размер-заполнителя> {1,4} | inherit
Начально:   не определено для сокращений
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство padding является сокращением для свойств padding-top, padding-bottom, padding-left и padding-right. Оно задает размер всех заполнителей объемлющего прямоугольника одновременно.

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

BODY { padding: 1em }             /* все заполнители равны 1em */
BODY { padding: 1em 2em }         /* top & bottom = 1em, right & left = 2em */
BODY { padding: 1em 2em 3em }     /* top=1em, right=2em, bottom=3em, left=2em */
BODY { padding: 1em 2em 3em 4em } /* top=1em, right=2em, bottom=3em, left=4em */

2.4.4. Свойства рамки

Свойства рамки задают размер, цвет и стиль рамки объемлющего прямоугольника. Соответственно их можно разбить на следующие группы:

  • Размер рамки: border-top-width, border-bottom-width, border-left-width, border-right-width и border-width.
  • Цвет рамки: border-top-color, border-bottom-color, border-left-color, border-right-color и border-color.
  • Стиль рамки: border-top-style, border-bottom-style, border-left-style, border-right-style и border-style.
  • Сокращения: border-top, border-bottom, border-left, border-right и border.

2.4.5. Размеры рамки

Размеры рамки задают размеры рамки объемлющего прямоугольника. Все они имеют тип <размер-рамки>, который определяется следующим образом:

<размер-рамки> = thin | medium | thick | <размер>
  thin
    Тонкая рамка (точный размер зависит от обозревателя).
  medium
    Средняя рамка (точный размер зависит от обозревателя).
  thick
    Толстая рамка (точный размер зависит от обозревателя).
  <размер>
    Задает фиксированный размер, который не может быть отрицательным.

2.4.5.1. Размер верхней рамки: свойство border-top-width

Синтаксис:  border-top-width: <размер-рамки> | inherit
Начально:   medium
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство border-top-width задает размер верхней рамки объемлющего прямоугольника. Пример:

H1 { border-top-width: thin }

2.4.5.2. Размер нижней рамки: свойство border-bottom-width

Синтаксис:  border-bottom-width: <размер-рамки> | inherit
Начально:   medium
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство border-bottom-width задает размер нижней рамки объемлющего прямоугольника. Пример:

H1 { border-bottom-width: thick }

2.4.5.3. Размер левой рамки: свойство border-left-width

Синтаксис:  border-left-width: <размер-рамки> | inherit
Начально:   medium
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство border-left-width задает размер левой рамки объемлющего прямоугольника. Пример:

H1 { border-left-width: 10px }

2.4.5.4. Размер правой рамки: свойство border-right-width

Синтаксис:  border-right-width: <размер-рамки> | inherit
Начально:   medium
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (5.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство border-right-width задает размер правой рамки объемлющего прямоугольника. Пример:

H1 { border-right-width: 0 }

2.4.5.5. Размеры рамки: свойство border-width

Синтаксис:  border-width: <размер-рамки> {1,4} | inherit
Начально:   не определено для сокращений
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство border-width является сокращением для свойств border-top-width, border-bottom-width, border-left-width и border-right-width. Оно задает размер всех рамок объемлющего прямоугольника одновременно.

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

H1 { border-width: thin }              /* все рамки имеют размер thin */
H1 { border-width: thin thick }        /* top & bottom = thin, right & left = thick */
H1 { border-width: thin thick medium } /* thin, thick, medium, thick */

2.4.6. Цвета рамки

Цвета рамки задают цвета рамки объемлющего прямоугольника. Все они имеют тип <цвет>. Еслт цвет рамки не задан, то он должен совпадать с цветом генерирующего элемента, например следующая декларация

P {
  color: black;
  border: thin solid;
}

будет генерировать черную тонкую сплошную рамку вокруг абзацев.

2.4.6.1. Цвет верхней рамки: свойство border-top-color

Синтаксис:  border-top-color: <цвет> | inherit
Начально:   цвет генерирующего элемента
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border-top-color задает цвет верхней рамки объемлющего прямоугольника. Пример:

H1 { border-top-color: red }

2.4.6.2. Цвет нижней рамки: свойство border-bottom-color

Синтаксис:  border-bottom-color: <цвет> | inherit
Начально:   цвет генерирующего элемента
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border-bottom-color задает цвет нижней рамки объемлющего прямоугольника. Пример:

H1 { border-bottom-color: red }

2.4.6.3. Цвет левой рамки: свойство border-left-color

Синтаксис:  border-left-color: <цвет> | inherit
Начально:   цвет генерирующего элемента
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border-left-color задает цвет левой рамки объемлющего прямоугольника. Пример:

H1 { border-left-color: blue }

2.4.6.4. Цвет правой рамки: свойство border-right-color

Синтаксис:  border-right-color: <цвет> | inherit
Начально:   цвет генерирующего элемента
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border-right-color задает цвет правой рамки объемлющего прямоугольника. Пример:

H1 { border-right-color: blue }

2.4.6.5. Цвета рамки: свойство border-color

Синтаксис:  border-color: <цвет> {1,4} | transparent | inherit
Начально:   не определено для сокращений
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство border-color является сокращением для свойств border-top-color, border-bottom-color, border-left-color и border-right-color. Оно задает цвет всех рамок объемлющего прямоугольника одновременно. Значение transparent означает, что рамка должна быть прозрачной (хотя она может иметь при этом ненулевую ширину).

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

H1 { border-color: red }            /* все рамки имеют цвет red */
H1 { border-color: red blue }       /* top & bottom = red, right & left = blue */
H1 { border-color: red green blue } /* red, green, blue, green */

2.4.7. Стили рамки

Стили рамки задают стили изображения рамки объемлющего прямоугольника. Все они имеют тип <стиль-рамки>, который определяется следующим образом:

<стиль-рамки> = none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset
  none
    Нет рамки (влечет присваивание border-width значения 0).
  hidden
    Скрытая рамка. То же, что none, кроме таблиц (см. п. 2.10.4.1).
  dotted
    Пунктирная рамка (выводится точками).
  dashed
    Штриховая рамка (выводится короткими отрезками).
  solid
    Сплошная рамка (выводится сплошной линией).
  double
    Двойная рамка (выводится двойной сплошной линией).
  groove
    Рамка изображается в виде трехмерной выемки.
  ridge
    Противоположность groove. Рамка изображается в виде трехмерного выступа.
  inset
    Рамка изображается в виде трехмерной врезки.
  outset
    Противоположность inset. Рамка изображается в виде трехмерного вырезки.
Поддержка:    Internet Explorer  Стиль hidden отображается как none (4.0+)
              Netscape Navigator  Стиль hidden отображается как outset, dotted и dashed как solid (4.0+)

2.4.7.1. Стиль верхней рамки: свойство border-top-style

Синтаксис:  border-top-style: <стиль-рамки> | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border-top-style задает стиль верхней рамки объемлющего прямоугольника. Пример:

H1 { border-top-style: solid }

2.4.7.2. Стиль нижней рамки: свойство border-bottom-style

Синтаксис:  border-bottom-style: <стиль-рамки> | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border-bottom-style задает стиль нижней рамки объемлющего прямоугольника. Пример:

H1 { border-bottom-style: none }

2.4.7.3. Стиль левой рамки: свойство border-left-style

Синтаксис:  border-left-style: <стиль-рамки> | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border-left-style задает стиль левой рамки объемлющего прямоугольника. Пример:

H1 { border-left-style: dashed }

2.4.7.4. Стиль правой рамки: свойство border-right-style

Синтаксис:  border-right-style: <стиль-рамки> | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border-right-style задает стиль правой рамки объемлющего прямоугольника. Пример:

H1 { border-right-style: double }

2.4.7.5. Стили рамки: свойство border-style

Синтаксис:  border-style: <стиль-рамки> {1,4} | inherit
Начально:   не определено для сокращений
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство border-style является сокращением для свойств border-top-style, border-bottom-style, border-left-style и border-right-style. Оно задает стиль всех рамок объемлющего прямоугольника одновременно.

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

H1 { border-style: solid }               /* все рамки имеют стиль solid */
H1 { border-style: solid none }          /* top & bottom = solid, right & left = none */
H1 { border-style: solid dashed dotted } /* solid, dashed, dotted, dashed */

2.4.8. Сокращенные свойства рамки

2.4.8.1. Свойства верхней рамки: свойство border-top

Синтаксис:  border-top: [<размер-рамки> || <стиль-рамки> || <цвет>] | inherit
Начально:   см. индивидуальные свойства
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border-top задает размер, стиль и цвет верхней рамки объемлющего прямоугольника. Если какое-то из этих свойств не задано, то принимается его начальное значение. Примеры:

H1 { border-top: thick solid red }
H1 { border-top: solid red }	/* то же, что medium solid red */

2.4.8.2. Свойства нижней рамки: свойство border-bottom

Синтаксис:  border-bottom: [<размер-рамки> || <стиль-рамки> || <цвет>] | inherit
Начально:   см. индивидуальные свойства
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border-bottom задает размер, стиль и цвет нижней рамки объемлющего прямоугольника. Если какое-то из этих свойств не задано, то принимается его начальное значение. Примеры:

H1 { border-bottom: thick solid red }
H1 { border-bottom: solid red }	/* то же, что medium solid red */

2.4.8.3. Свойства левой рамки: свойство border-left

Синтаксис:  border-left: [<размер-рамки> || <стиль-рамки> || <цвет>] | inherit
Начально:   см. индивидуальные свойства
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border-left задает размер, стиль и цвет левой рамки объемлющего прямоугольника. Если какое-то из этих свойств не задано, то принимается его начальное значение. Примеры:

H1 { border-left: thick solid red }
H1 { border-left: solid red }	/* то же, что medium solid red */

2.4.8.4. Свойства правой рамки: свойство border-right

Синтаксис:  border-right: [<размер-рамки> || <стиль-рамки> || <цвет>] | inherit
Начально:   см. индивидуальные свойства
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border-right задает размер, стиль и цвет правой рамки объемлющего прямоугольника. Если какое-то из этих свойств не задано, то принимается его начальное значение. Примеры:

H1 { border-right: thick solid red }
H1 { border-right: solid red }	/* то же, что medium solid red */

2.4.8.5. Свойства всех рамок: свойство border

Синтаксис:  border: [<размер-рамки> || <стиль-рамки> || <цвет>] | inherit
Начально:   см. индивидуальные свойства
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство border задает размер, стиль и цвет всех рамок объемлющего прямоугольника одновременно. Если какое-то из этих свойств не задано, то принимается его начальное значение. Примеры:

H1 { border: thick solid red }
H1 { border: solid red }	/* то же, что medium solid red */


WDH: CSS - Позиционирование элементов

Глава 2.5. Позиционирование элементов

2.5.1. Общие положения

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

В процессе отображения документа для каждого элемента обозреватель генерирует нуль или более объемлющих прямоугольников. Внешний вид и расположение этих прямоугольников определяется следующими параметрами:

  • размерами прямоугольника, которые задаются свойствами границы, заполнителя и рамки;
  • типом прямоугольника, который задается свойством display;
  • схемой позиционирования элемента, которая задается свойством position;
  • взаимоотношениями элементов в дереве документа;
  • внешней информацией (например, размером окна отображения, собственными размерами графических образов и т. п.).

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

2.5.2. Типы объемлющих прямоугольников: свойство display

Синтаксис:  display: inline | block | list-item | run-in | compact | marker | table |
                     inline-table | table-row-group | table-header-group |
                     table-footer-group | table-row | table-column-group | table-column |
                     table-cell | table-caption | none | inherit
Начально:   inline
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: все
Поддержка:    Internet Explorer  Поддерживает только inline, block, list-item, none (4.0+),
               table-header-group и table-footer-group (5.0+)
              Netscape Navigator  Поддерживает только inline, block, list-item и none (4.0+)

Свойство display задает тип объемлющего прямоугольника для данного элемента. CSS поддерживает следующие типы прямоугольников:

block | Блочный элемент. Соответствует блочным элементам HTML, т. е. отображается как отдельный абзац. При его отображении генерируется главный прямоугольник блока, в котором располагаются объемлющие прямоугольники потомков данного элемента.
inline | Текстовый элемент. Соответствует текстовым элементам HTML, т. е. отображается как текстовые строки внутри текущего абзаца, точнее внутри главного прямоугольника соответствующего блока.
list-item | Элемент списка. Отображается как блочный элемент с добавлением к нему маркера элемента списка (подробнее см. п. 2.11.5).
marker | Маркер. Подробности см. в п. 2.11.4.
run-in | Присоединяемый элемент. Если следующий за данным элемент является блочным, то данный элемент форматируется как его первый текстовый элемент. В противном случае отображается как обычный блочный элемент.
compact | Компактный элемент. Если следующий за данным элемент является блочным, то данный элемент форматируется как однострочный текстовый элемент, и если он помещается на левой или правой границе последующего блока (граница задается свойством direction вмещающего блока), то на ней он и отображается. В противном случае отображается как обычный блочный элемент.
none | Элемент и все его потомки игнорируются при отображении.
table | Блочная таблица. Подробности см. в п. 2.10.1.
inline-table | Текстовая таблица. Подробности см. в п. 2.10.1.
table-row-group | Группа строк таблицы. Подробности см. в п. 2.10.1.
table-header-group | Группа надзаголовков таблицы. Подробности см. в п. 2.10.1.
table-footer-group | Группа подзаголовков таблицы. Подробности см. в п. 2.10.1.
table-row | Строка таблицы. Подробности см. в п. 2.10.1.
table-column-group | Группа столбцов таблицы. Подробности см. в п. 2.10.1.
table-column | Столбец таблицы. Подробности см. в п. 2.10.1.
table-cell | Ячейка таблицы. Подробности см. в п. 2.10.1.
table-caption | Заголовок таблицы. Подробности см. в п. 2.10.1.

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

P   { display: block }     /* Блочный элемент */
EM  { display: inline }    /* Текстовый элемент */
LI  { display: list-item } /* Элемент списка */
IMG { display: none }      /* Не отображать графические образы */

2.5.3. Схема позиционирования: свойство position

Синтаксис:  position: static | relative | absolute | fixed | inherit
Начально:   static
Применимо:  ко всем элементам, кроме генерируемого оглавления
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Поддерживает только static, relative и absolute (4.0+)
              Netscape Navigator  Поддерживает только relative и absolute; реализовано с ошибками (4.0+)

Свойство position задает схему позиционирования данного элемента. CSS поддерживает следующие схемы позиционирования:

static | Статический элемент. Не имеет специального позиционирования, отображается в обычном потоке элементов.
relative | Относительно позиционируемый элемент. Для него сначала генерируется объемлющий прямоугольник в обычном потоке элементов, а затем смещается на величины, заданные свойствами left и top.
absolute | Абсолютно позиционируемый элемент. Позиция элемента вычисляется относительно позиции его ближайшего позиционированного предка (или относительно элемента BODY, если все предки не позиционированы) на основании свойств left и top. Помимо позиции элемента можно задать и его размер свойствами right и bottom.
fixed | Фиксированный элемент. Этот элемент является абсолютно позиционированным, но дополнительно зафиксирован относительно некой отправной точки. Для непрерывных устройств отображения его позиция зафиксирована относительно окна обозревателя, т. е. он остается неподвижным при прокрутке окна. Для страничных устройств его позиция фиксируется относительно страницы.

Абсолютно позиционированные элементы выпадают из обычного потока отображения элементов документа. Их позиция не зависит от окружающих объектов, а определяется относительно ближайшего позиционированного предка. Если заданная позиция уже занята другим элементом, то оба элемента будут отображаться в одном месте, перекрывая друг друга. То, какой из элементов находится выше, а какой ниже, задается свойством z-index. Абсолютно позиционированные элементы не имеют границ, но имеют заполнители и рамки. Пример абсолютно позиционированного графического образа внутри относительно позиционированного элемента DIV:

<DIV style="position: relative; left: 0; top: 0; height: 50px">
  <P>Часть текста будет скрыта рисунком, потому что он позиционирован поверх текста.</P>
  <IMG src="images\leaf.gif" style="position: absolute; left: 300px; top: 0">
</DIV>

Этот пример будет отображаться так (Netscape Navigator 4.x отображает этот пример неверно!):

Часть текста будет скрыта рисунком, потому что он позиционирован поверх текста.

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

<P>Пример вывода текста в верхнем индексе:
  <SPAN style="position: relative; top: -3px">xyz</SPAN>.</P>

Этот пример будет отображаться так:

Пример вывода текста в верхнем индексе: xyz.

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

2.5.4. Задание позиции элемента

Если элемент не является статическим, то его позиция должна быть задана явно. Для этого используются четыре свойства: left, top, right и bottom, которые задают относительное смещение элемента. Если они не заданы, то положение и размер объемлющего элемент прямоугольника вычисляется автоматически. Эти свойства имеют тип <смещение>, который определяется следующим образом:

<смещение> = <размер> | <процент> | auto
  <размер>
    Задает фиксированное смещение.
  <процент>
    Вычисляется относительно высоты или ширины вмещающего блока.
  auto
    Положение элемента по умолчанию в обычном потоке элементов. См. 2.6.2 и 2.6.5.

2.5.4.1. Верхняя позиция: свойство top

Синтаксис:  top: <смещение> | inherit
Начально:   auto
Применимо:  ко всем позиционированным элементам
Наследуемо: нет
Проценты:   Вычисляется относительно высоты вмещающего блока.
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство top задает смещение позиционированного элемента относительно верхнего края вмещающего блока. Пример:

<IMG src="sample.gif" style="position: absolute; left: 300px; top: 0">

2.5.4.2. Левая позиция: свойство left

Синтаксис:  left: <смещение> | inherit
Начально:   auto
Применимо:  ко всем позиционированным элементам
Наследуемо: нет
Проценты:   Вычисляется относительно ширины вмещающего блока.
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство left задает смещение позиционированного элемента относительно левого края вмещающего блока. Пример:

<IMG src="sample.gif" style="position: absolute; left: 300px; top: 0">

2.5.4.3. Нижняя позиция: свойство bottom

Синтаксис:  bottom: <смещение> | inherit
Начально:   auto
Применимо:  ко всем позиционированным элементам
Наследуемо: нет
Проценты:   Вычисляется относительно высоты вмещающего блока.
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство bottom задает смещение позиционированного элемента относительно нижнего края вмещающего блока. Пример:

<IMG src="sample.gif" style="position: absolute; right: 20px; bottom: 50px">

2.5.4.4. Правая позиция: свойство right

Синтаксис:  right: <смещение> | inherit
Начально:   auto
Применимо:  ко всем позиционированным элементам
Наследуемо: нет
Проценты:   Вычисляется относительно ширины вмещающего блока.
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство right задает смещение позиционированного элемента относительно правого края вмещающего блока. Пример:

<IMG src="sample.gif" style="position: absolute; right: 20px; bottom: 50px">

2.5.5. Порядок отображения элементов: свойство z-index

Синтаксис:  z-index: auto | <целое> | inherit
Начально:   auto
Применимо:  к позиционированным элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Поддерживается только для слоев (layers) (4.0+)

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

Свойство z-index позволяет явно задать индекс элемента в этом стеке и тем самым управлять порядком наложения элементов друг на друга при отображении. Оно может принимать следующие значения:

<целое> | Явно задает индекс элемента в стеке.
auto | Индекс элемента принимается равным индексу его отца.

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

<DIV style="position: relative; top: 0; left: 0; width: 100%; height: 60px">
  <P style="position: absolute; top: 10px; left: 100px; z-index: 2;
    background: purple; color: white">Текст</P>
  <IMG src="images/leaf.gif" style="position: absolute; top: 10px; left: 100px;
    z-index: 1">
</DIV>

Приведенный фрагмент будет отображаться так (Netscape Navigator 4.x отображает этот пример неверно!):

Текст

2.5.6. Плавающие элементы: свойство float

Синтаксис:  float: left | right | none | inherit
Начально:   none
Применимо:  ко всем элементам, кроме позиционированных и генерируемого оглавления
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту; реализовано с ошибками (4.0+)

Свойство float со значением left или right указывает, что элемент является плавающим и задает его выравнивание влево или вправо. По умолчанию это свойство имеет значение none, что означает, что элемент не является плавающим.

Плавающий элемент всегда считается блочным, т. е. его свойство display игнорируется. Плавающий элемент смещается влево или вправо до тех пор, пока не встретит рамку, заполнитель или границу другого блочного элемента. Элементы, следующие за плавающим элементом, сдвигаются относительно его позиции и как бы обтекают его соответственно справа или слева (см. также описание свойства clear). Так, использование плавающих абзацев позволяет выводить их бок о бок, например (Netscape Navigator 4.x отображает этот пример неверно!):

Это абзац, выровненный влево.

А это абзац, выровненный вправо.

Для вывода этого примера использован следующий фрагмент:

<P style="float: left; width: 50%">Это абзац, выровненный влево.</P>
<P style="text-align: right"> А это абзац, выровненный вправо.</P>

Плавающий элемент должен иметь явно заданную ширину. Она задается либо свойством width, либо самим элементом, если это, к примеру, графический образ.

В следующем примере абзац состоит из текста и двух плавающих графических образов, выровненных соответственно влево и вправо:

<P>
  <IMG src="images/left.gif" alt="Стрелка влево" style="float: left">
  <IMG src="images/right.gif" alt="Стрелка вправо" style="float: right">
  Это текст абзаца, который будет расположен между плавающими образами.
</P>

Этот фрагмент будет отображаться так (Netscape Navigator 4.x отображает его неверно!):

Стрелка влево Стрелка вправо Это текст абзаца, который будет расположен между плавающими образами.

2.5.7. Управление обтеканием текста: свойство clear

Синтаксис:  clear: none | left | right | both | inherit
Начально:   none
Применимо:  к блочным элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту; реализовано с ошибками (4.0+)

Свойство clear указывает, как данный элемент не может обтекать предыдущий плавающий элемент. Он может принимать следующие значения:

none | Разрешает обтекание плавающего элемента с обеих сторон.
left | Запрещает обтекание плавающего элемента слева.
right | Запрещает обтекание плавающего элемента справа.
both | Запрещает обтекание плавающего элемента с обеих сторон.

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

<P>
  <IMG src="images/left.gif" alt="Стрелка влево" style="float: left">
  <IMG src="images/right.gif" alt="Стрелка вправо" style="float: right">
  Это текст абзаца, который будет расположен между плавающими образами.
  <SPAN style="clear: both">Этот текст будет выведен ниже остального фрагмента.</SPAN>
</P>

Этот фрагмент будет отображаться так (Netscape Navigator 4.x отображает этот пример неверно!):

Стрелка влево Стрелка вправо Это текст абзаца, который будет расположен между плавающими образами. Этот текст будет выведен ниже остального фрагмента.

2.5.8. Направление вывода текста

Всем символам в кодировке Unicode приписано направление, с тем, чтобы текст отображался правильно. Так, латинские и русские буквы выводятся слева направо, а еврейские и арабские – справа налево.

Unicode определяет двунаправленный алгоритм, который должен применяться всякий раз, когда документ содержит символы, выводимые справа налево. Хотя обычно этот алгоритм дает правильное изображение текста, существуют ситуации, когда направление вывода текста приходится задавать явно с помощью свойств direction или unicode-bidi.

2.5.8.1. Задание направления вывода текста: свойство direction

Синтаксис:  direction: ltr | rtl | inherit
Начально:   ltr
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (5.0+)
              Netscape Navigator  Не поддерживается

Свойство direction определяет направление вывода текста элемента: слева направо (ltr, принято по умолчанию) или справа налево (rtl). При этом оно перекрывает двунаправленный алгоритм Unicode. Кроме того, оно задает направление вывода столбцов таблиц, направление горизонтального переполнения (см. overflow) и положение последней неполной строки в блоке со свойством "text-align: justify".

Для того, чтобы это свойство оказывало влияние на отображение текстовых элементов, значение свойства unicode-bidi должно быть равно embed или override.

2.5.8.2. Управление двунаправленным алгоритмом Unicode: свойство unicode-bidi

Синтаксис:  unicode-bidi: normal | embed | bidi-override | inherit
Начально:   normal
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (5.0+)
              Netscape Navigator  Не поддерживается

Свойство unicode-bidi задает уровень вложения для двунаправленного алгоритма Unicode. Оно может принимать следующие значения:

normal | Элемент не открывает нового уровня вложения.
embed | Элемент открывает новый уровень вложения, который задается свойством direction и двунаправленным алгоритмом.
bidi-override | Элемент открывает новый уровень вложения, направление вывода текста задается только свойством direction; двунаправленный алгоритм игнорируется.

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


WDH: CSS - Визуализация элементов

Глава 2.6. Визуализация элементов

2.6.1. Ширина содержимого: свойство width

Синтаксис:  width: <размер> | <процент> | auto | inherit
Начально:   auto
Применимо:  ко всем элементам, кроме текстовых, строк таблиц и групп строк
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (5.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство width задает ширину содержимого при генерации объемлющего прямоугольника блочных элементов и элементов, внешних по отношению к CSS (т. е. графических образов, объектов и некоторых элементов форм). Ширина не может быть отрицательной и задается одним из следующих способов:

<размер>
  Задает фиксированный размер.
<процент>
  Вычисляется относительно ширины вмещающего блока.
auto
  См. раздел 2.6.2.

Пример: следующее правило устанавливает ширину абзаца, равной 400 пикселей.

P { width: 400px }

2.6.2. Вычисление ширин и границ

Вычисленные значения свойств width, margin-left, margin-right, left и right зависят от типа генерируемого прямоугольника. Как правило, вычисленное значение совпадает со специфицированным (кроме значения auto, которое заменяется на вычисленное значение по умолчанию), но есть и исключения. Различаются следующие типы элементов:

  • блочные и текстовые;
  • внешние по отношению к CSS и прочие;
  • плавающие и нет;
  • абсолютно позиционированные и остальные.

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

Не внешние текстовые элементы

Специфицированное значение auto свойств margin-left, margin-right, left и right заменяется вычисленным значением 0. Свойство width здесь не применимо, т. к. ширина содержимого однозначно определяется самим содержимым элемента.

Внешние текстовые элементы

Специфицированное значение auto свойств margin-left, margin-right, left и right заменяется вычисленным значением 0. Специфицированное значение auto свойства width заменяется вычисленным значением ширины соответствующего объекта (которая задается либо его собственными размерами, либо атрибутом языка документа).

Не внешние блочные элементы в обычном потоке элементов

Специфицированное значение auto свойств left и right заменяется вычисленным значением 0. Остальные свойства связаны между собой следующим соотношением:

margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right = ширина вмещающего блока

Поэтому, если мы явно зададим значения всех этих свойств, отличные от auto, то одно из значений будет изменено обозревателем в соответствии с приведенным соотношением (обычно это margin-left, если direction = ltr, и margin-right, если direction = rtl). Если ровно одно значение задано как auto, то оно вычисляется из приведенного соотношения. Если width равно auto, то все остальные значения auto заменяются на 0, и ширина вычисляется из приведенного соотношения. Если margin-left и margin-right равны auto, то их вычисленные значения будут равны между собой.

Внешние блочные элементы в обычном потоке элементов

Специфицированное значение auto свойств left и right заменяется вычисленным значением 0. Остальные свойства связаны между собой приведенным выше соотношением.

Если width равно auto, то оно заменяется вычисленным значением ширины соответствующего объекта (которая задается либо его собственными размерами, либо атрибутом языка документа). Если одна из границ равна auto, то ее значение вычисляется из приведенного соотношения. Если margin-left и margin-right равны auto, то их вычисленные значения будут равны между собой.

Не внешние плавающие элементы

Специфицированное значение auto свойств width, margin-left, margin-right, left и right заменяется вычисленным значением 0.

Внешние плавающие элементы

Специфицированное значение auto свойств margin-left, margin-right, left и right заменяется вычисленным значением 0. Специфицированное значение auto свойства width заменяется вычисленным значением ширины соответствующего объекта (которая задается либо его собственными размерами, либо атрибутом языка документа).

Не внешние абсолютно позиционированные элементы

Вычисленные значения свойств связаны между собой следующим соотношением:

left + margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right + right = ширина вмещающего блока

При этом вычисление значений свойств производится в следующем порядке:

  1. Если left равно auto, а direction равно ltr, то auto заменяется на расстояние от левого края вмещающего блока до левой границы гипотетического прямоугольника, который был бы первым объемлющим прямоугольником данного элемента, если бы он был статическим. Это значение отрицательно, если гипотетический прямоугольник расположен слева от объемлющего блока.
  2. Если right равно auto, а direction равно rtl, то auto заменяется на расстояние от правого края вмещающего блока до правой границы гипотетического прямоугольника, который был бы первым объемлющим прямоугольником данного элемента, если бы он был статическим. Это значение отрицательно, если гипотетический прямоугольник расположен справа от объемлющего блока.
  3. Если width равно auto, то значения auto для left и right заменяются на 0.
  4. Если left, right или width все еще равны auto, то значения auto для margin-left и margin-right заменяются на 0.
  5. Если margin-left и margin-right все еще равны auto, то их значения вычисляются из приведенного выше соотношения так, чтобы они были равны между собой.
  6. Если к этому моменту только одно значение равно auto, то оно вычисляется из приведенного соотношения.
  7. Если оказалось, что было задано слишком много явных значений, то пересчитывается на основе приведенного соотношения значение left (если direction равно ltr) или right (если direction равно rtl).

Внешние абсолютно позиционированные элементы

Вычисления производятся так же, как в предыдущем случае, но с одним отличием. Если width равно auto, то оно заменяется вычисленным значением ширины соответствующего объекта (которая задается либо его собственными размерами, либо атрибутом языка документа), а затем производятся все перечисленные расчеты.

2.6.3. Минимальная и максимальная ширина: свойства min-width и max-width

Синтаксис:  min-width: <размер> | <процент> | inherit
Начально:   определяется обозревателем
Применимо:  ко всем элементам, кроме текстовых и табличных
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Синтаксис:  max-width: <размер> | <процент> | none | inherit
Начально:   none
Применимо:  ко всем элементам, кроме текстовых и табличных
Наследуемо: нет
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживаются
              Netscape Navigator  Не поддерживаются

Эти свойства позволяют нам ограничить ширину содержимого при генерации объемлющего прямоугольника минимально и максимально допустимыми значениями. Ширина не может быть отрицательной и задается одним из следующих способов:

<размер>
  Задает фиксированный размер.
<процент>
  Вычисляется относительно ширины вмещающего блока.
none
  Неограниченная ширина прямоугольника.

Эти свойства применяются следующим образом. Сначала вычисляется свойство width, как описано в разделе 2.6.2. Затем проверяется, попадает ли оно в диапазон от min-width до max-width, и, если нет, то вычисленное значение width заменяется на соответствующее предельно допустимое значение.

Пример: следующее правило устанавливает пределы для ширины абзаца.

P { min-width: 20px; max-width: 400px }

2.6.4. Высота содержимого: свойство height

Синтаксис:  height: <размер> | <процент> | auto | inherit
Начально:   auto
Применимо:  ко всем элементам, кроме текстовых, столбцов таблиц и групп столбцов
Наследуемо: нет
Проценты:   относительно высоты вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (5.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство height задает высоту содержимого при генерации объемлющего прямоугольника блочных элементов и элементов, внешних по отношению к CSS (т. е. графических образов, объектов, аплетов и т. п.). Отметим, что высота текстовых элементов задается свойством line-height. Высота не может быть отрицательной и задается одним из следующих способов:

<размер>
  Задает фиксированный размер.
<процент>
  Вычисляется относительно высоты вмещающего блока. Если эта высота явно не задана,
  то значение интерпретируется как auto.
auto
  См. раздел 2.6.5.

Пример: следующее правило устанавливает высоту абзаца, равной 100 пикселей.

P { height: 100px }

Если высота какого-то абзаца будет превышать 100 пикселей, то такой абзац отображается в соответствии со значением свойства overflow.

2.6.5. Вычисление высот и границ

Вычисленные значения свойств height, margin-top, margin-bottom, top и bottom зависят от типа генерируемого прямоугольника. Как правило, вычисленное значение совпадает со специфицированным (кроме значения auto, которое заменяется на вычисленное значение по умолчанию), но есть и исключения. Различаются следующие типы элементов:

  • блочные и текстовые;
  • внешние по отношению к CSS и прочие;
  • плавающие и нет;
  • абсолютно позиционированные и остальные.

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

Не внешние текстовые элементы

Специфицированное значение auto свойств margin-top, margin-bottom, top и bottom заменяется вычисленным значением 0. Свойство height здесь не применимо, но высоту такого элемента можно задать свойством line-height.

Внешние элементы (текстовые, блочные в обычном потоке элементов и плавающие)

Специфицированное значение auto свойств margin-top, margin-bottom, top и bottom заменяется вычисленным значением 0. Специфицированное значение auto свойства height заменяется вычисленным значением высоты соответствующего объекта (которая задается либо его собственными размерами, либо атрибутом языка документа).

Не внешние блочные элементы (в обычном потоке элементов или плавающие)

Специфицированное значение auto свойств margin-top, margin-bottom, top и bottom заменяется вычисленным значением 0. Если height равно auto, то его вычисленное значение зависит от того, имеет ли данный элемент блочных детей. Если все его дети являются текстовыми, то высота элемента вычисляется как расстояние от верхней линии самого верхнего строчного блока до нижней линии самого нижнего строчного блока. Если же элемент имеет блочных детей, то его высота вычисляется как расстояние от верхнего края рамки самого верхнего блока до нижнего края рамки самого нижнего блока. При этом учитываются только те дети, которые находятся в обычном потоке элементов (иными словами, плавающие и абсолютно позиционированные элементы игнорируются, а относительно позиционированные учитываются без своего смещения).

Не внешние абсолютно позиционированные элементы

Вычисленные значения свойств связаны между собой следующим соотношением:

top + margin-top + border-top-width + padding-top + height + padding-bottom + border-bottom-width + margin-bottom + bottom = высота вмещающего блока

При этом вычисление значений свойств производится в следующем порядке:

  1. Если top равно auto, то auto заменяется на расстояние от верхнего края вмещающего блока до верхней границы гипотетического прямоугольника, который был бы первым объемлющим прямоугольником данного элемента, если бы он был статическим. Это значение отрицательно, если гипотетический прямоугольник расположен выше объемлющего блока.
  2. Если и height, и bottom равны auto, то значение auto для bottom заменяется на 0.
  3. Если bottom или height все еще равны auto, то значения auto для margin-top и margin-bottom заменяются на 0.
  4. Если margin-top и margin-bottom все еще равны auto, то их значения вычисляются из приведенного выше соотношения так, чтобы они были равны между собой.
  5. Если к этому моменту только одно значение равно auto, то оно вычисляется из приведенного соотношения.
  6. Если оказалось, что было задано слишком много явных значений, то пересчитывается на основе приведенного соотношения значение bottom.

Внешние абсолютно позиционированные элементы

Вычисления производятся так же, как в предыдущем случае, но с одним отличием. Если height равно auto, то оно заменяется вычисленным значением высоты соответствующего объекта (которая задается либо его собственными размерами, либо атрибутом языка документа), а затем производятся все перечисленные расчеты.

2.6.6. Минимальная и максимальная высота: свойства min-height и max-height

Синтаксис:  min-height: <размер> | <процент> | inherit
Начально:   определяется обозревателем
Применимо:  ко всем элементам, кроме текстовых и табличных
Наследуемо: нет
Проценты:   относительно высоты вмещающего блока
Устройства: визуальные
Синтаксис:  max-height: <размер> | <процент> | none | inherit
Начально:   none
Применимо:  ко всем элементам, кроме текстовых и табличных
Наследуемо: нет
Проценты:   относительно высоты вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживаются
              Netscape Navigator  Не поддерживаются

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

<размер>
  Задает фиксированный размер.
<процент>
  Вычисляется относительно высоты вмещающего блока. Если эта высота явно не задана,
  то значение интерпретируется как auto.
none
  Неограниченная высота прямоугольника.

Эти свойства применяются следующим образом. Сначала вычисляется свойство height, как описано в разделе 2.6.5. Затем проверяется, попадает ли оно в диапазон от min-height до max-height, и, если нет, то вычисленное значение height заменяется на соответствующее предельно допустимое значение.

Пример: следующее правило устанавливает пределы для высоты абзаца.

P { min-height: 200px; max-height: 1000px }

2.6.7. Отображение текстовых элементов

При отображении текстовых элементов их прямоугольники располагаются горизонтально друг за другом. При этом их взаимное расположение по вертикали определяется свойством vertical-align. Прямоугольная область, содержащая прямоугольники, образующие строку текста, называется строчным блоком. Ширина строчного блока определяется шириной вмещающего блока. Его высота вычисляется на основе высот всех прямоугольников данной строки и может быть изменена свойством line-height.

2.6.7.1. Высота текста: свойство line-height

Синтаксис:  line-height: normal | <число> | <размер> | <процент> | inherit
Начально:   normal
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   относительно размера шрифта элемента
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство line-height задает высоту строки текста при генерации объемлющего прямоугольника. Если элемент является блочным, то это свойство задает минимальную высоту входящих в него строчных блоков. Если элемент является текстовым, то это свойство задает точную высоту его строчного блока.

Высота не может быть отрицательной и задается одним из следующих способов:

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

Следующие три правила дадут один и тот же результат:

DIV { font-size: 10pt; line-height: 1.2 }
DIV { font-size: 10pt; line-height: 1.2em }
DIV { font-size: 10pt; line-height: 120% }

Если текст элемента отображается несколькими шрифтами, то выбирается наибольший из размеров этих шрифтов.

2.6.7.2. Вертикальное выравнивание: свойство vertical-align

Синтаксис:  vertical-align: baseline | sub | super | top | text-top | middle | bottom |
                            text-bottom | <размер> | <процент> | inherit
Начально:   baseline
Применимо:  к текстовым элементам и ячейкам таблиц
Наследуемо: нет
Проценты:   относительно значения line-height элемента
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство vertical-align задает положение по вертикали объемлющего прямоугольника текстового элемента внутри содержащего его строчного блока. Оно может принимать следующие значения:

baseline | Выравнивание по базовой линии строчного блока.
sub | Расположение в позиции нижних индексов (но без изменения размера шрифта).
super | Расположение в позиции верхних индексов (но без изменения размера шрифта).
top | Выравнивание по верху строчного блока.
text-top | Выравнивание по верхней линии шрифта строчного блока.
middle | Выравнивание по центру строчного блока.
bottom | Выравнивание по низу строчного блока.
text-bottom | Выравнивание по нижней линии шрифта строчного блока.
<размер> | Увеличить (положительное значение) или уменьшить (отрицательное значение) на данную величину.
<процент> | Увеличить (положительное значение) или уменьшить (отрицательное значение) на данную величину в процентах от значения line-height.

Пример:

EM.center { vertical-align: middle }

2.6.8. Переполнение и обрезка

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

  • Строка текста не может быть разорвана, и строчный блок становится шире блочного прямоугольника.
  • Блочный прямоугольник слишком широк для вмещающего блока.
  • Высота элемента больше, чем значение свойства height вмещающего блока.
  • Элемент абсолютно позиционирован.
  • Объемлющий прямоугольник имеет отрицательные границы.

Всякий раз, когда происходит переполнение, значение свойства overflow указывает как следует (и следует ли вообще) обрезать содержимое блока; размер и форма области обрезки при этом задается свойством clip.

2.6.8.1. Реакция на переполнение: свойство overflow

Синтаксис:  overflow: visible | hidden | scroll | auto | inherit
Начально:   visible
Применимо:  к блочным и внешним элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство overflow определяет правила обрезки содержимого элемента при переполнении. Оно может принимать следующие значения:

visible | Содержимое не обрезается, т. е. отображается за пределами объемлющего прямоугольника.
hidden | Содержимое обрезается; размер и форма области обрезки при этом задается свойством clip.
scroll | Содержимое обрезается, но обозреватель должен обеспечить механизм прокрутки содержимого для того, чтобы пользователь мог получить доступ ко всему содержимому элемента. При отображении на устройства print и projection должно печататься все содержимое элемента.
auto | Содержимое обрезается, и при необходимости обеспечивается прокрутка содержимого.

Рассмотрим следующий пример.

<DIV style="width: 100px; height: 100px; border: thin solid red; overflow: scroll">
  <BLOCKQUOTE style="width: 125px; height: 100px; margin-top: 50px;
    margin-left: 50px; border: thin dashed black">
    <P>Если бы строители строили здания так же, как программисты пишут
       программы, первый залетевший дятел разрушил бы цивилизацию.</P>
    <P style="text-align: right">Второй закон Вейнберга</P>
  </BLOCKQUOTE>
</DIV>

Здесь элемент BLOCKQUOTE выходит за пределы содержащего его элемента DIV, поэтому этот фрагмент будет отображаться так (Netscape Navigator 4.x не поддерживает обрезку и прокрутку!):

Если бы строители строили здания так же, как программисты пишут программы, первый залетевший дятел разрушил бы цивилизацию.

Второй закон Вейнберга

2.6.8.2. Область обрезки: свойство clip

Синтаксис:  clip: rect(<top>,<right>,<bottom>,<left>) | auto | inherit
Начально:   auto
Применимо:  к блочным и внешним элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Поддерживается только для абсолютно позиционированных элементов (4.0+)
              Netscape Navigator  Поддерживается только для слоев (layers) (4.0+)

Свойство clip задает облесть обрезки содержимого элемента при переполнении. Оно может принимать следующие значения:

  auto
    Область обрезки совпадает с объемлющим прямоугольником.
  rect(<top>,<right>,<bottom>,<left>)
    Область вырезки является прямоугольником с заданными координатами, где
    <top>,<right>,<bottom> и <left> — это смещения от соответствующих сторон
    объемлющего прямоугольника. Каждое из этих смещений должно быть равно либо
    auto (что означает нулевое смещение), либо <размер>. Отрицательные смещения
    допускаются.

Пример:

P { clip: rect(5px, -5px, 10px, 5px); }

2.6.9. Видимость элемента: свойство visibility

Синтаксис:  visibility: visible | hidden | collapse | inherit
Начально:   inherit
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Поддерживаются только значения visible, hidden и inherit (4.0+)
              Netscape Navigator  Поддерживается только для слоев (layers) (4.0+)

Свойство visibility задает видимость элемента при отображении. Оно может принимать следующие значения:

visible | Объемлющий прямоугольник элемента видим.
hidden | Объемлющий прямоугольник элемента невидим.
collapse | То же, что hidden. Применяется только в таблицах, где имеет особое назначение (см. п. 2.10.2).

Примечания:

  1. Невидимость элемента означает, что его объемлющий прямоугольник становится прозрачным, но продолжает занимать свое место в структуре отображения. Для того, чтобы полностью удалить элемент, следует использовать значение none свойства display.
  2. Это свойство широко применяется в сценариях для создания динамических эффектов.

2.6.10. Форма курсора: свойство cursor

Синтаксис:  cursor: [[<uri>,]* [auto | crosshair | default | pointer | move |
                    e-resize | ne-resize | nw-resize | n-resize | se-resize |
                    sw-resize | s-resize | w-resize| text | wait | help]] | inherit
Начально:   auto
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные интерактивные
Поддержка:    Internet Explorer  Вместо pointer используется hand, список <uri> не поддерживается (4.0+)
              Netscape Navigator  Не поддерживается

Свойство cursor задает форму курсора мыши при наведении ее на данный элемент. Оно может принимать следующие значения:

auto | Форма курсора определяется обозревателем в зависимости от содержимого элемента.
crosshair | Перекрестье.
default | Курсор операционной системы по умолчанию. В Windows это стрелка.
pointer | Указатель на гиперссылку. Обычно это кисть руки.
move | Скрещенные стрелки, указывающие на то, что что-то должно переместиться.
*-resize | Стрелка, указывающая на сдвигаемую границу; * задает направление сдвига (n = север, s = юг, w = запад, e = восток и т. п.).
text | Указывает на редактируемый текст. Обычно имеет форму буквы I.
wait | Песочные часы, указывающие на то, что программа занята, и пользователь должен подождать.
help | Вопросительный знак, указывающий, что для данного элемента можно получить справку.
<uri> | Задает список URI ресурсов, содержащих курсоры.

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

P { cursor: url("mycursor.cur"), url("second.csr"), text }

2.6.11. Динамические контуры

2.6.11.1. Общее описание

CSS допускает создание вокруг отображаемых элементов динамических контуров. Это удобно для выделения таких объектов, как кнопки, активные поля форм или карты ссылок. Контуры отличаются от рамок в двух отношениях: во-первых, они не занимают экранного пространства, во-вторых, не обязаны иметь прямоугольную форму.

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

2.6.11.2. Размер контура: свойство outline-width

Синтаксис:  outline-width: <размер-рамки> | inherit
Начально:   medium
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные интерактивные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство outline-width задает размер динамического контура. Оно принимает те же значения, что и border-width. Пример:

A:active { outline-width: thick }

2.6.11.3. Стиль контура: свойство outline-style

Синтаксис:  outline-style: <стиль-рамки> | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные интерактивные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство outline-style задает стиль динамического контура. Оно принимает те же значения, что и border-style. Пример:

A:focus { outline-style: double }

2.6.11.4. Цвет контура: свойство outline-color

Синтаксис:  outline-color: <цвет> | invert | inherit
Начально:   invert
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные интерактивные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство outline-color задает цвет динамического контура. Его значениями могут быть любые цвета, а также invert, что означает, что цвет контура должен быть получен обращением цветов пикселей экрана. Пример:

A:focus { outline-color: red }

2.6.11.5. Свойства контура: свойство outline

Синтаксис:  outline: [<outline-width> || <outline-style> || <outline-color>] | inherit
Начально:   см. индивидуальные свойства
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные интерактивные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство outline задает размер, стиль и цвет контура одновременно. Если какое-то из этих свойств не задано, то принимается его начальное значение. Пример:

A:active { outline: thick solid red }


WDH: CSS - Цвет и фон

Глава 2.7. Цвет и фон

2.7.1. Цвет текста: свойство color

Синтаксис:  color: <цвет> | inherit
Начально:   зависит от обозревателя
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство color задает цвет текста содержимого элемента при отображении. Примеры:

H1 { color: blue }
H2 { color: #000080 }
H3 { color: #0c0 }

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

2.7.2. Задание фона

Фон элемента может задаваться либо цветом (background-color), либо графическим образом (background-image, background-repeat, background-attachment и background-position). Можно также пользоваться сокращенным свойством background. Напомним, что фон элемента распространяется на область содержимого элемента и его заполнителя.

Фон корня дерева документов является фоном для отображения документа в целом, но для HTML-документов рекомендуется задавать общий фон в свойствах элемента BODY, а не HTML.

2.7.2.1. Цвет фона: свойство background-color

Синтаксис:  background-color: <цвет> | transparent | inherit
Начально:   transparent
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство background-color задает цвет фона элемента при отображении. Значение transparent, принятое по умолчанию, соответствует прозрачному фону. Примеры:

BODY { background-color: white }
H1 { background-color: #0000F0 }
H2 { background-color: #0cc }

Примечание. Во избежании конфликта с пользовательской таблицей стилей, при задании этого свойства следует задавать также свойство background-image (обычно со значением none).

2.7.2.2. Графический образ фона: свойство background-image

Синтаксис:  background-image: <uri> | none | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство background-image задает графический образ фона элемента при отображении. Значение none, принятое по умолчанию, означает отсутствие фонового образа. Примеры:

BODY { background-image: url("marble.gif") }
P { background-image: none }

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

2.7.2.3. Повтор фонового образа: свойство background-repeat

Синтаксис:  background-repeat: repeat | repeat-x | repeat-y | no-repeat | inherit
Начально:   repeat
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Если задан графический образ фона, то свойство background-repeat задает повтор фонового образа при отображении. Его возможные значения:

repeat | Образ повторяется по горизонтали и вертикали.
repeat-x | Образ повторяется только по горизонтали.
repeat-y | Образ повторяется только по вертикали.
no-repeat | Образ не повторяется: отображается только одна его копия.

Пример:

BODY {
  background: white url("image.gif");
  background-repeat: repeat-y;
  background-position: center;
}

2.7.2.4. Прокрутка фонового образа: свойство background-attachment

Синтаксис:  background-attachment: scroll | fixed | inherit
Начально:   scroll
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Если задан графический образ фона, то свойство background-attachment задает прокрутку фонового образа при отображении. Его возможные значения:

scroll | Образ прокручивается вместе с документом.
fixed | Образ зафиксирован и не прокручивается.

Пример:

BODY {
  background: white url("image.gif");
  background-repeat: repeat-y;
  background-attachment: fixed;
}

2.7.2.5. Позиция фонового образа: свойство background-position

Синтаксис:  background-position: [[<размер> | <процент>] {1,2} |
                                 [[top | center | bottom] ||
                                 [left | center | right]]] | inherit
Начально:   0% 0%
Применимо:  к блочным и внешним элементам
Наследуемо: нет
Проценты:   относительно размеров объемлющего прямоугольника
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Если задан графический образ фона, то свойство background-position задает позицию фонового образа при отображении. Его возможные значения:

<размер> <размер> | Если эта пара значений равна "2cm 3cm", то левый верхний угол образа помещается на 2 см правее и 3 см ниже левого верхнего угола области заполнителя.
<процент> <процент> | Если эта пара значений равна "0% 0%", то левый верхний угол образа совмещается с левым верхним углом области заполнителя. Если эта пара значений равна "100% 100%", то правый нижний угол образа совмещается с правым нижним углом области заполнителя. Если эта пара значений равна "10% 80%", то левый верхний угол образа помещается на 10% правее и 80% ниже левого верхнего угола области заполнителя.

Если задано только одно значение, то оно считается позицией по горизонтали, а позиция по вертикали принимается равной 50%. Если даны два значения, то позиция по горизонтали стоит первой. Разрешаются комбинации размеров и процентов, например "2cm 30%". Отрицательные позиции также допустимы. Кроме того, значение этого свойства может задаваться следующими комбинациями ключевых слов (и только ими):

top left = left top | То же, что "0% 0%".
top = top center = center top | То же, что "50% 0%".
right top = top right | То же, что "100% 0%".
left = left center = center left | То же, что "0% 50%".
center = center center | То же, что "50% 50%".
right = right center = center right | То же, что "100% 50%".
bottom left = left bottom | То же, что "0% 100%".
bottom = bottom center = center bottom | То же, что "50% 100%".
bottom right = right bottom | То же, что "100% 100%".

Пример:

BODY {
  background-image: url("banner.jpg");
  background-position: top center;
}

Если фоновый образ зафиксирован (см. свойство background-attachment), то его смещения вычисляются относительно окна обозревателя, а не области заполнения элемента. В следующем примере фоновый образ будет размещен в правом нижнем углу окна обозревателя.

BODY {
  background-image: url("logo.png");
  background-attachment: fixed;
  background-position: 100% 100%;
  background-repeat: no-repeat;
}

2.7.2.6. Свойства фона: свойство background

Синтаксис:  background: [<background-color> || <background-image> ||
                        <background-repeat> || <background-attachment> ||
                        <background-position>] | inherit
Начально:   не определено для сокращений
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   применимы только в <background-position>
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство background является сокращением для свойств background-color, background-image,
background-repeat, background-attachment и background-position. Оно позволяет задать все свойства фона одновременно. При этом сначала всем свойствам фона присваиваются их начальные значения, а затем изменяются значения тех свойств, которые явно заданы в данном свойстве.

В первом правиле следующего примера задается только цвет фона, во втором указаны все свойства фона:

BODY { background: blue }
P { background: url("bkgrd.gif") gray 50% repeat fixed }

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


WDH: CSS - Шрифты

Глава 2.8. Шрифты

2.8.1. Введение

Уже в стандарте CSS1 была заложена возможность использования различных шрифтов для отображения текста документа. При этом предполагалось, что необходимые шрифты установлены на компьютере-клиенте; если же их нет, то вместо них обозреватель должен был использовать собственные шрифты, близкие по характеристикам к требующимся.

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

Ниже изложены все способы работы со шрифтами, предоставляемые CSS. При этом свойства, управляющие отображением шрифтов и унаследованные из CSS1, описаны в разделе 2.8.2, а новые методы доступа к загружаемым шрифтам, появившиеся в CSS2, описываются в разделе 2.8.3.

2.8.2. Задание свойств шрифтов

2.8.2.1. Семейство шрифтов: свойство font-family

Синтаксис:  font-family: [[<имя-семейства> | <родовое-имя>],]*
                         [<имя-семейства> | <родовое-имя>] | inherit
Начально:   зависит от обозревателя
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство font-family задает список имен семейств шрифтов для отображения содержимого элемента. Этот список состоит из имен семейств шрифтов, разделенных запятыми. Имена семейств располагаются в порядке предпочтения. Например, следующее свойство

font-family: Verdana, Arial, sans-serif;

следует понимать так: "использовать шрифт Verdana; если его нет, то использовать шрифт Arial; если его нет, то использовать родовой шрифт sans-serif". Такой список необходим, поскольку мы заранее не знаем, какие именно шрифты установлены на компьютерах наших пользователей.

Имя семейства шрифтов может быть задано двумя способами:

  <имя-семейства>
    Задает название семейства шрифтов. Если это название содержит пробелы, то оно
    должно быть заключено в кавычки или апострофы.
  <родовое-имя>
    Одно из следующих имен: serif, sans-serif, cursive, fantasy и monospace.
    См. раздел 2.8.2.2.

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

2.8.2.2. Родовые имена шрифтов

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

serif (шрифт с засечками)

Это пропорциональные шрифты с засечками на буквах. Типичные примеры: Times New Roman, Bodoni, Garamond.

sans-serif (шрифт без засечек)

Это пропорциональные шрифты без засечек на буквах. Типичные примеры: Arial, Verdana, Helvetica, Tahoma.

cursive (каллиграфический шрифт)

Это шрифты, стилизованные под рукописный текст, обычно с типичными для него соединениями между буквами. Типичный пример: Zapf-Chancery.

fantasy (декоративный шрифт)

Это шрифты декоративного характера. Типичный пример: Western.

monospace (телетайпный шрифт)

Это шрифты фиксированной ширины, напоминающие шрифт пишущей машинки. Типичные примеры: Courier New, Prestige, Everson Mono.

То, какой именно конкретный шрифт используется в качестве реализации родового, зависит от обозревателя.

2.8.2.3. Стиль шрифта: свойство font-style

Синтаксис:  font-style: normal | italic | oblique | inherit
Начально:   normal
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту; oblique отображается как italic (4.0+)
              Netscape Navigator  Соответствует стандарту; oblique не поддерживается (4.0+)

Свойство font-style задает стиль шрифта для отображения содержимого элемента. Оно может иметь следующие значения:

normal | Обычный шрифт
italic | Курсивный шрифт
oblique | Наклонный шрифт

Например, следующий фрагмент

<P>
  <SPAN style="font-style: normal">Обычный шрифт. </SPAN>
  <SPAN style="font-style: italic">Курсивный шрифт. </SPAN>
  <SPAN style="font-style: oblique">Наклонный шрифт. </SPAN>
</P>

будет отображаться так:

Обычный шрифт. Курсивный шрифт. Наклонный шрифт.

2.8.2.4. Вариант шрифта: свойство font-variant

Синтаксис:  font-variant: normal | small-caps | inherit
Начально:   normal
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство font-variant задает вариант шрифта для отображения содержимого элемента. Оно может принимать следующие значения:

normal | Обычные буквы
small-caps | Малые прописные буквы

Например, следующий фрагмент

<P style="font-variant: small-caps">Малые прописные буквы.</P>

будет отображаться так:

Малые прописные буквы.

О преобразовании текста в прописные буквы см. также описание свойства text-transform.

2.8.2.5. Жирность шрифта: свойство font-weight

Синтаксис:  font-weight: normal | bold | bolder | lighter | 100 | 200 | 300 | 400 |
                         500 | 600 | 700 | 800 | 900 | inherit
Начально:   normal
Применимо:  ко всем элементам
Наследуемо: да, наследуется вычисленное значение
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство font-weight задает жирность шрифта для отображения содержимого элемента. Оно может принимать следующие значения:

100 - 900 | Задает жирность шрифта (чем больше значение, тем выше жирность шрифта).
normal | То же, что 400.
bold | То же, что 700.
bolder | Указывает, что шрифт должен быть более жирным, чем родительский шрифт.
lighter | Указывает, что шрифт должен быть менее жирным, чем родительский шрифт.

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

<P>
  <SPAN style="font-weight: 100">100 </SPAN>
  <SPAN style="font-weight: 200">200 </SPAN>
  <SPAN style="font-weight: 300">300 </SPAN>
  <SPAN style="font-weight: 400">400 </SPAN>
  <SPAN style="font-weight: 500">500 </SPAN>
  <SPAN style="font-weight: 600">600 </SPAN>
  <SPAN style="font-weight: 700">700 </SPAN>
  <SPAN style="font-weight: 800">800 </SPAN>
  <SPAN style="font-weight: 900">900 </SPAN>
</P>

может отображаться так:

100 200 300 400 500 600 700 800 900

2.8.2.6. Выключка шрифта: свойство font-stretch

Синтаксис:  font-stretch: normal | wider | narrower | ultra-condensed | extra-condensed |
                          condensed | semi-condensed | semi-expanded | expanded |
                          extra-expanded | ultra-expanded | inherit
Начально:   normal
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство font-stretch задает выключку шрифта, т. е. интервал между символами при отображении содержимого элемента. Оно может иметь следующие значения (в порядке увеличения выключки):

ultra-condensed | Сверхуплотненный шрифт
extra-condensed | Сильно уплотненный шрифт
condensed | Уплотненный шрифт
semi-condensed | Полууплотненный шрифт
normal | Обычный шрифт
semi-expanded | Полуразреженный шрифт
expanded | Разреженный шрифт
extra-expanded | Сильно разреженный шрифт
ultra-expanded | Сверхразреженный шрифт

Кроме того, имеется возможность задавать относительную разрядку шрифта:

wider | Указывает, что шрифт должен быть более разреженным, чем родительский шрифт.
narrower | Указывает, что шрифт должен быть более уплотненным, чем родительский шрифт.

То, как именно эти значения соответствуют реальной выключке шрифта, зависит от обозревателя. Пример:

<P><SPAN style="font-stretch: expanded">Разрядка моя </SPAN>(Л. И. Брежнев).</P>

2.8.2.7. Размер шрифта: свойство font-size

Синтаксис:  font-size: xx-small | x-small | small | medium | large | x-large |
                       xx-large | larger | smaller | <размер> | <процент> | inherit
Начально:   medium
Применимо:  ко всем элементам
Наследуемо: да, наследуется вычисленное значение
Проценты:   относительно размера отцовского шрифта
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство font-size задает размер шрифта для отображения содержимого элемента. Оно может задаваться несколькими способами:

  xx-small | x-small | small | medium | large | x-large | xx-large
    Задает абсолютный размер шрифта (от наименьшего к наибольшему).
  smaller  | larger
    Задает размер шрифта относительно родительского шрифта (меньше или больше).
  <размер>
    Задает фиксированный размер. Отрицательные размеры недопустимы.
  <процент>
    Вычисляется относительно размера отцовского шрифта.

Фактическое значение этого свойства может отличаться от вычисленного по двум причинам: если шрифт не имеет заданного размера или под воздействием свойства font-size-adjust.

CSS2 рекомендует, чтобы последовательные значения абсолютных размеров шрифта отличались для экрана в 1.2 раза, однако это зависит от обозревателя. Пример отображения семи абсолютных размеров шрифтов:

xx-small
x-small
small
medium
large
x-large
xx-large

2.8.2.8. Аспект шрифта: свойство font-size-adjust

Синтаксис:  font-size-adjust: none | <число> | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство font-size-adjust задает аспект шрифта. Поясним его назначение подробнее.

В шрифтах, содержащих и строчные, и прописные буквы, субъективный внешний вид символа (т. е. то, насколько он кажется искаженным человеческому глазу) зависит от соотношения значения свойства font-size и величины x-height; в действительности, определяющим является их отношение, которое называется аспектом шрифта (aspect value) и равно font-size / x-height. Чем меньше аспект шрифта, тем скорее шрифт становится искаженным при уменьшении его размеров. Поэтому простое задание размера шрифта может приводить к неприятному для глаза отображению его символов.

Допустим теперь, что свойство font-family содержит список из нескольких названий шрифтов. Ясно, что размеры шрифта для отображения данного элемента подбирались автором, исходя из того, что он будет отображаться первым шрифтом в списке. Если же этот шрифт отсутствует на компьютере-клиенте, то обозреватель использует второй шрифт из списка. Но аспект этого шрифта имеет иное значение, чем аспект первого и, в итоге, внешний вид отображаемого текста может быть искажен. Для того, чтобы уменьшить возможное искажение, необходимо пересчитать размер символов для второго шрифта с учетом изменения аспекта. Но для этого обозреватель должен знать аспект первого шрифта, который на его компьютере как раз и отсутствует! Именно для того, чтобы сообщить ему эту информацию, и было введено данное свойство, которое может иметь следующие значения:

  none
    Не корректировать размер шрифта.
  <число>
    Задает аспект шрифта, как описано выше.

Рассмотрим следующий пример:

P {font-family: Verdana, sans-serif; font-size: 14px; font-size-adjust: 0.58 }

Шрифт Verdana имеет аспект 0.58, что и указано в значении свойства font-size-adjust. Если этот шрифт недоступен, то обозреватель использует родовой шрифт sans-serif. Допустим, что аспект этого шрифта равен 0.46. Тогда обозреватель пересчитает размер шрифта sans-serif по формуле 14px * (0.58 / 0.46) = 17.65px и будет отображать абзацы шрифтом с размером 18px (с учетом округления).

2.8.2.9. Свойства шрифта: свойство font

Синтаксис:  font: [[<font-style> || <font-variant> || <font-weight>]? <font-size>
                  [/ <line-height> ]? <font-family>] | caption | icon | menu |
                  message-box | small-caption | status-bar | inherit
Начально:   не определено для сокрашений
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   применимы только в <font-size> и <line-height>
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство font является сокращением для свойств font-style, font-variant, font-weight, font-size, font-family и line-height. Оно позволяет задать все свойства шрифта одновременно. При этом сначала всем свойствам шрифта (включая font-stretch и font-size-adjust, хотя значения этих свойств данным свойством заданы быть не могут) присваиваются их начальные значения, а затем изменяются значения тех свойств, которые явно заданы в данном свойстве. Приведем несколько примеров:

P { font: 12pt/14pt sans-serif }
P { font: 80% sans-serif }
P { font: x-large/110% "new century schoolbook", serif }
P { font: bold italic large Georgia, serif; font-size-adjust: 1.16 }
P { font: normal small-caps 120%/120% fantasy }
P { font: oblique 12pt Helvetica, serif; font-stretch: condensed }

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

caption | Шрифт текста управляющих элементов (кнопок, меток и т. д.)
icon | Шрифт меток иконок
menu | Шрифт пунктов меню
message-box | Шрифт диалоговых окон
small-caption | Шрифт текста малых управляющих элементов
status-bar | Шрифт статусной строки

Пример отображения системных шрифтов:

caption
icon
menu
message-box
small-caption
status-bar

2.8.3. Подбор и загрузка шрифтов

2.8.3.1. Подбор шрифта

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

Подбор шрифта по его имени
В этом случае обозреватель использует шрифт, установленный на компьютере-клиенте и имеющий то же имя, что и запрошенный шрифт (при этом и гарнитура, и метрические характеристики шрифта могут оказаться отличными от авторских, если автор и пользователь загружали шрифты из разных источников).Таким образом, единственной основой для подбора шрифта является его имя. Это единственный метод, который использовался в CSS1 и который описан в предыдущем разделе.
Подбор шрифта по его характеристикам
В этом случае обозреватель использует шрифт, установленный на компьютере-клиенте и имеющий тот же внешний вид, что и запрошенный шрифт (при этом метрические характеристики шрифта могут оказаться отличными от авторских). Основой для подбора шрифта в данном случае служат такие его характеристики, как тип шрифта (текстовый или символьный), наличие или отсутствие засечек, жирность, высота строчных и прописных букв, наклон символов и т. п.
Синтез шрифта
В этом случае обозреватель создает шрифт, не только имеющий тот же внешний вид, что и запрошенный шрифт, но и соответствующий ему по метрическим характеристикам. Для такого синтеза шрифта необходима более точная информация, чем в схемам подбора шрифта. В частности, обозревателю необходимо знать точные ширины всех символов и правила отображения кодов Unicode в соответствующие изображения.
Загрузка шрифта
Обозреватель может, наконец, загрузить искомый шрифт из заданного Веб-узла аналогично тому, как при отображении документа загружаются графические образы, Java-аплеты и другие объекты. Это, однако, может приводить к существенной задержке при загрузке документа.

Из четырех перечисленных схем в современных обозревателях реализованы две: первая и последняя. Первая схема была описана в предыдущем разделе, а последняя, связанная с загрузкой шрифтов из Сети, описывается здесь.

2.8.3.2. Директива @font-face

Директива @font-face позволяет нам включать в свою таблицу стилей описания шрифтов. Она состоит из набора дескрипторов шрифта и их значений и имеет следующий вид:

@font-face {
  дескриптор: значение;
  ...
  дескриптор: значение;
}

Дескрипторы шрифтов можно разбить на три группы:

  1. дескрипторы, обеспечивающие связь между описанием шрифта и его использованием в свойствах CSS (они имеют те же названия, что и соответствующие свойства);
  2. дескриптор, задающий URI, на котором находятся данные шрифта для загрузки;
  3. дескрипторы, задающие дальнейшие характеристики шрифта и обеспечивающие связь описания шрифта с его данными.

Пример директивы @font-face:

@font-face {
  font-family: comic;			    // имя шрифта для CSS
  src: url(http://www.fonts.com/comic.eot); // адрес файла для загрузки
}
Поддержка:    Internet Explorer  Поддерживаются только дескрипторы font-family и src (5.0+)
              Netscape Navigator  Не поддерживается

2.8.3.3. Дескрипторы свойств шрифта

Эта группа дескрипторов имеет те названия, что и соответствующие свойства CSS и могут иметь одно значение или несколько значений, разделенных запятыми. Если дескриптор не указан в директиве @font-face, то принимается его начальное значение.

Синтаксис:  font-family: [<имя-семейства> | <родовое-имя>]
                         [,[<имя-семейства> | <родовое-имя>]]*
Начально:   зависит от обозревателя
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (5.0+)
              Netscape Navigator  Не поддерживается

Этот дескриптор задает список имен семейств шрифтов и принимает те же значения, что и свойство font-family.

Синтаксис:  font-style: all | [normal | italic | oblique][,[normal | italic | oblique]]*
Начально:   all
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает стиль шрифта и может принимать те же значения, что и свойство font-style. Единственное отличие состоит в том, что его значением может быть список стилей или значение all (все стили).

Синтаксис:  font-variant: [normal | small-caps][,[normal | small-caps]]*
Начально:   normal
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает вариант шрифта и может принимать те же значения, что и свойство font-variant. Единственное отличие состоит в том, что его значением может быть список вариантов.

Синтаксис:  font-weight: all | [normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 |
                         800 | 900][,[normal | bold | 100 | 200 | 300 | 400 | 500 | 600 |
                         700 | 800 | 900]]*
Начально:   all
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает жирность шрифта и может принимать те же значения, что и свойство font-weight, со следующими отличиями:

  • относительные значения (bolder и lighter) не допускаются;
  • значением может быть список жирностей;
  • значением может быть all (все жирности).
Синтаксис:  font-stretch: all | [normal | ultra-condensed | extra-condensed |
                          condensed | semi-condensed | semi-expanded | expanded |
                          extra-expanded | ultra-expanded][,[normal | ultra-condensed |
                          extra-condensed | condensed | semi-condensed | semi-expanded |
                          expanded | extra-expanded | ultra-expanded]]*
Начально:   normal
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает выключку шрифта и может принимать те же значения, что и свойство font-stretch, со следующими отличиями:

  • относительные значения (wider и narrower) не допускаются;
  • значением может быть список выключек;
  • значением может быть all (все выключки).
Синтаксис:  font-size: all | <размер> | [,<размер>]*
Начально:   all
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает размер шрифта и может принимать те же значения, что и свойство font-size, со следующими отличиями:

  • допускаются только абсолютные размеры шрифтов;
  • значением может быть список размеров;
  • значением может быть all (все размеры).

2.8.3.4. Дескриптор местоположения шрифта

Синтаксис:  src: [<uri> [format(<строка> [,<строка>]*)] | <спецификация-шрифта>]
                 [,<uri> [format(<строка> [,<строка>]*)] | <спецификация-шрифта>]*
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Поддерживается в виде src: url(URI), где URI указывает на шрифт
               формата Embedded OpenType (5.0+)
              Netscape Navigator  Не поддерживается

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

URI внешнего шрифта может сопровождаться подсказкой format(...), содержащей информацию о формате файла шрифта, для того, чтобы обозреватель мог игнорировать те шрифты, формат которых он не поддерживает. Спецификация CSS перечисляет следующие типичные форматы шрифтов:

Таблица 2.6. Форматы загружаемых шрифтов
Строка | Формат шрифта | Расширение файла
"embedded-opentype" | Embedded OpenType | .eot, .ote
"intellifont" | Intellifont |
"openType" | OpenType, включая TrueType Open | .ttf
"speedo" | Speedo |
"truedoc-pfr" | TrueDoc™ Portable Font Resource | .pfr
"truetype" | TrueType | .ttf
"truetype-gx" | TrueType с расширениями GX |
"type-1" | PostScript™ Type 1 | .pfb, .pfa

Примеры ссылок на загружаемые шрифты:

src: url(http://www.fonts.com/comic.eot);
src: url("http://site/magda-extra.pfr") format("truedoc-pfr");

Ссылка на локальный шрифт задается спецификацией шрифта вида local(имя), где имя - это полное название шрифта в операционной системе (например, в Windows имя должно совпадать с названием шрифта в системном реестре). Пример ссылки на локальный шрифт:

src: local("BT Century 751 No. 2 Semi Bold Italic");

Пример полного синтаксиса:

src: local("T-26 Typeka Mix"), url("http://cgi-bin/bar?stuff")
     format("type-1", "opentype");

Последний пример содержит две ссылки. Сначала обозреватель попытается загрузить локальный шрифт "T-26 Typeka Mix", а затем, если он не найден, будет загружать шрифт с узла"http://cgi-bin/bar?stuff". В данном случае это сценарий сервера, который может генерировать искомый шрифт в двух форматах: Type 1 и OpenType.

2.8.3.5. Дескриптор диапазона символов

Синтаксис:  unicode-range: [<диапазон>][,<диапазон>]*
Начально:   U+0-7FFFFFFF
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает диапазон символов шрифта. Его значением является список диапазонов символов Unicode, которые имеются в данном шрифте. (См. перечень стандартных подмножеств Unicode.)

<Диапазон> задается шестнадцатеричным числом, соответствующим коду символа в Unicode, с префиксом "U+". При этом знак вопроса "?" вместо шестнадцатеричной цифры означает, что она принимает любое значение (0 - F), например:

unicode-range: U+20A7; // один символ (символ испанской песеты)
unicode-range: U+215?; // диапазон от 2150 до 215F (символы простых дробей)
unicode-range: U+00??; // диапазон от 0000 до 00FF (базовая латиница)
unicode-range: U+4??; // диапазон от 0400 до 04FF (кириллица)

Для задания диапазона используется также пара чисел, разделенных дефисом "-", например:

unicode-range: U+4E00-9FFF; // диапазон от 4E00 до 9FFF (унифицированные иероглифы)

В общем случае, значение данного дескриптора является списком таких диапазонов, охватывающим все символы, содержащиеся в данном шрифте, например:

unicode-range: U+370-3FF, U+1F??; // современные греческие буквы (370-3FF) и
                                  // древнегреческие политонические буквы (1F00-1FFF)
unicode-range: U+3000-303F, U+3100-312F, U+32??, U+33??, U+4E00-9FFF, U+F900-FAFF,
               U+FE30-FE4F;       // полный китайский шрифт

2.8.3.6. Дескриптор координатной системы

Синтаксис:  units-per-em: <число>
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает координатную систему метрики шрифта. Его значением является количество координатных единиц в стороне квадрата, который содержит наибольший символ шрифта (обычно это буква 'M', отсюда название em-квадрат). Это значение обычно определяется форматом шрифта. Типичные примеры его значений: 250 (Intellifont), 1000 (Type 1) и 2048 (TrueType, TrueType GX и OpenType).

2.8.3.7. Дескрипторы для подбора шрифтов

Эта группа необязательных дескрипторов предназначена для подбора шрифта по его характеристикам.

Синтаксис:  panose-1: <целое> {10}
Начально:   0 0 0 0 0 0 0 0 0 0
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Это дескриптор чисел Panose-1. Его значением является десять целых чисел, разделенных пробелами. Panose-1 — это стандартный механизм классификации и подбора шрифтов TrueType, пригодный для всех шрифтов, имеющих строчные и прописные буквы (латиница, кириллица, греческое письмо), но не позволяющий классифицировать другие системы письма (например, однорегистровые письменности, такие, как армянское, арабское или ивритское письмо, и иероглифические, такие, как китайское, корейское или японское письмо). Подробности см. в http://www.fonts.com/hp/panose/greybook Внешняя ссылка.

Синтаксис:  stemv: <число>
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает ширину вертикального штриха (vertical stem width) символов шрифта. Если он присутствует в описании шрифта, то должен присутствовать и дескриптор units-per-em.

Синтаксис:  stemh: <число>
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает ширину горизонтального штриха (horizontal stem width) символов шрифта. Если он присутствует в описании шрифта, то должен присутствовать и дескриптор units-per-em.

Синтаксис:  slope: <число>
Начально:   0
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает угол наклона (vertical stroke angle) в градусах символов шрифта от вертикали против часовой стрелки (поэтому если символы наклонены вправо, то он отрицателен).

Синтаксис:  cap-height: <число>
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает высоту прописных букв шрифта. Если он присутствует в описании шрифта, то должен присутствовать и дескриптор units-per-em.

Синтаксис:  x-height: <число>
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает высоту строчных букв шрифта. Если он присутствует в описании шрифта, то должен присутствовать и дескриптор units-per-em.

Синтаксис:  ascent: <число>
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает максимальную высоту символов шрифта без учета диакритических знаков (maximum unaccented height). Если он присутствует в описании шрифта, то должен присутствовать и дескриптор units-per-em.

Синтаксис:  descent: <число>
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает максимальную глубину символов шрифта без учета диакритических знаков (maximum unaccented depth). Если он присутствует в описании шрифта, то должен присутствовать и дескриптор units-per-em.

2.8.3.8. Дескрипторы для синтеза шрифтов

Эта группа необязательных дескрипторов предназначена для синтеза шрифта и задает его дополнительные метрические характеристики.

Синтаксис:  widths: [<диапазон>]?[<число>]+[,[<диапазон>]?[<число>]+]
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает ширины символов шрифта. Его значением является список диапазонов символов, за каждым из которых следует одно или более значение ширины. Если этот дескриптор присутствует в описании шрифта, то должен присутствовать и дескриптор units-per-em. Если диапазон опущен, то он предполагается равным U+0-7FFFFFFF, т. е. распространяется на все символы шрифта. Если количество заданных ширин меньше, чем символов в диапазоне, то последняя из ширин применяется ко всем символам, чья ширина не указана; если же ширин больше, чем символов, то лишние ширины игнорируются. Поясним сказанное на примерах:

widths: U+4E00-4E1F 1736 1874 1692;
widths: U+1A?? 1490, U+215? 1473 1838 1927 1684 1356 1792
        1815 1848 1870 1492 1715 1745 1584 1992 1978 1770;

В первом примере указан диапазон из 32 символов, от 4E00 до 4E1F. Первый символ (с кодом 4E00) будет иметь ширину 1736, второй символ — ширину 1874, третий — ширину 1692. Поскольку ширин задано меньше, чем символов, последняя ширина (1692) будет присвоена всем остальным символам. Во втором примере задается единая ширина для 256 символов в диапазоне от 1A00 до 1AFF, а затем явно указываются ширины еще для 16 символов.

Синтаксис:  bbox: <число>,<число>,<число>,<число>
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор определяет максимальный объемлющий прямоугольник (maximal bounding box) шрифта. Его значением является список из четырех чисел, которые задают соответственно абсциссу левого нижнего угла, ординату левого нижнего угла, абсциссу верхнего правого угла и ординату верхнего правого угла объемлющего прямоугольника для всех символов шрифта.

Синтаксис:  definition-src: <uri>
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

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

2.8.3.9. Дескрипторы для выравнивания шрифтов

Эта группа необязательных дескрипторов предназначена для выравнивания шрифта относительно других шрифтов.

Синтаксис:  baseline: <число>
Начально:   0
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает нижнюю базовую линию символов шрифта. Если он присутствует в описании шрифта, то должен присутствовать и дескриптор units-per-em.

Синтаксис:  centerline: <число>
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает центральную базовую линию символов шрифта. Если он присутствует в описании шрифта, то должен присутствовать и дескриптор units-per-em.

Синтаксис:  mathline: <число>
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает математическую базовую линию символов шрифта. Если он присутствует в описании шрифта, то должен присутствовать и дескриптор units-per-em.

Синтаксис:  topline: <число>
Начально:   не определено
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Этот дескриптор задает верхнюю базовую линию символов шрифта. Если он присутствует в описании шрифта, то должен присутствовать и дескриптор units-per-em.


WDH: CSS - Текст

Глава 2.9. Текст

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

2.9.1. Красная строка: свойство text-indent

Синтаксис:  text-indent: <размер> | <процент> | inherit
Начально:   0
Применимо:  к блочным элементам
Наследуемо: да
Проценты:   относительно ширины вмещающего блока
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту (4.0+)

Свойство text-indent задает отступ первой строки при отображении блочных элементов. Отступ может быть отрицательным и задается одним из следующих способов:

  <размер>
    Задает фиксированный размер.
  <процент>
    Вычисляется относительно ширины вмещающего блока.

Пример: следующее правило указывает, что абзацы должны начинаться с красной строки, равной 3em:

P { text-indent: 3em }

2.9.2. Выравнивание текста: свойство text-align

Синтаксис:  text-align: left | right | center | justify | <строка> | inherit
Начально:   зависит от обозревателя и направления вывода текста
Применимо:  к блочным элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Поддерживаются только left, right, center и justify (4.0+)
              Netscape Navigator  Поддерживаются только left, right и center (4.0+)

Свойство text-align задает выравнивание текста при отображении блочных элементов. Оно может принимать следующие значения:

left | Выравнивание по левому краю.
right | Выравнивание по правому краю.
center | Выравнивание по центру.
justify | Выравнивание по левому краю с выключкой по правому краю.
<строка> | Задает строку, по которой будут выравниваться ячейки в столбце таблицы. Это значение применимо только к ячейкам таблицы. Для остальных элементов должно трактоваться как left или right в зависимости от значения свойства direction (ltr или rtl соответственно).

Пример: следующее правило указывает, что все элементы, содержашиеся в элементе DIV с атрибутом class="center", должны выравниваться по центру окна обозревателя (это обеспечивается тем, что данное свойство является наследуемым):

DIV.center { text-align: center }

2.9.3. Украшение текста: свойство text-decoration

Синтаксис:  text-decoration: none | [underline || overline || line-through || blink] | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту; blink не поддерживается (4.0+)
              Netscape Navigator  Соответствует стандарту; overline не поддерживается (4.0+)

Свойство text-decoration задает украшение текста при отображении элементов. Оно может принимать следующие значения:

none | Обычный текст. | пример
underline | Подчеркнутый текст. | пример
overline | Надчеркнутый текст. | пример
line-through | Перечеркнутый текст. | пример
blink | Мигающий текст. | пример

Это свойство не наследуемо, но все потомки блочного элемента будут иметь его украшения текста. Цвет этих украшений будет тем же, что у блочного элемента, даже если потомки имеют другое значение свойства color.

Пример: следующее правило указывает, что гиперссылки должны подчеркиваться:

A:link { text-decoration: underline }

2.9.4. Преобразование текста: свойство text-transform

Синтаксис:  text-transform: none | capitalize | uppercase | lowercase | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Соответствует стандарту; реализовано с ошибками (4.0+)

Свойство text-transform задает преобразование текста при отображении элементов. Оно может принимать следующие значения (Netscape Navigator 4.x отображает примеры неверно!):

none | Без преобразования. | Это пример.
capitalize | Делать первую букву каждого слова прописной. | Это пример.
uppercase | Выводить текст прописными буквами. | Это пример.
lowercase | Выводить текст строчными буквами. | Это пример.

Фактическое преобразование символов зависит от языка, на котором написан текст. Пример: следующее правило указывает, что заголовок H1 должен выводиться прописными буквами:

H1 { text-transform: uppercase }

2.9.5. Задание тени: свойство text-shadow

Синтаксис:  text-shadow: none | [<цвет> || <размер> <размер> <размер>?,]*
                         [<цвет> || <размер> <размер> <размер>?] | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство text-shadow задает тень текста при отображении элементов. Его значением является список эффектов, разделенных запятыми. Эти эффекты должны применяться к тексту в том порядке, как они заданы, и могут перекрываться при отображении друг с другом (но не с самим текстом!).

Каждый эффект задается обязательным смещением от текста и необязательными цветом тени и радиусом пятна. Смещение тени относительно текста задается двумя значениями типа <размер>, первое из которых указывает горизонтальное смещение тени вправо от текста, а второе — вертикальное смещение тени вниз от текста. Эти значения могут быть отрицательными, что означает смещение тени влево или вверх относительно текста соответственно.

После смещения может быть указан необязательный радиус пятна. Точный алгоритм вычисления пятна не задан и зависит от обозревателя.

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

Тени могут применяться к псевдоэлементам :first-letter и :first-line.

Примеры:

H1 { text-shadow: 0.2em 0.3em }
H2 { text-shadow: 3px 3px 5px red }
H3 { text-shadow: 3px 3px red, yellow -3px 3px 2px, 3px -3px }

В первом примере задана тень со смещением 0.2em правее текста и 0.3em ниже его. Во втором примере заданы смещения по 3px правее и ниже текста, радиус пятна 5px и красный цвет тени. Последний пример содержит список из трех эффектов.

2.9.6. Интервал между буквами: свойство letter-spacing

Синтаксис:  letter-spacing: normal | <размер> | inherit
Начально:   normal
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство letter-spacing задает интервал между буквами при отображении текста. Его значение задается одним из следующих способов:

  normal
    Стандартный интервал для текущего шрифта.
  <размер>
    Задает интервал в дополнение к стандартному интервалу. Это значение
    может быть отрицательным.

Пример: следующее правило увеличивает интервал между символами в заголовке H1 на 0.5em:

H1 { letter-spacing: 0.5em }

2.9.7. Интервал между словами: свойство word-spacing

Синтаксис:  word-spacing: normal | <размер> | inherit
Начально:   normal
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство word-spacing задает интервал между словами при отображении текста. Его значение задается одним из следующих способов:

  normal
    Стандартный интервал для текущего шрифта.
  <размер>
    Задает интервал в дополнение к стандартному интервалу. Это значение
    может быть отрицательным.

Алгоритм выбора интервалов между словами зависит от обозревателя и от наличия выключки текста по правому краю (см. свойство text-align).

Пример: следующее правило увеличивает интервал между словами в заголовке H1 на 1em:

H1 { word-spacing: 1em }

2.9.8. Обработка пробелов: свойство white-space

Синтаксис:  white-space: normal | pre | nowrap | inherit
Начально:   normal
Применимо:  к блочным элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Поддерживаются только значения normal и pre (4.0+)

Свойство white-space задает правила обработки пробелов при отображении блочного элемента. Оно может принимать следующие значения:

normal | Пробелы и разрывы строк отображаются обычным образом.
pre | Пробелы и разрывы строк отображаются как в форматированном тексте.
nowrap | Пробелы отображаются обычным образом, но разрывы строк запрещены.

Пример: следующие правила соответствуют правилам HTML по отображению элементов P и PRE:

P { white-space: normal }
PRE { white-space: pre }


WDH: CSS - Таблицы

Глава 2.10. Таблицы

2.10.1. Общее описание

Таблицы обеспечивают возможность расположения многомерных данных по строкам и столбцам. Структура и содержание таблицы описываются на языке документа, а CSS позволяет описать правила ее отображения — либо визуального, либо звукового.

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

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

CSS не требует, чтобы язык документа включал в себя элементы для каждой из перечисленных составляющих таблиц. Например, XML-приложения не содержат предопределенных табличных структур. Тем не менее, авторы могут отобразить элементы на таблицы с помощью свойства display. Для присвоения табличной семантики произвольным элементам языка документа используются следующие значения этого свойства:

Значение | Элемент HTML | Описание
table | TABLE | Блочная таблица. Элемент должен отображаться как блочный.
inline-table | TABLE | Текстовая таблица. Элемент должен отображаться как текстовый.
table-row | TR | Элемент должен отображаться как строка таблицы.
table-row-group | TBODY | Элемент описывает группу строк таблицы.
table-header-group | THEAD | Элемент должен отображаться как группа надзаголовков таблицы. Отображается перед всеми остальными группами строк таблицы. При выводе на принтер может использоваться в качестве надзаголовка при печати каждой страницы таблицы.
table-footer-group | TFOOT | Элемент должен отображаться как группа подзаголовков таблицы. Отображается после всех остальных групп строк таблицы. При выводе на принтер может использоваться в качестве подзаголовка при печати каждой страницы таблицы.
table-column-group | COLGROUP | Элемент описывает группу столбцов таблицы. Не отображается, но может влиять на отображение столбцов данной группы.
table-column | COL | Элемент описывает столбец таблицы. Не отображается, но может влиять на отображение ячеек данного столбца.
table-cell | TD, TH | Элемент должен отображаться как ячейка таблицы.
table-caption | CAPTION | Элемент должен отображаться как заголовок таблицы.

Таблица стилей для HTML по умолчанию задает следующие свойства элементов:

TABLE    { display: table }
TR       { display: table-row }
THEAD    { display: table-header-group }
TBODY    { display: table-row-group }
TFOOT    { display: table-footer-group }
COL      { display: table-column }
COLGROUP { display: table-column-group }
TD, TH   { display: table-cell }
CAPTION  { display: table-caption }
Поддержка:    Internet Explorer  Поддерживаются только table-header-group и table-footer-group (5.0+)
              Netscape Navigator  Не поддерживаются

2.10.2. Селекторы столбцов

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

border
Свойства рамок применяются к столбцам только тогда, когда таблица имеет слившиеся рамки. В этом случае обозреватель выбирает рамку для каждой границы ячейки с учетом рамок столбцов, как описано в п. 2.10.4.1.
background
Свойства фона столбца применяются к его ячейкам только в том случае, когда и строка, и сама ячейка имеют прозрачный фон.
width
Это свойство задает минимальную ширину столбца.
visibility
Если это свойство для столбца имеет значение collapse, то ячейки этого столбца не отображаются, а те ячейки, которые распространяются на несколько столбцов, обрезаются. Кроме того, ширина таблицы уменьшается на ширину данного столбца. Подробности см. ниже в описании динамических эффектов. Другие значения этого свойства игнорируются.

Приведем два примера:

TABLE { border-style: hidden }
COL { border-style: none solid }

TABLE { table-layout: fixed }
COL.total { width: 5em }

В первом примере показано, как реализовать на языке CSS значение cols атрибута rules таблиц HTML (выделение рамкой только границ столбцов). Второй пример показывает, как задать фиксированную ширину столбца.

2.10.3. Визуальное отображение таблиц

2.10.3.1. Расположение заголовка таблицы: свойство caption-side

Синтаксис:  caption-side: top | bottom | left | right | inherit
Начально:   top
Применимо:  к элементам типа table-caption
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство caption-side определяет расположение заголовка таблицы относительно тела таблицы при ее отображении. Оно может принимать следующие значения:

top | Заголовок отображается над телом таблицы.
bottom | Заголовок отображается под телом таблицы.
left | Заголовок отображается слева от тела таблицы.
right | Заголовок отображается справа от тела таблицы.

Отображение заголовка над или под телом таблицы производится так же, как отображение двух последовательно расположенных блочных элементов. При отображении заголовка слева или справа от тела таблицы следует явно задавать его ширину свойством width, т. к. не ясно, что в данном случае означает значение auto, принятое по умолчанию. Горизонтальное выравнивание заголовка задается свойством text-align, а вертикальное — свойством vertical-align, которое должно иметь значение top, middle или bottom.

В следующем примере заголовок таблицы размещается слева от нее, сама таблица центрируется (заданием левой и правой границам значения auto), и весь прямоугольник, объемлющий заголовок и тело таблицы, сдвигается влево на ширину заголовка.

BODY {
  margin-left: 10em
}
TABLE {
  margin-left: auto;
  margin-right: auto
}
CAPTION {
  caption-side: left;
  margin-left: -10em;
  width: 10em;
  text-align: right;
  vertical-align: bottom
}

2.10.3.2. Задание ширины столбцов: свойство table-layout

Синтаксис:  table-layout: auto | fixed | inherit
Начально:   auto
Применимо:  к элементам типа table и inline-table
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (5.0+)
              Netscape Navigator  Не поддерживается

Свойство table-layout определяет способ вычисления ширины столбцов таблицы при ее отображении. Оно может принимать следующие значения:

auto | Автоматическое вычисление ширины столбцов.
fixed | Фиксированная ширина столбцов.

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

  1. Если для столбца задано свойство width и его значение отлично от auto, то оно задает ширину столбца.
  2. В противном случае, если для ячейки в первой строке таблицы задано свойство width и его значение отлично от auto, то оно задает ширину столбца.
  3. Между оставшимися столбцами поровну делится оставшееся пространство таблицы по горизонтали.

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

Автоматическое вычисление ширины столбцов занимает больше времени, так как требует просмотра всей таблицы, но дает более аккуратные результаты. Оно основано на том, что для каждого столбца просматриваются все его ячейки, и ширина столбца определяется шириной наибольшей части ячейки, которая не может быть разорвана переходом на новую строку. Если при этом для столбца задано свойство width и его значение отлично от auto, то оно задает минимальную ширину столбца. Задание этого значения в процентах означает процент от ширины всей таблицы.

В следующем примере ширина столбцов таблицы фиксирована и равна 100px, 300px и 200px соответственно:

<TABLE style="table-layout:fixed; width: 600px>
<COL style="width: 100px"><COL style="width: 300px"><COL style="width: 200px">
...
</TABLE>

2.10.3.3. Динамические эффекты при отображении таблиц

Свойство visibility может принимать значение collapse для строк, групп строк, столбцов и групп столбцов. Это значение приводит к тому, что строка или столбец таблицы полностью исчезают с экрана, а пространство, которое они занимали, становится доступным для отображения другого содержания. Однако, подавление отображения срок или столбцов не вызывает перерасчета высот и ширин ячеек таблицы. Благодаря этому становится возможным динамически удалять строки и столбцы таблицы, не изменяя в остальном ее внешнего вида.

2.10.4. Отображение рамок таблиц

2.10.4.1. Задание типа рамок: свойство border-collapse

Синтаксис:  border-collapse: collapse | separate | inherit
Начально:   collapse
Применимо:  к элементам типа table и inline-table
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (5.0+)
              Netscape Navigator  Не поддерживается

Свойство border-collapse задает тип рамок таблицы. CSS поддерживает для таблиц два типа рамок: слившиеся рамки (collapse) и раздельные рамки (separate). Раздельные рамки соответствуют стандарту HTML; слившиеся рамки отличаются тем, что соседние рамки сливаются в единую рамку. Различие между ними наглядно демонстрируется следующим примером (Netscape Navigator отображает его неверно!):

Слившиеся рамки
Ячейка | Ячейка | Ячейка
Ячейка | Ячейка | Ячейка
Ячейка | Ячейка | Ячейка
Раздельные рамки
Ячейка | Ячейка | Ячейка
Ячейка | Ячейка | Ячейка
Ячейка | Ячейка | Ячейка

Тип рамки таблицы определяет и то, какие свойства рамки применимы к данной таблице, и то, как именно отображается тот или иной стиль рамки.

В таблице с раздельными рамками каждая ячейка имеет собственную рамку, поэтому задание рамок для строк, столбцов, групп строк и групп столбцов игнорируется обозревателем. К таблице с раздельными рамками применимы свойства border-spacing и empty-cells; для таблиц со слившимися рамками они игнорируются.

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

  1. Рамки со значением border-style, равным hidden, имеют приоритет над остальными конфликтующими рамками. Любая рамка этого стиля подавляет все рамки в данном месте таблицы.
  2. Рамки со стилем none имеют наименьший приоритет. Рамка не будет отображаться только тогда, когда все элементы, расположенные в данном месте, имеют этот стиль рамки.
  3. В остальных случаях более широкие рамки имеют приоритет перед более узкими. Если же несколько рамок имеют одно значение border-width, то стили рамок в порядке убывания приоритетов таковы: double, solid, dashed, dotted, ridge, outset, groove, inset.
  4. Если рамки отличаются только цветами, то порядок убывания приоритетов таков: рамка ячейки, рамка строки, рамка группы строк, рамка столбца, рамка группы столбцов, рамка таблицы.

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

hidden
  Скрытая рамка. То же, что none, но для слившихся рамок подавляет все остальные рамки.
inset
  Для раздельных рамок изображается в виде трехмерной врезки;
  для слившихся рамок совпадает с groove.
outset
  Для раздельных рамок изображается в виде трехмерной вырезки;
  для слившихся рамок совпадает с ridge.

2.10.4.2. Расстояние между рамками: свойство border-spacing

Синтаксис:  border-spacing: <размер> <размер> ? | inherit
Начально:   0
Применимо:  к элементам типа table и inline-table
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство border-spacing задает расстояние между соседними рамками таблицы в том случае, когда таблица имеет раздельные рамки. Если указан только один размер, то он задает расстояние между рамками и по вертикали, и по горизонтали. Если указаны два размера, то первый задает расстояние между рамками по горизонтали, а второй — по вертикали. Расстояния не могут быть отрицательными. Пример:

TABLE { border: outset 10pt; border-collapse: separate; border-spacing: 15pt }

2.10.4.3. Рамки вокруг пустых ячеек: свойство empty-cells

Синтаксис:  empty-cells: show | hide | inherit
Начально:   show
Применимо:  к элементам типа table-cell
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство empty-cells управляет отображением рамок вокруг пустых ячеек в том случае, когда таблица имеет раздельные рамки. Ячейка таблицы считается пустой, если не содержит ничего, кроме пробелов ("\20"), табуляций ("\09"), переводов строки ("\0D")и возвратов каретки ("\0A"). Кроме того, пустыми считаются ячейки, у которых значение свойства visibility равно hidden.

Если данное свойство имеет значение show, то рамки вокруг пустых ячеек отображаются обычным образом. Если оно имеет значение hide, то рамки вокруг пустых ячеек не отображаются; более того, если вся строка таблицы состоит из пустых ячеек, то она ведет себя так, как если бы имела свойство display со значением none. Пример:

TABLE { border-collapse: separate; empty-cells: show }

2.10.5. Звуковое отображение таблиц: свойство speak-header

Синтаксис:  speak-header: once | always | inherit
Начально:   once
Применимо:  к элементам, содержащим заголовки таблиц
Наследуемо: да
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Если таблица произносится синтезатором речи, то взаимоотношения между ячейками данных и ячейками заголовков выражаются иначе, чем при визуальном отображении таблицы. Свойство speak-header позволяет нам указать, в какой момент должны произноситься заголовки. Оно может принимать следующие значения:

once
  Заголовок произносится один раз, перед серией ячеек.
always
  Заголовок произносится перед каждой ячейкой, к которой он относится.

Способ задания заголовков зависит от языка документа. В частности, HTML содержит три атрибута элементов TD и TH (headers, scope и axis), которые позволяют связать с каждой ячейкой таблицы соответствующий заголовок.

Пример:

TH.totals { speak-header: always }


WDH: CSS - Генерация содержимого, нумерация и списки

Глава 2.11. Генерация содержимого, нумерация и списки

2.11.1. Понятие генерации содержимого

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

  • генерация содержимого с помощью псевдоэлементов :before и :after;
  • автоматическая нумерация с использованием счетчиков;
  • создание маркеров и отображение списков.

2.11.2. Генерация содержимого

2.11.2.1. Задание содержимого: свойство content

Синтаксис:  content: [<строка> | <uri> | <счетчик> | attr(X) | open-quote | close-quote |
                     no-open-quote | no-close-quote]+ | inherit
Начально:   пустая строка
Применимо:  к псевдоэлементам :before и :after
Наследуемо: нет
Проценты:   не используются
Устройства: все
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство content используется совместно с псевдоэлементами :before и :after для генерации содержимого. Оно задает текст содержимого для вставки и может принимать следующие значения:

<строка>
  Вставляется данный текст.
<uri>
  Вставляется содержимое ресурса с данным URI.
<счетчик>
  Вставляется значение указанного счетчика или счетчиков.
attr(X)
  Вставляется значение атрибута X субъекта селектора.
open-quote
  Вставляется открывающая кавычка (см. свойство quotes).
close-quote
  Вставляется закрывающая кавычка (см. свойство quotes).
no-open-quote
  Не вставляется ничего, но счетчик вложения кавычек увеличивается на 1.
no-close-quote
  Не вставляется ничего, но счетчик вложения кавычек уменьшается на 1.

Место вставки текста определяется псевдоэлементом в селекторе данного элемента — :before означает вставку перед элементом, а :after после него. Способ вставки (текстовый, блочный или маркер) задается значением свойства display. Например, следующая декларация задает вывод текста "Конец документа" в центре последней строки экрана.

BODY:after {
  content: "Конец документа";
  display: block;
  margin-top: 2em;
  text-align: center;
}

2.11.2.2. Кавычки: свойство quotes

Синтаксис:  quotes: [<строка> <строка>]+ | none | inherit
Начально:   зависит от обозревателя
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство quotes задает символы кавычек и может принимать следующие значения:

none
  Значения open-quote и close-quote свойства content не генерируют символов кавычек.
[<строка> <строка>]+
  Задает пары символов кавычек для значений open-quote и close-quote свойства content.
  Каждая пара соответствует очередному уровню вложения кавычек.

В качестве кавычек обычно используются следующие символы Unicode:

Код (16-ный) | Вид | Описание
0022 | " | двойная кавычка
0027 | ' | одинарная кавычка (апостроф)
2039 | ‹ | открывающая одинарная угловая кавычка
203A | › | закрывающая одинарная угловая кавычка
00AB | « | открывающая двойная угловая кавычка
00BB | » | закрывающая двойная угловая кавычка
2018 | ‘ | открывающая одинарная кавычка
2019 | ’ | закрывающая одинарная кавычка
201A | ‚ | закрывающая нижняя одинарная кавычка
201C | “ | открывающая двойная кавычка
201D | ” | закрывающая двойная кавычка
201E | „ | закрывающая нижняя двойная кавычка

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

Q { quotes: "\201C" "\201D" "\2018" "\2019" }
Q:before ( content: open-quote }
Q:after ( content: close-quote }

2.11.3. Автоматическая нумерация

2.11.3.1. Счетчики

Для автоматической нумерации в CSS используются счетчики. Счетчик — это идентификатор, которому присваиваются целые значения с помощью свойств counter-reset и counter-increment. Текущее значение счетчика может использоваться при генерации содержимого свойством content.

По умолчанию, счетчик обозначается как counter(name) и его значением являются десятичные числа. Вместе с тем мы можем задавать стиль отображения значений счетчика в формате counter(name,style), где style может принимать любые значения свойства list-style-type. Отметим, что стиль none допустим: counter(name,none) генерирует пустую строку. Примеры:

H1:before        { content: counter(chapter, upper-latin) ". " }
H2:before        { content: counter(section, upper-roman) " - " }
BLOCKQUOTE:after { content: " [" counter(bq, hebrew) "]" }
DIV.note:before  { content: counter(notecnt, disc) " " }
P:before         { content: counter(pcount, none) }

Элементы со значением none свойства display не изменяют значения счетчиков. С другой стороны, элементы со значением hidden свойства visibility изменяют их значения, как обычные элементы.

Поддержка:    Internet Explorer  Не поддерживаются
              Netscape Navigator  Не поддерживаются

2.11.3.2. Начальное значение счетчика: свойство counter-reset

Синтаксис:  counter-reset: [<идентификатор> <целое> ?]+ | none | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: все
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство counter-reset задает начальные значения счетчиков. Его значением является список имен счетчиков, за каждым из которых может следовать необязательное целое число; если такое число указано, то оно становится значением счетчика, если нет, то счетчику присваивается значение 0.

Если элемент и задает начальное значение счетчика, и использует его значение в свойстве content, то значение используется после присваивания.

Данное свойство следует правилам каскадности. Поэтому следующие декларации

H1 { counter-reset: chapter 1 }
H1 { counter-reset: section -1 }

зададут только значение счетчика section. Для задания начальных значений обоих счетчиков их нужно указать в одном правиле:

H1 { counter-reset: chapter 1 section -1 }

2.11.3.3. Изменение значения счетчика: свойство counter-increment

Синтаксис:  counter-increment: [<идентификатор> <целое> ?]+ | none | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: все
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство counter-increment изменяет значения счетчиков.Его значением является список имен счетчиков, за каждым из которых может следовать необязательное целое число; если такое число указано, то оно добавляется к текущему значению счетчика, если нет, то значение счетчика увеличивается на 1. Целое число может быть и нулем, и отрицательным.

Если использован счетчик, которому не присвоено начальное значение, то оно принимается равным нулю. Если элемент и сбрасывает, и изменяет значение счетчика, то оно сначала сбрасывается, а затем изменяется. Если элемент и изменяет значение счетчика, и использует его значение в свойстве content, то значение используется после изменения значения.

Следующий пример показывает, как нумеровать главы текстом вида "Глава 1. ", а разделы — текстом вида "1.1 " и т. д.

H1:before {
  counter-increment: chapter;  /* Увеличить chapter на 1 */
  counter-reset: section;      /* Обнулить section */
  content: "Глава " counter(chapter) ". ";
}
H2:before {
  counter-increment: section;  /* Увеличить section на 1 */
  content: counter(chapter) "." counter(section) " ";
}

2.11.4. Маркеры

2.11.4.1. Создание маркеров

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

Маркеры создаются присваиванием значения marker свойству display в псевдоэлементах :before и :after. Прямоугольник маркера форматируется как однострочный прямоугольник, расположенный вне главного прямоугольника элемента. Он создается только в том случае, когда свойство content псевдоэлемента действительно генерирует содержание. Прямоугольник маркера имеет рамку и заполнитель, но не имеет границ.

Для псевдоэлемента :before базовая линия текста прямоугольника маркера вертикально выравнивается по базовой линии текста первой строки содержимого главного прямоугольника, а для псевдоэлемента :after — по базовой линии текста последней строки. Если главный прямоугольник не содержит текста, то выравнивание производится соответственно по верхнему и нижнему внешнему краю главного прямоугольника.

Высота прямоугольника маркера задается свойством line-height. Вертикальное выравнивание маркера внутри его прямоугольника задается свойством vertical-align.

Если свойство width имеет значение auto, то ширина прямоугольника маркера определяется его содержимым, в остальных случаях — значением width. Если при этом ширина содержимого больше ширины прямоугольника, то обрезка определяется значением свойства overflow. Прямоугольник маркера может накладываться на главный прямоугольник. Если ширина содержимого меньше ширины прямоугольника, то горизонтальное выравнивание содержимого задается свойством text-align.

Свойство marker-offset задает смещение прямоугольника маркера по горизонтали относительно главного прямоугольника, точнее, расстояние между ближайшими краями их рамок.

Если свойство display имеет значение marker для содержимого, сгенерированного элементом, у которого значение display равно list-item, то прямоугольник маркера, сгенерированный для :before, замещает обычный маркер элемента списка.

Например, следующий HTML-документ

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
  <TITLE>Создание списка с маркерами</TITLE>
  <STYLE type="text/css">
    LI:before {
      display: marker;
      counter-increment: mycounter;
      content: counter(mycounter, lower-roman) ". ";
    }
  </STYLE>
</HEAD>
<BODY>
  <OL>
    <LI>Первый элемент списка.</LI>
    <LI>Второй элемент списка.</LI>
    <LI>Третий элемент списка.</LI>
  </OL>
</BODY>
</HTML>

будет отображаться так:

  i. Первый элемент списка.
 ii. Второй элемент списка.
iii. Третий элемент списка.

Поддержка:    Internet Explorer  Не поддерживаются
              Netscape Navigator  Не поддерживаются

2.11.4.2. Позиция маркера: свойство marker-offset

Синтаксис:  marker-offset: <размер> | auto | inherit
Начально:   auto
Применимо:  к элементам типа display: marker
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство marker-offset задает смещение прямоугольника маркера по горизонтали относительно главного прямоугольника, точнее, расстояние между ближайшими краями их рамок. Оно может быть задано явно (<размер>) или оставлено на усмотрение обозревателя (auto). Размер может быть отрицательным. Пример:

LI:before { marker-offset: 3em }

2.11.5. Списки

2.11.5.1. Введение в списки

Элементы списков создаются присваиванием значения list-item свойству display. Как и в более общем случае маркеров, они отображаются в виде двух прямоугольников: главного прямоугольника для содержимого элемента и необязательного прямоугольника маркера списка. Свойства списков позволяют задать тип этого маркера и его положение относительно главного прямоугольника. Отметим, что при отображении списков фон элемента распространяется только на главный прямоугольник; прямоугольник маркера всегда прозрачен.

2.11.5.2. Тип маркера списка: свойство list-style-type

Синтаксис:  list-style-type: disc | circle | square | decimal | decimal-leading-zero |
                             lower-roman | upper-roman | lower-greek | lower-alpha |
                             lower-latin | upper-alpha | upper-latin | hebrew |
                             armenian | georgian | cjk-ideographic | hiragana | katakana |
                             hiragana-iroha | katakana-iroha | none | inherit
Начально:   disc
Применимо:  к элементам типа display: list-item
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Поддерживаются только disc, circle, square, none, decimal, lower-roman,
               upper-roman, lower-alpha, upper-alpha (4.0+)
              Netscape Navigator  Поддерживаются только disc, circle, square, none, decimal, lower-roman,
               upper-roman, lower-alpha, upper-alpha (4.0+)

Свойство list-style-type задает тип маркера списка. Оно может принимать следующие значения:

disc | Черный кружок (зависит от обозревателя)
circle | Светлый кружок (зависит от обозревателя)
square | Черный квадратик (зависит от обозревателя)
decimal | Десятичные числа (1, 2, 3, …)
decimal-leading-zero | Десятичные числа с ведущим нулем (01, 02, 03, … 98, 99)
lower-roman | Строчные римские числа (i, ii, iii, iv, v, …)
upper-roman | Прописные римские числа (I, II, III, IV, V, …)
lower-greek | Строчные греческие буквы (α, β, γ, …, ω)
lower-alpha | Строчные латинские буквы (a, b, c, …, z)
lower-latin | Строчные латинские буквы (a, b, c, …, z)
upper-alpha | Прописные латинские буквы (A, B, C, …, Z)
upper-latin | Прописные латинские буквы (A, B, C, …, Z)
hebrew | Традиционная ивритская нумерация
armenian | Традиционная армянская нумерация
georgian | Традиционная грузинская нумерация (an, ban, gan, …, he, tan, in, in-an, …)
cjk-ideographic | Дальневосточная идеографическая нумерация
hiragana | Японская нумерация азбукой хирагана (a, i, u, e, o, ka, ki, …)
katakana | Японская нумерация азбукой катакана (A, I, U, E, O, KA, KI, …)
hiragana-iroha | Японская нумерация хирагана-ироха (i, ro, ha, ni, ho, he, to, …)
katakana-iroha | Японская нумерация катакана-ироха (I, RO, HA, NI, HO, HE, TO, …)

Спецификация CSS не определяет, какие символы должны использоваться в качестве маркеров списка, когда заданный алфавит будет исчерпан. Например, 27-й элемент списка типа lower-alpha не определен. Поэтому алфавитные типы маркеров должны использоваться только для коротких списков заранее известного размера. Если обозреватель не поддерживает заданный тип маркера, то он должен заменяться на decimal.

Это свойство применяется к списку только тогда, когда значением свойства list-style-image является none или указанный в нем графический образ не может быть загружен.

Следующий пример нумерует элементы нумерованного списка строчными римскими числительными:

OL { list-style-type: lower-roman }

2.11.5.3. Графический маркер списка: свойство list-style-image

Синтаксис:  list-style-image: <uri> | none | inherit
Начально:   none
Применимо:  к элементам типа display: list-item
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство list-style-image задает графический маркер списка указанием на URI соответствующего графического образа. Если оно равно none, то тип маркера списка задается свойством list-style-type.

Следующий пример помещает в начало каждого элемента маркированного списка графический образ "ellipse.gif":

UL { list-style-image: url("http://mylibrary.com/ellipse.gif") }

2.11.5.4. Позиция маркера списка: свойство list-style-position

Синтаксис:  list-style-position: inside | outside | inherit
Начально:   outside
Применимо:  к элементам типа display: list-item
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство list-style-position задает положение маркера списка относительно элемента списка. Оно может принимать следующие значения:

inside
  Прямоугольник маркера становится первым текстовым блоком главного прямоугольника.
outside
  Прямоугольник маркера размещается вне главного прямоугольника.

Например, следующий фрагмент HTML-документа

<UL style="list-style-type: square; list-style-position: inside; width: 40%">
  <LI>Первый элемент списка расположен таким вот образом.</LI>
  <LI>Второй элемент списка располагается так же.</LI>
</UL>

будет отображаться так (Netscape Navigator 4.x отображает этот пример неверно!):

  • Первый элемент списка расположен таким вот образом.
  • Второй элемент списка располагается так же.

2.11.5.5. Задание свойств списка: свойство list-style

Синтаксис:  list-style: [<list-style-type> || <list-style-image> ||
                        <list-style-position>] | inherit
Начально:   не определено для сокращений
Применимо:  к элементам типа display: list-item
Наследуемо: да
Проценты:   не используются
Устройства: визуальные
Поддержка:    Internet Explorer  Соответствует стандарту (4.0+)
              Netscape Navigator  Не поддерживается

Свойство list-style является сокращением для свойств list-style-type, list-style-image и list-style-position. Оно позволяет задать все свойства списка одновременно. С его помощью стиль маркированного списка из предыдущего примера мог бы быть задан так:

<UL style="list-style: square inside; width: 40%">


WDH: CSS - Страничные устройства вывода

Глава 2.12. Страничные устройства вывода

2.12.1. Общее описание

Страничные устройства вывода (например, бумага в принтере или страницы, выводимые на экран дисплея) отличаются от непрерывных устройств тем, что документ разбивается на отдельные страницы. Для работы с такими устройствами в CSS введена модель страницы, которая позволяет авторам задавать размеры страницы и ее границ, а также управлять переходом на новую страницу. Модель страницы позволяет указать, как элементы документа должны располагаться в прямоугольнике страницы, имеющем фиксированные размеры. При этом размеры прямоугольника не обязательно совпадают с размерами реальной страницы, на которую будет произведено окончательное отображение документа. CSS не определяет, как именно обозреватель будет преобразовывать прямоугольник страницы в реальные страницы, но позволяет задать их размер и ориентацию.

2.12.2. Директива @page

Директива @page предназначена для задания свойств страниц. Она имеет следующий вид:

@page [селектор-страницы] {
  правило;
  ...
  правило;
}

Селектор-страницы — это либо имя страницы, либо один из следующих псевдоклассов:

:first | Первая страница документа
:left | Левая страница (для двусторонней печати)
:right | Правая страница (для двусторонней печати)

Правила, указанные в директивы @page с селектором :left или :right, перекрывают правила директивы @page без селекторов. Правила, указанные в директивы @page с селектором :first, перекрывают правила директивы @page с селектором :left или :right (это зависит от направления вывода текста). Наконец, правила, указанные в директивы @page с именем страницы, перекрывают правила остальных директив @page.

Поддержка:    Internet Explorer  Синтаксически соответствует стандарту, но поддерживается только
               шаблонами печати MSHTML (5.5+)
              Netscape Navigator  Не поддерживается

2.12.2.1. Задание границ страницы

Для задания границ прямоугольника страницы используются свойства margin-left, margin-right, margin-top, margin-bottom и margin. Пример:

@page { margin: 2cm }	/* Все границы равны 2 см */

2.12.2.2. Размер страницы: свойство size

Синтаксис:  size: <размер>{1,2} | auto | portait | landscape | inherit
Начально:   auto
Применимо:  к страницам
Наследуемо: не определено
Проценты:   не используются
Устройства: визуальные страничные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство size задает размер и ориентацию прямоугольника страницы. Размеры страницы могут быть либо абсолютными, либо относительными. Абсолютные размеры задаются одним или двумя значениями типа <размер>. Если задано одно значение, то оно определяет размер страницы и по вертикали, и по горизонтали. Если заданы два значения, то первое определяет ширину страницы, а второе — ее высоту.

Относительные размеры задаются одним из следующих ключевых слов:

auto | Прямоугольник страницы совпадает с реальным листом по размеру и ориентации.
portrait | Прямоугольник страницы совпадает с реальным листом по размеру; ориентация книжная.
landscape | Прямоугольник страницы совпадает с реальным листом по размеру; ориентация альбомная.

Примеры:

@page { size: 8.5in 11in }
@page { size: portrait; margin: 10% }

2.12.2.3. Пометки: свойство marks

Синтаксис:  marks: [crop || cross] | none | inherit
Начально:   none
Применимо:  к страницам
Наследуемо: не определено
Проценты:   не используются
Устройства: визуальные страничные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

В высокой печати часто используются специальные пометки на полях страницы. Свойство marks позволяет задать тип пометок на странице. Оно может принимать следующие значения:

none | Не печатать пометки.
crop | Пометки, указывающие место обреза страницы.
cross | Пометки, используемые для выравнивания страниц.

Пример:

@page { marks: crop cross }	/* Печатать оба типа пометок */

2.12.3. Имена страниц: свойство page

Синтаксис:  page: <идентификатор> | auto
Начально:   auto
Применимо:  к блочным элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные страничные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство page позволяет присвоить элементу имя страницы с тем, чтобы использовать свойства директивы @page, селектором которой является данное имя. Например, следующие правила указывают, что все таблицы документа необходимо печатать в альбомной ориентации:

@page rotated { size: landscape }
TABLE { page: rotated; ... }

По умолчанию это свойство имеет значение auto, поэтому к элементам, не имеющих имен страниц, применяются правила директивы @page без именного селектора.

2.12.4. Управление разрывами страниц

2.12.4.1. Разрыв страницы перед элементом: свойство page-break-before

Синтаксис:  page-break-before: auto | always | avoid | left | right | inherit
Начально:   auto
Применимо:  к блочным элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные страничные
Поддержка:    Internet Explorer  Поддерживаются auto, always и "" вместо avoid (4.0+)
              Netscape Navigator  Не поддерживается

Свойство page-break-before управляет разрывом страницы перед печатью данного элемента. Оно может принимать следующие значения:

auto | Разрыв страницы производится обычным образом, после заполнения страницы.
always | Всегда начинать печать данного элемента с новой страницы.
avoid | Никогда не делать разрыва страницы перед данным элементом.
left | Один или два разрыва страницы, чтобы данный элемент всегда печатался на левой странице.
right | Один или два разрыва страницы, чтобы данный элемент всегда печатался на правой странице.

Пример:

H1 { page-break-before: always }

2.12.4.2. Разрыв страницы после элемента: свойство page-break-after

Синтаксис:  page-break-after: auto | always | avoid | left | right | inherit
Начально:   auto
Применимо:  к блочным элементам
Наследуемо: нет
Проценты:   не используются
Устройства: визуальные страничные
Поддержка:    Internet Explorer  Поддерживаются auto, always и "" вместо avoid (4.0+)
              Netscape Navigator  Не поддерживается

Свойство page-break-after управляет разрывом страницы после печати данного элемента. Оно может принимать следующие значения:

auto | Разрыв страницы производится обычным образом, после заполнения страницы.
always | Всегда начинать печать следующего элемента с новой страницы.
avoid | Никогда не делать разрыва страницы после данного элемента.
left | Один или два разрыва страницы, чтобы следующий элемент всегда печатался на левой странице.
right | Один или два разрыва страницы, чтобы следующий элемент всегда печатался на правой странице.

Пример:

H1 { page-break-after: avoid }

2.12.4.3. Разрыв страницы внутри элемента: свойство page-break-inside

Синтаксис:  page-break-inside: auto | avoid | inherit
Начально:   auto
Применимо:  к блочным элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные страничные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство page-break-inside управляет разрывами страницы при печати данного элемента. Оно может принимать следующие значения:

auto | Разрыв страницы производится обычным образом, после заполнения страницы.
avoid | Никогда не делать разрыва страницы внутри данного элемента.

Пример:

H1 { page-break-after: avoid }

2.12.4.4. Количество строк в конце страницы: свойство orphans

Синтаксис:  orphans: <целое> | inherit
Начально:   2
Применимо:  к блочным элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные страничные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

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

P { orphans: 3 }

2.12.4.5. Количество строк в начале страницы: свойство widows

Синтаксис:  widows: <целое> | inherit
Начально:   2
Применимо:  к блочным элементам
Наследуемо: да
Проценты:   не используются
Устройства: визуальные страничные
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

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

P { widows: 3 }


WDH: CSS - Звуковые таблицы стилей

Глава 2.13. Звуковые таблицы стилей

2.13.1. Общее описание

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

Звуковое отображение документа происходит в трехмерном физическом пространстве (звуковом окружении) и во времени (мы можем указать, какие звуки должны предшествовать, следовать или звучать одновременно с другими звуками). Кроме того, CSS позволяет авторам управлять качеством синтезированной речи (типом голоса, частотой, модуляцией и т. п.).

2.13.2. Громкость: свойство volume

Синтаксис:  volume: <число> | <процент> | silent | x-soft | soft | medium | loud |
                    x-loud | inherit
Начально:   medium
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   относительно наследуемого значения
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство volume задает громкость звука (точнее, размер медианы звуковой волны). Оно задается одним из следующих способов:

<число>
  Задает громкость звука числом в диапазоне от 0 до 100. При этом 0 соответствует
  минимально возможной громкости, а 100 — максимально приемлемой громкости.
<процент>
  Вычисляется относительно наследуемого значения, а затем обрезается по диапазону
  от 0 до 100.
silent
  Отключить звук. Это не то же самое, что громкость 0!
x-soft
  То же, что громкость 0.
soft
  То же, что громкость 25.
medium
  То же, что громкость 50.
loud
  То же, что громкость 75.
x-loud
  То же, что громкость 100.

Фактическая громкость звука определяется обозревателем. Пример: следующее правило задает негромкое звучание всего документа:

BODY { volume: soft }

2.13.3. Задание пауз

CSS позволяет задать размеры пауз перед произнесением элемента и после него. Они имеют тип <размер-паузы>, который определяется следующим образом:

  <размер-паузы> = <время> | <процент>
    <время>
      Задает абсолютный размер паузы в секундах или миллисекундах.
    <процент>
      Основан на величине, обратной значению свойства speech-rate. Если, например,
      это значение равно 120 слов в минуту (т. е. одно слово занимает 500 мс), то
      пауза в 20% равна 20% * 500 мс = 100 мс.

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

2.13.3.1. Пауза перед элементом: свойство pause-before

Синтаксис:  pause-before: <размер-паузы> | inherit
Начально:   зависит от обозревателя
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   см. выше
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство pause-before задает паузу перед произнесением элемента. Пауза вставляется между содержимым элемента и любым содержимым свойства cue-before. Пример:

H1 { pause-before: 20ms }

2.13.3.2. Пауза после элемента: свойство pause-after

Синтаксис:  pause-after: <размер-паузы> | inherit
Начально:   зависит от обозревателя
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   см. выше
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство pause-after задает паузу после произнесения элемента. Пауза вставляется между содержимым элемента и любым содержимым свойства cue-after. Пример:

H1 { pause-after: 20ms }

2.13.3.3. Паузы до и после: свойство pause

Синтаксис:  pause: <размер-паузы>{1,2} | inherit
Начально:   не определено для сокращений
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   см. выше
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство pause является сокращением для свойств pause-before и pause-after. Если указаны два значения, то первое из них задает паузу перед произнесением элемента, а второе — паузу после его произнесения. Если указано только одно значение, то оно задает значение обеих пауз. Примеры:

H1 { pause: 20ms }	/* pause-before: 20ms; pause-after: 20ms */
H1 { pause: 30ms 40ms }	/* pause-before: 30ms; pause-after: 40ms */

2.13.4. Задание звуковых сигналов

CSS позволяет выводить звуковые сигналы перед произнесением элемента и после него. Они имеют тип <звуковой-сигнал>, который определяется следующим образом:

  <звуковой-сигнал> = <uri> | none
    <uri>
      Задает URI ресурса, содержащего звуковой файл. Если ресурс не является
      аудиофайлом, то он должен игнорироваться.
    none
      Не выводить звукового сигнала.

2.13.4.1. Сигнал перед элементом: свойство cue-before

Синтаксис:  cue-before: <звуковой-сигнал> | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство cue-before задает звуковой сигнал перед произнесением элемента. Пример:

H1 { cue-before: url("bell.wav") }

2.13.4.2. Сигнал после элемента: свойство cue-after

Синтаксис:  cue-after: <звуковой-сигнал> | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство cue-after задает звуковой сигнал после произнесения элемента. Пример:

H1 { cue-after: url("dong.aiff") }

2.13.4.3. Сигналы до и после: свойство cue

Синтаксис:  cue: <звуковой-сигнал>{1,2} | inherit
Начально:   не определено для сокращений
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство cue является сокращением для свойств cue-before и cue-after. Если указаны два значения, то первое из них задает сигнал перед произнесением элемента, а второе — сигнал после его произнесения. Если указано только одно значение, то оно задает значение обоих звуковых сигналов. Например, следующие два правила эквивалентны:

H1 { cue: url(pop.au) }
H1 { cue-before: url(pop.au); cue-after: url(pop.au) }

2.13.5. Фоновый звук: свойство play-during

Синтаксис:  play-during: <uri> mix? repeat? | auto | none | inherit
Начально:   auto
Применимо:  ко всем элементам
Наследуемо: нет
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство play-during задает фоновый звук, который должен звучать во время произнесения содержимого элемента. Оно задается одним из следующих способов:

<uri>
  Задает URI ресурса, содержащего звуковой файл. Если ресурс не является
  аудиофайлом, то он должен игнорироваться.
mix
  Если задано это ключевое слово, то фоновый звук элемента должен смешиваться с
  фоновым звуком его родителя. Если его нет, то фоновый звук элемента заменяет
  фоновый звук его родителя.
repeat
  Если задано это ключевое слово, то фоновый звук элемента повторяется до тех пор, пока
  не закончится произнесение элемента. В противном случае фоновый звук звучит один раз.
auto
  Продолжает звучать фоновый звук родительского элемента.
none
  На время произнесения данного элемента фоновый звук отключается.

Примеры:

P.sad { play-during: url("violin.wav") repeat }
SPAN.quite { play-during: none }

2.13.6. Пространственные характеристики звука

Пространственное звучание обеспечивает естественный способ нескольких голосов из разных точек пространства, как в реальной жизни. Воспроизведение такого звучания обеспечивается различными аудиосистемами: от обычных стереонаушников до домашних театров. Для управления такими эффектами CSS позволяет задавать два угла поворота звука: по горизонтали (azimuth) и по вертикали (elevation).

2.13.6.1. Горизонтальный угол звука: свойство azimuth

Синтаксис:  azimuth: <угол> | [[left-side | far-left | left | center-left | center |
                     center-right | right | far-right | right-side] || behind] |
                     leftwards | rightwards | inherit
Начально:   center
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство azimuth задает горизонтальный угол звучания. Оно задается одним из следующих способов:

<угол>
  Задает угол в диапазоне от -360deg до 360deg. При этом 0deg соответствует
  звучанию из центра, 90deg — повороту направо, 180deg — повороту назад, а 270deg —
  повороту налево.
left-side
  То же, что 270deg. Вместе с behind, 270deg.
far-left
  То же, что 300deg. Вместе с behind, 240deg.
left
  То же, что 320deg. Вместе с behind, 220deg.
center-left
  То же, что 340deg. Вместе с behind, 200deg.
center
  То же, что 0deg. Вместе с behind, 180deg.
center-right
  То же, что 20deg. Вместе с behind, 160deg.
right
  То же, что 40deg. Вместе с behind, 140deg.
far-right
  То же, что 60deg. Вместе с behind, 120deg.
right-side
  То же, что 90deg. Вместе с behind, 90deg.
leftwards
  Поворот против часовой стрелки на 20deg (т. е. вычитание 20deg).
rightwards
  Поворот по часовой стрелке на 20deg (т. е. добавление 20deg).

Примеры:

H1 { azimuth: 30deg }
TD.a { azimuth: far-right }	    /* 60deg */
#id12 { azimuth: behind far-right } /* 120deg */
P.comment { azimuth: behind }	    /* 180deg */

2.13.6.2. Вертикальный угол звука: свойство elevation

Синтаксис:  elevation: <угол> | below | level | above | higher | lower | inherit
Начально:   level
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство elevation задает вертикальный угол звучания. Оно задается одним из следующих способов:

<угол>
  Задает угол в диапазоне от -90deg до 90deg. При этом 0deg соответствует
  звучанию на уровне слушателя, 90deg — звучанию прямо над его головой, а
  -90deg — звучанию прямо у него под ногами.
below
  То же, что -90deg.
level
  То же, что 0deg.
above
  То же, что 90deg.
higher
  Увеличивает текущий угол на 10deg.
lower
  Уменьшает текущий угол на 10deg.

Примеры:

H1 { elevation: above }
TR.a { elevation: 60deg }
TR.b { elevation: 30deg }
TR.c { elevation: level }

2.13.7. Характеристики речи

2.13.7.1. Скорость речи: свойство speech-rate

Синтаксис:  speech-rate: <число> | x-slow | slow | medium | fast | x-fast |
                         faster | slower | inherit
Начально:   medium
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство speech-rate задает скорость речи. Оно задается одним из следующих способов:

<число>
  Явно задает количество слов, произносимых в минуту.
x-slow
  80 слов в минуту.
slow
  120 слов в минуту.
medium
  180 - 200 слов в минуту.
fast
  300 слов в минуту.
x-fast
  500 слов в минуту.
faster
  Увеличивает текущую скорость речи на 40 слов в минуту.
slower
  Уменьшает текущую скорость речи на 40 слов в минуту.

Пример:

H1 { speech-rate: slow}

2.13.7.2. Голос: свойство voice-family

Синтаксис:  voice-family: [[<имя-голоса> | <родовое-имя>],]*
                          [<имя-голоса> | <родовое-имя>] | inherit
Начально:   зависит от обозревателя
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство voice-family задает список имен голосов для произнесения содержимого элемента. Этот список состоит из имен голосов, разделенных запятыми. Имена располагаются в порядке предпочтения. Например, следующее свойство

voice-family: romeo, male;

следует понимать так: "использовать голос romeo; если его нет, то использовать родовой голос male". Такой список необходим, поскольку мы заранее не знаем, какие именно голоса поддерживаются синтезаторами речи наших пользователей.

Имя голоса может быть задано двумя способами:

<имя-голоса>
  Задает название конкретного голоса. Если это название содержит пробелы, то оно
  должно быть заключено в кавычки или апострофы.
<родовое-имя>
  Одно из следующих предопределенных имен голосов: male (мужской), female (женский)
  и child (детский).

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

2.13.7.3. Частота звука: свойство pitch

Синтаксис:  pitch: <частота> | x-low | low | medium | high | x-high | inherit
Начально:   medium
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство pitch задает среднюю частоту звука. Отметим, что средняя частота звука зависит от типа голоса. Например, средняя частота мужских голосов 120 Гц, а женских — 210 Гц. Частота задается одним из следующих способов:

<частота>
  Явно задает частоту звука в герцах.
x-low, low, medium, high, x-high
  Указывают относительную частоту звука в порядке ее увеличения. Обозреватель
  должен подобрать соответствующую частоту в зависимости от типа голоса.

Пример:

H1 { pitch: high }

2.13.7.4. Вариация частоты: свойство pitch-range

Синтаксис:  pitch-range: <число> | inherit
Начально:   50
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство pitch-range задает вариацию средней частоты звука. Его значением является число в диапазоне от 0 до 100. При этом значение 0 соответствует абсолютно монотонному голосу, значение 50 — обычному голосу, а значения больше 50 создают анимированные голоса. Пример:

P { pitch-range: 30 }

2.13.7.5. Ударение: свойство stress

Синтаксис:  stress: <число> | inherit
Начально:   50
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство stress задает высоту пиков в интонации голоса. Его смысл существенно зависит от языка, на котором произносится текст документа. В нетоновых языках, таких, как русский или английский, оно позволяет указать, какова вариация частоты звука в тех речевых фрагментах, которые находятся под ударением.

Значением этого свойства является число в диапазоне от 0 до 100, причем значение 50 должно соответствовать обычному способу интонирования ударений для данного языка. Пример:

P.stressed { stress: 70 }

2.13.7.6. Тембр: свойство richness

Синтаксис:  richness: <число> | inherit
Начально:   50
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство richness задает тембр голоса. Его значением является число в диапазоне от 0 до 100. Чем больше это значение, тем богаче тембр голоса, тем лучше он наполняет помещение. Пример:

H1 { richness: 75 }

2.13.8. Характеристики произношения

2.13.8.1. Способ произношения: свойство speak

Синтаксис:  speak: none | normal | spell-out | inherit
Начально:   normal
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство speak задает способ произношения. Оно может принимать следующие значения:

none | Элемент не произносится. Однако, его потомки могут переопределить значение этого свойства и тогда будут произноситься.
normal | Обычное произношение в соответствии с нормами языка.
spell-out | Произношение по буквам. Полезно для аббревиатур и акронимов.

Примечание. Элемент со свойством volume: silent не произносится, но время, требующееся ему для произнесения, все равно ему выделяется, включая паузы перед ним и после него. Элемент с свойством speak: none не произносится, и время на его произнесение не выделяется.

Пример. Следующее правило задает произношение аббревиатур по буквам:

ABBR { speak: spell-out }

2.13.8.2. Произношение пунктуации: свойство speak-punctuation

Синтаксис:  speak-punctuation: code | none | inherit
Начально:   none
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство speak-punctuation задает способ произношения знаков пунктуации (запятых, двоеточий и т. п.). По умолчанию, его значение равно none, т. е. названия знаков пунктуации не произносятся, а их наличие выделяется паузами. Если же значение этого свойства code, то названия знаков пунктуации произносятся в процессе синтезации речи. Пример:

P { speak-punctuation: code }

2.13.8.3. Произношение числительных: свойство speak-numeral

Синтаксис:  speak-numeral: digit | continuous | inherit
Начально:   continuous
Применимо:  ко всем элементам
Наследуемо: да
Проценты:   не используются
Устройства: звуковые
Поддержка:    Internet Explorer  Не поддерживается
              Netscape Navigator  Не поддерживается

Свойство speak-numeral задает способ произношения числительных. По умолчанию, его значение равно continuous, т. е. число "123" произносится "Сто двадцать три". Если же значение этого свойства digit, то это число произносится по цифрам, т. е. "Один два три". Пример:

TD { speak-numeral: digit }

2.13.8.4. Произношение заголовков таблиц: свойство speak-header

Описание этого свойства приведено в разделе, посвященном таблицам.


WDH: JavaScript - Введение в JavaScript

Часть III.
Сценарии клиента: язык JavaScript

"Ducunt volentem fata, nolentem trahunt."
"Желающего судьба ведет, не желающего тащит."

Сенека, "Послания", 107

Глава 3.1. Введение в JavaScript

3.1.1. Что такое JavaScript?

Язык программирования JavaScript был разработан Бренданом Эйком (Brendan Eich) в Netscape Communications как язык сценариев для обозревателей Netscape Navigator, начиная с версии 2.0. В дальнейшем к развитию этого языка подключилась корпорация Microsoft, чьи обозреватели Internet Explorer поддерживают JavaScript, начиная с версии 3.0. Версия Microsoft получила название JScipt, поскольку JavaScript является зарегистрированной маркой фирмы Netscape. В 1996 г. ECMA приняла решение о стандартизации этого языка, и в июне 1997 г. была принята первая версия стандарта под названием ECMAScript (ECMA-262). В апреле 1998 г. этот стандарт был принят ISO в качестве международного под номером ISO/IEC 16262. Мы в последующем изложении основываемся на третьей версии стандарта ECMA (декабрь 1999 г.), но используем название JavaScript, а не ECMAScript по двум причинам:

  1. Это название является исторически первым, и под ним данный язык наиболее известен широкому кругу пользователей.
  2. Соответствующий тип MIME, а именно "text/javascript", распознается всеми обозревателями, которые поддерживают сценарии на данном языке, в отличие от JScript или ECMAScript.

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

Веб-обозреватель, работающий на компьютере-клиенте, обеспечивает среду, в которой JavaScript имеет доступ к объектам, которые представляют собой окна, меню, диалоги, текстовые области, фреймы, куки и ввод-вывод в Веб-страницу. Кроме того, обозреватель позволяет присоединить сценарии на языке JavaScript к таким событиям, как загрузка и выгрузка страниц и графических образов, нажатие клавиш и движение мыши, выбор текста и пересылка форм. При этом программный код сценариев только реагирует на события и поэтому не нуждается в главной программе. Набор объектов, предоставляемых обозревателем, известен под названием Document Object Model (DOM). Способы включения сценариев, написанных на JavaScript, в HTML-документы подробно описаны в гл. 1.9.

Веб-сервер обеспечивает иную среду, в которой объектами являются запросы к базам данных, клиенты, файлы и механизмы блокировки и совместного использования данных. Совместное использование сценариев и на стороне клиента, и на стороне сервера позволяет распределить вычисления между ними и обеспечить желаемый пользовательский интерфейс для Веб-приложения. Здесь мы сосредоточимся на тех возможностях языка, которые используются сценариями клиента; сценарии сервера рассматриваются в Части VII.

Для изучения этой главы полезно иметь опыт работы с каким-либо объектно-ориентированным языком программирования, например, C++ или Java, поскольку основные понятия в JavaScript те же самые. Однако, даже при отсутствии программистского опыта чтение этой главы позволит Вам научиться писать собственные сценарии или, по меньшей мере, разбираться в сценариях, написанных другими авторами.

3.1.2. Обзор языка

JavaScript — это язык программирования, основанный на объектах: и языковые средства, и возможности среды представляются объектами, а сценарий (программа) на JavaScript — это набор взаимодействующих объектов. Объект JavaScript — это неупорядоченный набор свойств, каждое из которых имеет нуль или более атрибутов, которые определяют, как это свойство может использоваться. Например, если атрибуту свойства ReadOnly (неизменяемый) присвоено значение true (истина), то все попытки программно изменить значение этого свойства будут безрезультатны. Свойства — это контейнеры, которые содержат другие объекты, примитивные значения и методы. Примитивное значение — это элемент любого из встроенных типов: Undefined, Null, Boolean, Number и String; объект — это элемент еще одного встроенного типа Object; метод — функция, ассоциированная с объектом через свойство.

JavaScript содержит несколько встроенных объектов, таких, как Global, Object, Error, Function, Array, String, Boolean, Number, Math, Date, RegExp. Кроме того, JavaScript содержит набор встроенных операций, которые, строго говоря, не обязательно являются функциями или методами, а такжн набор встроенных операторов, управляющих логикой выполнения программ. Синтаксис JavaScript в основном соответствует синтаксису языка Java, но упрощен в сравнении с ним, чтобы сделать язык сценариев легким для изучения. Так, к примеру, декларация переменной не содержит ее типа, свойства также не имеют типов, а декларация функции может стоять в тексте программы после ее вызова.

3.1.3. Общие сведения об объектах

Язык JavaScript, в отличие от языков Java и C++, не содержит классов объектов в строгом смысле слова. Вместо этого он поддерживает конструкторы, которые создают объекты путем выделения для них памяти и инициализации всех или некоторых их свойств. Все конструкторы являются объектами, но не все объекты являются конструкторами. Каждый конструктор имеет свойство prototype, которое используется для реализации наследования, основанного на прототипах, и разделяемых свойств. Объекты создаются путем вызова конструктора в операции new; например new String("Это строка") создает новый объект String. Результат вызова конструктора без new зависит от конструктора. Так, String("Это строка") создает примитивную строку, а не объект.

JavaScript поддерживает наследование, основанное на прототипах. С каждым конструктором связан соответствующий прототип, и каждый объект, созданный конструктором, содержит неявную ссылку на этот прототип (называемый прототипом объекта). Прототип, в свою очередь, может содержать ссылку на свой прототип и так далее. Так образуется цепочка прототипов. Ссылка на свойство объекта — это ссылка на первый прототип в цепочке прототипов объекта, который содержит свойство с данным именем. Иными словами, если данный объект имеет свойство с данным именем, то используется ссылка на это свойство; если нет, то исследуется прототип этого объекта и т. д.

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

3.1.4. Базовые определения

После краткого описания языка JavaScript дадим неформальные определения его основных понятий.

Тип
Набор значений данных.
Примитивное значение
Элемент одного из типов Undefined, Null, Boolean, Number или String. Примитивные значения — это данные, которые представляются непосредственно и на самом нижнем уровне реализации языка.
Объект
Элемент типа Object; является неупорядоченным набором свойств, каждое из которых может быть примитивным значением, объектом или функцией. Свойство, являющееся функцией, называется методом.
Конструктор
Функция, которая создает и инициализирует объекты. Каждый конструктор имеет соответствующий прототип, который используется для наследования и разделения свойств.
Прототип
Объект, который используется в JavaScript для реализации наследования структуры, состояния и поведения. Когда конструктор создает объект, последний содержит неявную ссылку на прототип конструктора, позволяющий разрешать ссылки на свойства данного объекта. Свойства прототипа разделяются всеми объектами, созданными на его основе.
Объект языка
Любой объект, который поддерживается реализацией языка JavaScript, а не средой исполнения сценариев. Часть объектов языка являются встроенными; другие создаются в процессе выполнения сценария.
Встроенный объект
Любой объект, который поддерживается реализацией языка JavaScript независимо от среды исполнения и существующий на момент начала исполнения сценария. Все встроенные объекты являются объектами языка.
Объект среды
Любой объект, который не является объектом языка, а поддерживается средой исполнения сценариев.
Неопределенное значение
Примитивное значение, которое означает, что переменной не присвоено никакого значения.
Тип Undefined
Этот тип состоит из единственного значения undefined, которое является неопределенным.
Нулевое значение
Примитивное значение, которое означает нулевую, пустую или несуществующую ссылку.
Тип Null
Этот тип состоит из единственного значения null, которое является нулевым.
Логическое значение
Примитивное значение типа Boolean, означающее истину или ложь.
Тип Boolean
Тип, состоящий ровно из двух значений: true (истина) и false (ложь).
Логический объект
Элемент типа Object, который является экземпляром встроенного логического объекта. Иными словами, логический объект создается выражением new Boolean(value), где value — логическое значение. Результирующий объект имеет неявное (безымянное) свойство типа Boolean.
Строковое значение
Элемент типа String. Предсталяет собой строку символов, т . е. упорядоченный массив из нуля или более символов Unicode (т. е. 16-битовых целых чисел без знака).
Тип String
Этот тип состоит из всех возможных строковых значений.
Строковый объект
Элемент типа Object, который является экземпляром встроенного строкового объекта. Иными словами, строковый объект создается выражением new String(value), где value — строковое значение. Результирующий объект имеет неявное (безымянное) свойство типа String.
Числовое значение
Элемент типа Number. Является непосредственным представлением числа.
Тип Number
Тип, состоящий из всех возможных числовых значений. Точнее говоря, это набор 64-битовых числовых значений формата IEEE 754, включающий специальные значения NaN (не число), положительная бесконечность и отрицательная бесконечность.
Числовой объект
Элемент типа Object, который является экземпляром встроенного числового объекта. Иными словами, числовой объект создается выражением new Number(value), где value — числовое значение. Результирующий объект имеет неявное (безымянное) свойство типа Number.
Бесконечность
Примитивное значение Infinity, являющееся элементом типа Number.
NaN
Примитивное значение NaN (не число), являющееся элементом типа Number.


WDH: JavaScript - Основные понятия

Глава 3.2. Основные понятия

3.2.1. Структура программ на языке JavaScript

Как и во многих других языках программирования, программа (сценарий) на языке JavaScript — это текст, состоящий из операторов, блоков, т. е. взаимосвязанных наборов операторов, и комментариев. Операторы могут содержать переменные, константы и выражения. Следующий пример начинается с определения функции, которое состоит из блока, содержащего два оператора. За определением следуют два оператора, не образующих блока.

function convert(inches) {
  cm = inches * 2.54;	// Эти два оператора заключены в блок.
  meters = inches / 39.37;
}
convert(inches);	// Эти два оператора не образуют блока.
km = meters / 1000;

Как мы видим из этого примера, каждый оператор JavaScript начинается с новой строки (что не обязательно, но рекомендуется) и заканчивается точкой с запятой (что также не обязательно, если оператор является последним в строке). Блок — это набор операторов, заключенный в фигурные скобки {}.

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

while (i--)	// Цикл состоит в уменьшении i до нуля,
  ;		// поэтому его телом является пустой оператор.

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

  • пробел (\u0020);
  • табуляция (\u0009);
  • вертикальная табуляция (\u000B);
  • перевод формата (\u000C);
  • неразрывный пробел (\u00A0).

Символы разрыва строки также используются для форматирования текста, но они могут иметь значение и с точки зрения синтаксиса программы. Формальные правила использования разрывов строк в JavaScript довольно сложны, но на практике достаточно помнить только то, что обычно рекомендуется начинать новый оператор с новой строки. Символами разрыва строки в JavaScript считаются следующие символы Unicode:

  • перевод строки (\u000A);
  • возврат каретки (\u000D);
  • разделитель строк (\u2028);
  • разделитель абзацов (\u2029).

3.2.2. Комментарии

Комментарии в JavaScript могут быть однострочными и многострочными. Однострочные комментарии начинаются с символов // и продолжаются до конца текущей строки, как показано в приведенном выше примере. Многострочные комментарии заключаются в маркеры /* и */, например:

/* Это пример комментария,
   содержащего несколько строк. */

Многострочные комментарии не могут быть вложены друг в друга. Текст комментария полностью игнорируется при выполнении программы.

3.2.3. Зарезервированные слова

Следующие имена являются ключевыми словами языка JavaScript и не могут употребляться в качестве идентификаторов:

break | delete | function | return | typeof
case | do | if | switch | var
catch | else | in | this | void
continue | finally | instanceof | throw | while
default | for | new | try | with

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

absract | double | implements | private | throws
boolean | enum | import | protected | transient
byte | export | int | public | volatile
char | extends | interface | short |
class | final | long | static |
const | float | native | super |
debugger | goto | package | synchronized |

3.2.4. Идентификаторы

Идентификаторы используются в JavaScript в качестве имен переменных. Они могут начинаться с латинской буквы, символа "$" (знак доллара) или символа "_" (подчеркивание) и должны состоять из латинских букв, цифр и символов "$" и "_". Знак доллара рекомендуется использовать только в идентификаторах программ, которые автоматически генерируются другими программами. Идентификаторы не могут совпадать с зарезервированными словами. Два идентификатора считаются равными, если они текстуально совпадают; это означает, что JavaScript проводит различие между строчными и прописными буквами. Примеры синтаксически правильных идентификаторов:

MyIdentfier another_identifier $id _function123

3.2.5. Переменные

3.2.5.1. Декларация переменных

Переменные используются в качестве символических имен, принимающих различные значения. Имена переменных задаются идентификаторами. Переменная создается в момент ее декларации. JavaScript позволяет декларировать переменную двумя способами:

  • С помощью ключевого слова var, например, var x; или var x = 21;.
  • Просто присваиванием переменной значения, например x = 21;.

Если декларация переменной не содержит присваивания ей значения, то ее значением считается undefined. Мы можем проверять, определено ли значение переменной, и предпринимать соответствующие действия. Пример:

var text;
if (text == undefined)
  document.write("Текст не задан");
else
  document.write("Текст:" + text);

В этом примере значение переменной text не определено, поэтому будет выполнен первый оператор document.write.

В самом общем виде декларация переменных имеет вид:

var идентификатор[=инициализатор]?[,идентификатор[=инициализатор]?]?

Здесь инициализатор — это любое выражение, значение которого присваивается переменной при ее создании. Пример:

var a = 0, b, c = "текст", x, y = false;

3.2.5.2. Область действия переменных

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

  • Глобальный контекст, т. е. исходный текст сценариев, не включая тела функций.
  • Локальный контекст, т. е. исходный текст сценариев, являющийся телом функции, а также аргумент конструктора встроенного объекта Function. Точнее говоря, если последним параметром конструктора Function является строка текста, то она интерпретируется как тело функции.
  • Eval-контекст, т. е. аргумент метода eval. Если параметром метода eval является строка текста, то она интерпретируется как программа на языке JavaScript, имеющая тот же контекст, в котором был вызван этот метод.

Иными словами, любая переменная, декларированная вне тела всех функций, является глобальной и доступна всюду в тексте данной программы. Переменная, декларированная в теле функции, является локальной и доступна только внутри тела этой функции. Об особенностях eval-контекста см. описание метода eval.

Для декларации глобальных переменных ключевое слово var не обязательно. Однако, оно обязательно при декларации локальных переменных.

3.2.6. Константы

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

  • нулевая константа null типа Null;
  • логические константы true (истина) и false (ложь) типа Boolean;
  • строковые константы типа String, например, "Привет всем!";
  • числовые константы типа Number, например, 21 или 3.1415926.

Особую группу констант составляют регулярные выражения, которые описаны в гл. 3.5.

3.2.6.1. Строковые константы

Строковая константа — это нуль или более символов Unicode, заключенных в одинарные или двойные кавычки. Обычно строковые константы заключают в двойные кавычки, а одинарные кавычки используются только для тех строк, которые сами содержат двойную кавычку. Примеры:

"Это строковая константа."
'"Эй, вы, там наверху!", - пела Алла Пугачева.'

Строка, не содержащая символов ('' или ""), называется пустой строкой. Символы Unicode, входящие в состав строки, могут задаваться своим числовым кодом с помощью escape-последовательностей вида \uXXXX, где XXXX — шестнадцатеричный код символа Unicode. Символы с кодами, меньше 256, могут задаваться escape-последовательностями вида \xXX, где XX — шестнадцатеричный код символа Unicode. Кроме того, несколько символов могут обозначаться специальными escape-последовательностями:

\0 | \u0000 | нуль (NUL)
\b | \u0008 | забой (BS)
\t | \u0009 | табуляция (HT)
\n | \u000A | перевод строки (LF)
\v | \u000B | вертикальная табуляция (VT)
\f | \u000C | перевод формата (FF)
\r | \u000D | возврат каретки (CR)
\" | \u0022 | двойная кавычка (")
\' | \u0027 | одинарная кавычка (')
\\ | \u005C | обратная косая черта (\)

Пример строковых констант, содержащих специальные символы:

"Графический образ хранится в файле C:\\webstuff\\mypage\\gifs\\garden.gif."
"Эта строка заканчивается разрывом строки.\r\n"

Примечание. Internet Explorer распознает символ "\v" только в регулярных выражениях.

3.2.6.2. Числовые константы

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

  • Десятичные числа — это просто набор десятичных цифр, например: 1234, -256.
  • Восьмеричные числа начинаются с 0 и состоят из цифр 0 — 7, например: 01234, -067.
  • Шестнадцатеричные числа начинаются с 0x или 0X и состоят из цифр 0 — 9 и букв A — F в любом регистре, например: 0xA000, 0Xa000, -0x1234.

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

0.0001, .0001, 1e-4, 1.0E-4 | // Четыре плавающих числа, равных друг другу
-1.23e2 | // Плавающее число, равное -123


WDH: JavaScript - Типы данных

Глава 3.3. Типы данных

3.3.1. Описание типов данных

Язык JavaScript содержит шесть типов данных: Undefined (неопределенный), Null (нулевой), Boolean (логический), String (строковый), Number (числовый) и Object (объектный). Это относительно небольшое количество типов позволяет, тем не менее, создавать полноценные сценарии для выполнения многих функций.

3.3.1.1. Тип Undefined (неопределенный)

Этот тип состоит из единственного значения undefined. Это значение, которое принимает переменная, которая объявлена в программе, но которой еще не присвоено никакого значения.

3.3.1.2. Тип Null (нулевой)

Этот тип состоит из единственного значения null. Это значение означает нулевую, пустую или несуществующую ссылку.

3.3.1.3. Тип Boolean (логический)

Этот тип состоит ровно из двух логических значений: true (истина) и false (ложь).

3.3.1.4. Тип String (строковый)

Этот тип состоит из всех возможных текстовых строк. Каждая строка представляет собой упорядоченный массив из нуля или более символов Unicode (т. е. 16-битовых целых чисел без знака), называемых элементами строки. Элементы строки нумеруются, начиная с нуля. Длина строки — это количество элементов в ней; пустая строка состоит из нуля элементов.

3.3.1.5. Тип Number (числовой)

Этот тип имеет ровно 18437736874454810627 (т. е. 264 - 253 + 3) значений, соответствующих 64-битовому формату плавающих чисел двойной точности IEEE 754 с тем единственным исключением, что 9007199254740990 (т. е. 253 - 2) различных значений "Не число" данного формата представляются в JavaScript одним значением NaN.

Еще два специальных значения — это положительная бесконечность и отрицательная бесконечность, которым в JavaScript соответствуют выражения +Infinity (или просто Inifinity) и -Infinity. Отметим также, что в данном формате различаются положительный нуль (+0 или 0) и отрицательный нуль (-0).

3.3.1.6. Тип Object (объектный)

Значением этого типа являются объекты. Объект — это неупорядоченный набор свойств, который подробно описан в разделе 3.7.1.

3.3.2. Преобразование типов

JavaScript — слаботипизированный язык. Это означает, что в декларации переменной мы не указываем ее тип и в дальнейшем можем присваивать ей значения любых типов. Исполняющая система JavaScript сама выполняет автоматическое преобразование типов данных по мере необходимости. Для явного преобразования типов используются методы Boolean, Number, Object и String.

Преобразования типов происходят по следующим правилам.

3.3.2.1. Преобразование к логическому типу

Исходный тип | Результат
Undefined | false
Null | false
Boolean | без изменений
Number | false, если аргумент равен +0, -0 или NaN; true в остальных случаях
String | false, если аргумент — пустая строка; true в остальных случаях
Object | true

3.3.2.2. Преобразование к числовому типу

Исходный тип | Результат
Undefined | NaN
Null | +0
Boolean | 1, если аргумент равен true, и 0, если аргумент равен false
Number | без изменений
String | если строка содержит правильное число (возможно с пробелами перед и/или после него), то это число; NaN в противном случае
Object | результат преобразования значения объекта по умолчанию

3.3.2.3. Преобразование к строковому типу

Исходный тип | Результат
Undefined | "undefined"
Null | "null"
Boolean | "true", если аргумент равен true, и "false", если аргумент равен false
Number | текстовое представление числа (см. ниже)
String | без изменений
Object | результат преобразования значения объекта по умолчанию

Преобразование числа n в строку происходит по следующим правилам:

  • если n равно NaN, то результат "NaN";
  • если n равно +0 или -0, то результат "0";
  • если n отрицательно, то результат будет конкатенацией строки "-" и результата преобразования в строку числа -n;
  • если n равно бесконечности, то результат "Infinity";
  • в остальных случаях пусть m, k и s — такие целые числа, что k >= 1, 10k-1 <= s < 10k, n равно s x 10m-k и k — наименьшее из возможных. Отметим, что k — это количество цифр в десятичном представлении s, что s не делится на 10 и что наименее значимая цифра s может не быть однозначно определенной. Тогда
  • если k <= m <= 21, то результат состоит из k десятичных цифр s (без ведущих нулей), за которыми следуют m-k символов '0';
  • иначе, если 0 < m <= 21, то результат состоит из m старших десятичных цифр s, за которыми следуют десятичная точка '.' и k-m оставшихся десятичных цифр s;
  • иначе, если -6 < m <= 0, то результат состоит из символа '0', за которым следуют десятичная точка '.', -m символов '0' и k десятичных цифр s;
  • иначе, если k = 1, то результат состоит из единственной цифры s, символа 'e', символа плюс '+' или минус '-' в зависимости от того, положительно или отрицательно m-1, за которыми следует десятичное представление числа abs(m-1);
  • иначе результат состоит из старшей десятичной цифры s, за которой следуют десятичная точка '.' и k-1 оставшихся десятичных цифр s, символ 'e', символ плюс '+' или минус '-' в зависимости от того, положительно или отрицательно m-1, за которыми следует десятичное представление числа abs(m-1).

3.3.2.4. Преобразование к объектному типу

Исходный тип | Результат
Undefined | генерируется исключение TypeError
Null | генерируется исключение TypeError
Boolean | новый логический объект с данным значением по умолчанию
Number | новый числовой объект с данным значением по умолчанию
String | новый строковый объект с данным значением по умолчанию
Object | без изменений

3.3.2.5. Примеры неявных преобразований

В выражениях, соединяющих числовые и строковые значения операцией +, JavaScript преобразует числа в строки, например:

x = "Ответ равен " + 21  // возвращает "Ответ равен 21"
y = 21 + "  - вот ответ" // возвращает "21 - вот ответ"

В остальных случаях JavaScript пытается преобразовать строку в число, например:

a = "21" - 1 // возвращает 20
b = "21" + 1 // возвращает 211


WDH: JavaScript - Выражения и операции

Глава 3.4. Выражения и операции

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

Существует два типа выражений: те, которые присваивают значение некоторой переменной (например, x = 2 + 3), и те, которые просто имеют некое значение (например, 2 + 3). Первый тип выражений называется операциями присваивания.

Все операции в JavaScript подразделяются на следующие:

  • операции сравнения;
  • арифметические операции;
  • битовые операции;
  • логические операции;
  • строковые операции;
  • операции присваивания;
  • прочие операции.

3.4.1. Операции сравнения

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

  • Операции "больше", "меньше", "не больше" и "не меньше" сначала пытаются преобразовать операнды в числа, а, если это невозможно, то в строки, а затем производят их сравнение.
  • Операции "равно" и "не равно" пытаются преобразовать операнды в строки, затем в числа и в логические значения, а затем производят их сравнение.
  • Операции "тождественно" и "не тождественно" не преобразовывают типы данных: два операнда считаются тождественно равными, если они имеют одинаковые типы и одинаковые значения.
Таблица 3.1. Операции сравнения
Операция | Название | Описание
a < b | Меньше | Возвращает true, если левый операнд меньше, чем правый операнд.
a > b | Больше | Возвращает true, если левый операнд больше, чем правый операнд.
a <= b | Не больше | Возвращает true, если левый операнд меньше или равен правому операнду.
a => b | Не меньше | Возвращает true, если левый операнд больше или равен правому операнду.
a == b | Равно | Возвращает true, если левый операнд равен правому операнду.
a != b | Не равно | Возвращает true, если левый операнд не равен правому операнду.
a === b | Тождественно | Возвращает true, если левый операнд тождественно равен правому операнду.
a !== b | Не тождественно | Возвращает true, если левый операнд тождественно не равен правому операнду.

Примеры:

var x = "3";
a = x == 3;	// a равно true
b = x === 3;	// b равно false (разные типы)

3.4.2. Арифметические операции

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

  • Операция "сложение" выполняется только тогда, когда оба операнда являются числами или логическими значениями. Если хотя бы один операнд является строкой, то производится конкатенация строк.
  • Остальные операции преобразуют операнды в числа, а затем выполняют операцию.
  • Операции "инкремент" и "декремент" применяются только к переменным.
Таблица 3.2. Арифметические операции
Операция | Название | Описание
a + b | Сложение | Возвращает сумму двух операндов.
a - b | Вычитание | Возвращает разность от вычитания правого операнда из левого.
a * b | Умножение | Возвращает произведение двух операндов.
a / b | Деление | Возвращает частное от деления левого операнда на правый.
a % b | Остаток по модулю | Возвращает целый остаток от деления левого операнда на правый. Плавающие числа перед операцией округляются до целых.
++ | Инкремент | Унарная операция. Увеличивает значение переменной на 1. Если используется как префикс (++a), возвращает значение операнда после увеличения его на 1. Если используется как постфикс (a++), возвращает значение операнда перед увеличением его на 1.
-- | Декремент | Унарная операция. Уменьшает значение переменной на 1. Если используется как префикс (--a), возвращает значение операнда после уменьшения его на 1. Если используется как постфикс (a--), возвращает значение операнда перед уменьшением его на 1.
-a | Смена знака | Унарная операция. Возвращает арифметическое отрицание операнда.

Примеры:

var i, j, k;
i = 19 % 6.8;	// i равно 5
k = 2;
j = k++;	// j равно 2, k равно 3
j = ++k;	// j и k равны 4

3.4.3. Битовые операции

Битовые операции применяются к числовым операндам, представленным как двоичные числа (т. е. как цепочки из 32 битов), и возвращают числовое значение, означающее результат операции. Перед выполнением операции операнды преобразуются в целые числа, а результат операции преобразуется в Number.

WDH+ О проблемах, связанных с этими преобразованиями см. WDH+: Последний бит.

Таблица 3.3. Битовые операции
Операция | Название | Описание
a & b | Побитовое AND | Возвращает в каждой битовой позиции 1, если соответствующие позиции обоих операндов равны 1.
a | b | Побитовое OR | Возвращает в каждой битовой позиции 1, если соответствующая позиция хотя бы одного операнда равна 1.
a ^ b | Побитовое XOR | Возвращает в каждой битовой позиции 1, если соответствующая позиция ровно одного операнда равна 1.
~a | Побитовое NOT | Унарная операция. Инвертирует каждую битовую позицию операнда.
a << b | Сдвиг влево | Сдвигает двоичное представление левого операнда влево на количество бит, заданное вторым операндом. Освобождающиеся справа биты заполняются нулями.
a >> b | Арифметический сдвиг вправо | Сдвигает двоичное представление левого операнда вправо на количество бит, заданное вторым операндом. Освобождающиеся слева биты заполняются старшим (знаковым) битом.
a >>> b | Логический сдвиг вправо | Сдвигает двоичное представление левого операнда вправо на количество бит, заданное вторым операндом. Освобождающиеся слева биты заполняются нулями.

Примеры:

var i, j, k;
i = 15; j = 9;
k = i & j;	// k равно 9 (1111 & 1001 = 1001)
k = i | j;	// k равно 15 (1111 | 1001 = 1111)
k = i ^ j;	// k равно 6 (1111 ^ 1001 = 0110)
i = -14;	// двоичное значение 11111111 11111111 11111111 11110010
j = i >> 2;	// j равно -4 (11111111 11111111 11111111 11111100)
k = i >>> 2;	// k равно 1073741820 (00111111 11111111 11111111 11111100)

3.4.4. Логические операции

Логические операции применяются к логическим операндам и возвращают логическое значение, означающее результат операции. Если типы операндов различны, то делается попытка преобразовать их к логическому типу.

Таблица 3.4. Логические операции
Операция | Название | Описание
a && b | Логическое AND | Возвращает true, если оба операнда истинны. Если первый операнд ложен, то возвращает false, не вычисляя значение второго операнда.
a || b | Логическое OR | Возвращает true, если хотя бы один операнд истинен. Если первый операнд истинен, то возвращает true, не вычисляя значение второго операнда.
!a | Логическое NOT | Унарная операция. Возвращает true, если операнд ложен.

Примеры:

var i, j, k;
i = 3; j = 5;
k = (i < 4) && (j > 4);	// k равно true
k = (i < 4) || (j > 5);	// k равно true
k = !k;			// k равно false

3.4.5. Строковые операции

На сегодняшний день JavaScript поддерживает единственную строковую операцию, а именно конкатенацию строк, которая обозначается символом "+". Если хотя бы один операнд является строкой, то результатом операции является слияние строк-операндов. Примеры:

k = "Моя " + "строка";		// k равно "Моя строка"
text = "Результат: " + 123;	// text равно "Результат: 123"

3.4.6. Операции присваивания

Операции присваивания присваивают левому операнду результат операции, который определяется правым операндом и самой операцией. Базовая операция присваивания имеет вид a = b, что означает: присвоить переменной a значение операнда b. Все остальные операции присваивания являются сокращениями других операций, совмещенных с присваиванием, как показано в следующей таблице.

Таблица 3.5. Операции присваивания
Операция | Значение
a += b | a = a + b
a -= b | a = a - b
a *= b | a = a * b
a /= b | a = a / b
a %= b | a = a % b
a <<= b | a = a << b
a >>= b | a = a >> b
a >>>= b | a = a >>> b
a &= b | a = a & b
a |= b | a = a | b
a ^= b | a = a ^ b

Операция присваивания возвращает значение, которое равно значению, присвоенному левому операнду. Пример:

i = j = k = 0;	// все переменные получают значение 0

3.4.7. Прочие операции

3.4.7.1. Условная операция

Условная операция — это единственная тернарная операция в JavaScript. Она имеет вид:

test ? value1 : value2

где test — любое логическое выражение, а value1 и value2 — любые выражения. Если test истинно, то операция возвращает значение value1, в противном случае она возвращает значение value2. Пример:

var status = (age >= 18) ? "взрослый" : "подросток";

3.4.7.2. Операция запятая

Операция запятая вызывает последовательное вычисление значений двух выражений и возвращает второе из них. Она имеет вид:

expr1,expr2

где expr1 и expr2 — любые выражения. Основное применение эта операция находит в операторе цикла for, поскольку последний допускает только одно выражение, которое исполняется в конце каждого цикла. Операция запятая позволяет объединить два выражения в одно и, тем самым, обойти это ограничение. Пример:

for (i = 0; i < 10; i++, j++) {
  k = i + j;
}

3.4.7.3. Операция delete

Операция delete удаляет свойство объекта или элемент массива. Она имеет вид:

delete expr

где expr — любое выражение, значением которого является свойство объекта или элемент массива. Если удаление прошло успешно, то операция возвращает значение true; если нет (например, если свойство объекта не может быть удалено), то она возвращает значение false.

Эта операция может также применяться для удаления неявно декларированных переменных (т. е. тех, декларация которых не содержит ключевого слова var).

При удалении элемента массива длина массива и нумерация его элементов не изменяются, но удаленный элемент становится неопределенным.

Примеры:

mynumber = new Number();	// создает новый объект
mynumber.high = 100;		// создает новое свойство объекта
delete mynumber.high;		// удаляет свойство объекта
delete mynumber;		// удаляет объект
langs = new Array("HTML", "CSS", "JavaScript", "Java");
delete langs[2];		// удаляет элемент массива

3.4.7.4. Операция in

Операция in возвращает true, если левый операнд является свойством правого операнда. Она имеет вид:

property in object

где property — строковое выражение, значением которого является имя свойства, или числовое выражение, задающее номер элемента массива, а object — любое объектное выражение. Примеры:

mynumber = new Number();	// новый объект
mynumber.high = 100;		// новое свойство объекта
"high" in mynumber		// возвращает true
langs = new Array("HTML", "CSS", "JavaScript", "Java");
0 in langs			// возвращает true
4 in langs			// возвращает false

3.4.7.5. Операция instanceof

Операция instanceof возвращает true, если данный объект относится к данному классу объектов. Она имеет вид:

object instanceof type

где object — любое объектное выражение, а type — имя класса объектов. Примеры:

myDay = new Date(1958,5,21);	// новый объект
myDay instanceof Date		// возвращает true

3.4.7.6. Операция new

Операция new создает новый объект путем вызова конструктора объектов. Она имеет вид:

new type(arguments)

где type — имя конструктора, а arguments — список параметров, разделенных запятыми, используемых для инициализации объекта. Если список параметров пуст, то круглые скобки можно опустить. Примеры:

myObject = new Object;
myArray = new Array();
myDate = new Date("May 21 1958");
myDay = new Date(1958,5,21);

Подробнее о создании новых объектов см. п. 3.7.1.3.

3.4.7.7. Операция this

Операция this возвращает указатель на текущий объект. Она должна использоваться в выражениях вида:

this.property

где property — имя свойства объекта.

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

<SCRIPT type="text/javascript">
function validate(obj, low, high) {
  if ((obj.value < low) || (obj.value > high))
    alert("Недопустимое значение!")
}
</SCRIPT>
<INPUT type="text" name="age" size="3" onchange="validate(this, 18, 99)">

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

3.4.7.8. Операция typeof

Операция typeof возвращает строку, содержащую информацию о типе операнда. Она имеет вид:

typeof expr или typeof(expr)

где expr — любое выражение. Возвращаемое значение может быть одной из шести строк: "number" (число), "string" (строка), "boolean" (логическое значение), "object" (объект), "function" (функция) или "undefined" (неопределенное значение). Примеры:

var size = 1;
var shape = "круглый";
var today = new Date();
typeof(size);	// возвращает "number"
typeof shape;	// возвращает "string"
typeof today;	// возвращает "object"

Примечание. В Microsoft JScript операция typeof может возвращать еще два значения: "date" (тип VT_DATE стандарта COM) и "unknown" (COM-интерфейсы ActiveX).

3.4.7.9. Операция void

Операция void вычисляет значение выражения и возвращает undefined. Она имеет вид:

void expr или void(expr)

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

3.4.8. Порядок выполнения операций

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

Таблица 3.6. Приоритеты операций
Операция
. [] ()
++ -- - ~ ! delete new typeof void
* / %
+ -
<< >> >>>
< <= > >= instanceof
== != === !==
&
^
|
&&
||
?:
= += -= *= /= %= <<= >>= >>>= &= ^= |=
,


WDH: JavaScript - Операторы и функции

Глава 3.6. Операторы и функции

3.6.1. Операторы JavaScript

Управление последовательностью действий в ходе выполнения сценария осуществляется с помощью операторов. JavaScript содержит стандартный набор операторов, унаследованный от языков C++ и Java, а именно:

  • условный оператор if…else;
  • оператор выбора switch;
  • операторы цикла for, while, do…while, break и continue;
  • оператор итерации for…in;
  • оператор указания объекта with;
  • операторы обработки исключений try…catch и throw;
  • операторы декларации функций function и возврата из функции return.

Следующие операторы описаны в других разделах справочника:

  • пустой оператор;
  • оператор декларации переменных var.

Любое выражение JavaScript также является оператором.

3.6.2. Условный оператор

Условный оператор if…else позволяет проверить определенное условие и, в зависимости от его истинности, выполнить ту или иную последовательность операторов. Он имеет две формы:

if (условие) оператор1
if (условие) оператор1 else оператор2

Здесь условие — это любое выражение, значение которого может быть преобразовано к логическому типу, оператор1 и оператор2 — любые группы операторов JavaScript; если эти группы содержат более одного оператора, то они должны быть заключены в фигурные скобки {}.

Первая форма оператора означает, что если значение условия истинно, то выполняются операторы1; если оно ложно, то управление передается оператору, следующему за if.

Вторая форма оператора означает, что если значение условия истинно, то выполняются операторы1; если оно ложно, то выполняются операторы2.

Пример использования условного оператора в теле функции, возвращающей наибольшее из трех чисел:

function maxValue(x, y, z) {
  if (x >= y) {
    if (x >= z)
      return x;
    else
      return z;
  }
  else {
    if (y >= z)
      return y;
    else
      return z;
  }
}

3.6.3. Оператор выбора

Оператор выбора switch выполняет ту или иную последовательность операторов в зависимости от значения определенного выражения. Он имеет вид:

switch (выражение) {
   case значение:
     операторы
     break;
   case значение:
     операторы
     break;
   ...
   default:
     операторы
}

Здесь выражение — это любое выражение, значение — это возможное значение выражения, а операторы — любые группы операторов JavaScript.

Оператор выбора сначала вычисляет значение выражения, а затем проверяет, нет ли этого значения в одной из меток case значение. Если такая метка есть, то выполняются операторы, следующие за ней; если нет, то выполняются операторы, следующие за меткой default (если она отсутствует, то управление передается оператору, следующему за switch).

Необязательный оператор break указывает, что после выполнения операторов управление передается оператору, следующему за switch. Если break отсутствует, то после выполнения операторов начинают выполняться операторы, стоящие после следующей метки case (управление как бы "проваливается" в следующую метку).

В следующем примере значение переменной length преобразуется в метры в зависимости от начальной единицы измерений, заданной в переменной str. Обратите внимание, что после case "м" нет оператора break; в данном случае это означает, что эта метка и метка default обрабатываются одинаково, а именно значение переменной length не изменяется.

var str = "см";
var length = 25;
switch (str) {
  case "км":
    length *= 1000;
    break;
  case "см":
    length /= 100;
    break;
  case "м":
  default:
    break;
}

3.6.4. Операторы цикла

Цикл — это последовательность операторов, выполнение которой повторяется до тех пор, пока определенное условие не станет ложным. JavaScript содержит три оператора цикла: for, while и do…while, а также операторы break и continue, которые используются внутри циклов.

Близок к операторам цикла и оператор итерации for…in, используемый при работе с объектами.

3.6.4.1. Оператор for

Оператор цикла for имеет вид:

for (инициализация; условие; изменение) оператор

Здесь инициализация и изменение — это любое выражения, условие — любое выражение, значение которого может быть преобразовано к логическому типу, оператор — любая группа операторов JavaScript; если эти группа содержит более одного оператора, то она должны быть заключена в фигурные скобки {}. Инициализация может содержать декларацию переменной.

Оператор for выполняется следующим образом:

  1. Выполняется выражение инициализация (обычно это выражение инициализирует счетчик или счетчики цикла).
  2. Вычисляется значение выражения условие. Если оно ложно, то управление передается оператору, следующему за данным оператором.
  3. Выполняется оператор.
  4. Выполняется выражение изменение (обычно это выражение увеличивает или уменьшает счетчик или счетчики цикла) и управление передается этапу 2.

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

function initArray(a) {
  for (var i = 0; i < a.length; i++)
    a[i] = 0;
}

3.6.4.2. Оператор while

Оператор цикла while имеет вид:

while (условие) оператор

Здесь условие — любое выражение, значение которого может быть преобразовано к логическому типу, оператор - любая группа операторов JavaScript; если эти группа содержит более одного оператора, то она должны быть заключена в фигурные скобки {}.

Оператор while выполняется следующим образом:

  1. Вычисляется значение выражения условие. Если оно ложно, то управление передается оператору, следующему за данным оператором.
  2. Выполняется оператор и управление передается этапу 1.

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

while (true)
  document.write("Привет всем!");

3.6.4.3. Оператор do…while

Оператор цикла do…while имеет вид:

do оператор while (условие)

Здесь условие — любое выражение, значение которого может быть преобразовано к логическому типу, оператор - любая группа операторов JavaScript; если эти группа содержит более одного оператора, то она должны быть заключена в фигурные скобки {}.

Оператор do … while выполняется следующим образом:

  1. Выполняется оператор.
  2. Вычисляется значение выражения условие. Если оно ложно, то управление передается оператору, следующему за данным оператором.
  3. Управление передается этапу 1.

Этот оператор отличается от оператора while тем, что цикл обязательно выполняется хотя бы раз. Пример:

var i = 0;
do
  document.write(i++);
while (i < 10);

3.6.4.4. Метки операторов

Любой оператор или блок операторов в сценарии на языке JavaScript может иметь любое количество меток. Метки используются операторами break и continue для указания того, к какому оператору они относятся. Помеченный оператор имеет вид:

метка:
 оператор

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

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

3.6.4.5. Оператор break

Оператор break прерывает выполнение текущего цикла, оператора switch или помеченный оператора и передает управление оператору, следующему за прерванным. Этот оператор может употребляться только внутри циклов while, do…while, for или for…in, а также внутри оператора switch. Он имеет две формы:

break
break метка

Первая форма оператора прерывает выполнение самого внутреннего из циклов или операторов switch. Вторая форма оператора прерывает выполнение оператора с заданной меткой.

Пример оператора break в теле функции, возвращающей номер элемента массива, содержащего заданное значение:

function findValue(a, theValue) {
  for (var i = 0; i < a.length; i++) {
    if (a[i] == theValue)
      break;
  }
  return i;
}

3.6.4.6. Оператор continue

Оператор continue завершает текущую итерацию текущего цикла или цикла, помеченного соответствующей меткой, и начинает новую итерацию. Этот оператор может употребляться только внутри циклов while, do…while, for или for…in. Он имеет две формы:

continue
continue метка

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

  • циклы while и do…while проверяют условие цикла и, если оно истинно, начинают очередное выполнение цикла;
  • цикл for выполняет выражение изменение, проверяет условие цикла и, если оно истинно, начинает очередное выполнение цикла;
  • цикл for…in переходит к следующему полю переменной и начинает очередное выполнение цикла.

В следующем примере к переменной n последовательно добавляются значения 1, 2, 4 и 5:

var i = 0;
var n = 0;
while (i < 5) {
  i++;
  if (i == 3)
    continue;
  n += i;
}

3.6.5. Оператор for…in

Оператор for…in выполняет заданные действия для каждого свойства объекта или для каждого элемента массива. Он имеет вид:

for (переменная in выражение) оператор

Здесь переменная — это декларация переменной, выражение — любое выражение, значением которого является объект или массив, оператор — любая группа операторов JavaScript; если эти группа содержит более одного оператора, то она должны быть заключена в фигурные скобки {}.

Оператор for…in выполняется следующим образом:

  1. Переменной присваивается имя очередного свойства объекта или очередного элемента массива (это зависит от того, является значением выражения объект или массив).
  2. Выполняется оператор.
  3. Управление передается этапу 1.

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

Следующий сценарий создает новый объект ob, а затем последовательно выводит все его свойства на экран обозревателя:

var ob = {"а" : "Архангельск", "б" : "Баку", "в" : "Воронеж"};
for (var key in ob)
  document.write(key + ": " + ob[key] + "<BR>");

На экране появится текст

а: Архангельск
б: Баку
в: Воронеж

3.6.6. Оператор with

Оператор with задает имя объекта по умолчанию. Он имеет вид:

with (выражение) оператор

Здесь выражение — любое выражение, значением которого является объект, оператор — любая группа операторов JavaScript; если эти группа содержит более одного оператора, то она должны быть заключена в фигурные скобки {}.

Этот оператор действует следующим образом. Для каждого идентификатора в операторе исполняющая система проверяет, не является ли он именем свойства объекта, заданного по умолчанию. Если да, то этот идентификатор считается именем свойства, если же нет, то именем переменной.

Оператор with используется для сокращения размера программного кода и ускорения доступа к свойствам объектов. Например, для доступа к математическим функциям мы должны каждый раз указывать имя объекта Math:

x = Math.cos(Math.PI / 2) + Math.sin(Math.LN10);
y = Math.tan(2 * Math.E);

С помощью оператора with этот фрагмент сценария можно существенно укоротить:

with (Math) {
  x = cos(PI / 2) + sin(LN10);
  y = tan(2 * E);
}

Примечание. Оператор with может применяться только к существующим свойствам и методам объекта. Попытка создания нового свойства или метода с его помощью вызовет ошибку.

3.6.7. Обработка исключений

3.6.7.1. Понятие исключения

В процессе исполнения сценария возможно возникновение неустранимых ошибок, называемых исключениями. Примерами исключений являются обращение к несуществующему объекту или невозможность преобразования значения к заданному типу. Подробнее о реализации исключений см. описание объектов Error.

Операторы, описанные в этом разделе, предназначены для обработки исключений, возникающих в ходе исполнения сценария, и генерации собственных исключений.

3.6.7.2. Оператор try…catch

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

try {
  оператор1
}
catch (исключение) {
  оператор2
}

Здесь исключение — любое имя переменной, а оператор1 и оператор2 — любые группы операторов JavaScript, заключенные в фигурные скобки {}.

Оператор1 содержит программный код, в котором возможно возникновение исключения. Если исключение не возникло, то после исполнения оператора1 управление передается обычным образом оператору, следующему за try…catch. Если же оно возникло, то информация об исключении заносится в локальную переменную исключение, и управление передается оператору2, который должен содержать код обработки этого исключения.

Если возникшее исключение не может быть здесь обработано, то оператор2 должен содержать оператор throw для передачи исключения обработчику исключений более высокого уровня. Пример использования этого оператора приведен в следующем разделе.

WDH+ См. также WDH+: Оператор try…catch в IE4.

3.6.7.3. Оператор throw

Оператор throw генерирует исключение, которое может быть обработано оператором try…catch. Он имеет вид:

throw исключение

где исключение — любое выражение.

Значение выражения исключение присваивается локальной переменной, указанной в операторе catch. Пример генерации исключения и его обработки:

function getMonthName(month) {
  month = month - 1; // Переводим month в индекс массива (1=январь, 12=декабрь)
  var months=new Array("январь","февраль","март","апрель","май","июнь","июль",
     "август","сентябрь","октябрь","ноябрь","декабрь");
  if (months[month] != null)
    return months[month];
  else
    throw "Неверный месяц";
}

try {
  monthName = getMonthName(myMonth); // возможно исключение
}
catch (e) {
  monthName="неизвестно";
}
document.write(monthName);

3.6.8. Функции

3.6.8.1. Декларация функции

Функции являются одним из основных механизмов языка JavaScript; они охватывают ту область, которая в других языках программирования реализуется подпрограммами, процедурами и функциями. Функция в JavaScript — это набор операторов, выполняющих определенную задачу.

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

function имя(аргументы?) {
  операторы
}

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

Рассмотрим следующий пример:

function cube(number) {
  return number * number * number;
}

Эта функция называется cube и имеет один формальный аргумент number. При вызове этой функции вместо формального аргумента подставляется его фактическое значение, функция выполняет возведение этого значения в куб и возвращает полученное число оператором return.

Переменные, декларированные в теле функции, являются локальными, т. е. недоступны вне ее тела. Подробности см. в описании области действия переменных.

3.6.8.2. Вызов функции

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

var x = cube(5);

В результате переменная x получит значение 125.

В JavaScript действуют следующие правила передачи аргументов функции:

  • Аргументы примитивных типов передаются функции по значению. Иными словами, формальным аргументам присваиваются значения фактических аргументов на момент вызова и, если даже операторы в теле функции изменят значение какого-либо аргумента, то это изменение не коснется переменной, чье значение передавалось в качестве аргумента.
  • Объекты (и встроенные, и определенные пользователем) передаются по ссылке. Это означает, что все изменения свойств объекта в теле функции производятся непосредственно в самом объекте, а не в его локальной копии и, следовательно, сохраняются после возврата из функции. Например,
function setBrowser(browser) {
   browser.name = "Internet Explorer";
   browser.version = "5.5";
}

var myBrowser = {name:"Netscape Navigator", version:"4.7"};
var x = myBrowser.name;	// x равно "Netscape Navigator"
setBrowser(myBrowser);	// объект myBrowser передается функции
var y = myBrowser.name;	// y равно "Internet Explorer"

3.6.8.3. Рекурсивные функции

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

Приведем пример функции, вычисляющей факториал числа (факториал числа n равен 1 * 2 * ... * n):

function factorial(n) {
  if (n <= 1)
    return 1;
  else
    return (n * factorial(n-1));
}

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

3.6.8.4. Оператор return

Мы видели в предыдущих примерах, что функции JavaScript могут (но не обязаны) возвращать значение. Для указания этого значения используется оператор return, который имеет две формы:

return выражение
return

Первая форма оператора завершает выполнение функции и возвращает значение выражения. Функция, содержащая такой оператор return, должна вызываться как часть выражения присваивания, например x = 2 * cube(a).

Вторая форма оператора завершает выполнение функции и возвращает значение undefined. Функция, содержащая такой оператор return, должна вызываться как оператор, например setBrowser(myBrowser).

Если тело функции не содержит оператора return, то ее выполнение завершается с выполнением последнего оператора тела и возвращается значение undefined.

3.6.8.5. Объект arguments

При входе в тело функции создается локальный объект arguments, который имеет следующие свойства:

  • Свойство callee с атрибутами { DontEnum }. Начальным значением этого свойства является исполняемый в данный момент объект Function. Это свойство обеспечивает возможность рекурсивного вызова безымянных функций.
  • Свойство length с атрибутами { DontEnum }. Начальным значением этого свойства является количество фактических аргументов, переданных функции при ее вызове.
  • Массив значений фактических аргументов функции. Для доступа к значениям массива используется синтаксис:
    функция.arguments[i]

    где функция — идентификатор, задающий имя текущей функции, а i — номер аргумента, начиная с нуля.

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

function initArray() {
  this.length = initArray.arguments.length;
  for (var i = 0; i < this.length; i++)
    this[i] = initArray.arguments[i];
}

var myFriends = new initArray("Михаил", "Максим", "Сергей", "Леонид");


WDH: JavaScript - Использование объектов

Глава 3.7. Использование объектов

3.7.1. Объекты, свойства и методы

3.7.1.1. Основные понятия

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

  • встроенные объекты исполняющей системы;
  • объекты среды, в которой исполняется сценарий (т. е. либо объекты клиента, либо объекты сервера);
  • пользовательские объекты, создаваемые сценарием в процессе его выполнения.

Объект JavaScript — это неупорядоченный набор свойств. Свойство, являющееся функцией, называется методом. Для доступа к свойству объекта используется синтаксис:

имя_объекта.имя_свойства

Если название свойства задано текстовой строкой, то доступ к свойству возможен и так:

имя_объекта["имя_свойства"]

Этот синтаксис используется оператором итерации for…in.

Каждое свойство состоит из названия, значения и набора следующих атрибутов:

Атрибут | Описание
DontEnum | Свойство не должно попадать в перечисление при итерации объекта оператором for…in.
DontDelete | Попытка программно удалить данное свойство будет проигнорирована. См. описание операции delete.
ReadOnly | Неизменяемое свойство. Попытка программно изменить данное свойство будет проигнорирована. (Отметим, что в некоторых случаях значение свойства с этим атрибутом может быть изменено через внешнюю среду.)

Новое свойство объекта создается просто присваиванием ему значения. Пусть, например, мы уже создали объект myBrowser, который должен описывать наш Веб-обозреватель. Это описание будет состоять из названия обозревателя (name) и его версии (version). Для создания указанных свойств мы должны включить в сценарий следующие строки:

myBrowser.name = "Microsoft Internet Explorer";
myBrowser.version = "5.5";

У таких свойств, созданным пользователем, все перечисленные выше атрибуты сброшены в false. В дальнейшем мы можем изменять значения этих свойств или извлекать их, например:

document.write(myBrowser.name, myBrowser.version);

Существует два способа создания новых объектов в JavaScript, а именно:

  1. Использование инициализатора объекта.
  2. Использование конструктора объектов.

3.7.1.2. Создание объектов с помощью инициализатора

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

{свойство:значение [,свойство:значение]?}

Здесь свойство — идентификатор, задающий имя свойства, а значение — выражение, задающее значение этого свойства.

Например, объект myBrowser из предыдущего примера может быть создан так:

var myBrowser = {name: "Microsoft Internet Explorer", version: "5.5"};

Усложним этот пример, добавив еще одно свойство объекта myBrowser, которое называется options (опции обозревателя) и само является объектом:

var myBrowser = {name: "Microsoft Internet Explorer", version: "5.5",
  options: {enableJava: true, enableCookies: false}};

3.7.1.3. Создание объектов с помощью конструктора

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

  • имя функции задает имя создаваемого класса объектов;
  • тело функции должно содержать присваивание начальных значений свойствам и методам создаваемого объекта.

Например, конструктор для класса объектов Browser из предыдущего примера может иметь следующий вид:

function Browser(name, version) {
  this.name = name;
  this.version = version;
}

Обратите внимание на использование операции this для доступа к свойствам объекта.

Теперь для создания новых объектов класса Browser достаточно вызвать этот конструктор в операции new, например:

var myBrowser = new Browser("Microsoft Internet Explorer", "5.5");

Вспомним теперь, что выше мы добавили свойство options объекта Browser, которое само является объектом. Перепишем приведенный пример с учетом этого свойства:

function Options(enableJava, enableCookies) {
  this.enableJava = enableJava;
  this.enableCookies = enableCookies;
}

function Browser(name, version) {
  this.name = name;
  this.version = version;
  this.options = options;
}

var myOptions = new Options(true, false);
var myBrowser = new Browser("Microsoft Internet Explorer", "5.5", myOptions);

Для доступа к свойствам свойства options используется нотация myBrowser.options.enableJava.

3.7.1.4. Создание методов

Поскольку методы являются разновидностью свойств, они создаются так же, как описано выше. Например, мы можем добавить к конструктору объектов Browser метод aboutBrowser, который будет выводить на экран обозревателя информацию о свойствах этого объекта:

function showBrowser() {
  document.write("Обозреватель: " + this.name + " " + this.version);
}

function Browser(name, version) {
  this.name = name;
  this.version = version;
  this.aboutBrowser = showBrowser;
}

В дальнейшем мы можем вызвать этот метод так: myBrowser.aboutBrowser().

При желании конструктор можно записать и короче, используя вложенное определение функции:

function Browser(name, version) {
  this.name = name;
  this.version = version;
  this.aboutBrowser = function() {
    document.write("Обозреватель: " + this.name + " " + this.version);
  }
}

3.7.1.5. Изменение прототипа объекта

Допустим, что мы хотим в процессе выполнения сценария добавить новое свойство security (безопасность) классу объектов Options (подчеркнем еще раз — классу объектов, а не отдельному его представителю myOptions). Для этого используется свойство prototype объекта Function:

Options.prototype.security = null;

Теперь мы можем присвоить значение новому свойству объекта:

myBrowser.options.security = "Высокая";

Для удаления свойств объектов используется операция delete, например:

delete Options.prototype.security;

JavaScript позволяет нам задать новый прототип для класса пользовательских объектов (прототипы встроенных объектов доступны только для чтения). Рассмотрим такой пример:

function Circle(radius) {
  this.radius = radius;
}

Circle.prototype.area = function() {
  return Math.PI * this.radius * this.radius;
}

function FullCircle(x, y, radius) {
  this.x = x;
  this.y = y;
  this.radius = radius;
}

FullCircle.prototype = Circle.prototype;

var myCircle = new FullCircle(0, 0, 1);
document.write(myCircle.area());

В этом примере сначала определяется класс объектов Circle со свойством radius и методом area, возвращающим площадь круга. Затем определяется класс FullCircle, конструктор которого дополнительно содержит координаты центра окружности. Затем указывается, что он наследует прототип класс Circle. После этого мы создаем объект myCircle и вызываем его метод area, который он унаследовал от прототипа класса Circle.

3.7.1.6. Удаление объектов

Мы можем удалить ранее созданный объект с помощью операции delete, например:

delete myBrowser;

3.7.2. Объектная модель JavaScript

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

3.7.2.1. Прототипы объектов

Большинство объектно-ориентированных языков (например, Java и C++) основаны на двух базовых понятиях: классы объектов и экземпляры (instances) объектов.

  • Класс объектов — это абстрактное понятие, описывающее все свойства данного класса (в Java эти свойства называются полями и методами, а в C++ членами класса, но суть от этого не меняется).
  • Экземпляр объекта — это реализация класса, т. е. конкретный объект, наделенный всеми свойствами данного класса.

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

3.7.2.2. Создание объектов

В языках, основанных на классах, класс объектов описывается отдельной декларацией класса. В этой декларации мы можем указать специальные методы, называемые конструкторами, которые создают экземпляры данного класса. Конструктор выделяет память для экземпляра, инициализирует значения его свойств и выполняет другие необходимые действия. После написания декларации класса мы можем создавать его экземпляры путем вызова операции new имя_конструктора(...).

Создание объектов в JavaScript происходит примерно так же, но здесь декларация конструктора совпадает с декларацией класса. Иными словами, мы определяем конструктор как функцию, которая создает объекты с заданным начальным набором свойств и их значений. Затем мы так же создаем объекты вызовом операции new имя_конструктора(...).

3.7.2.3. Наследование

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

JavaScript поддерживает наследование, основанное на прототипах. С каждым конструктором связан соответствующий прототип объекта, и каждый объект, созданный конструктором, содержит неявную ссылку на этот прототип. Прототип, в свою очередь, может содержать ссылку на свой прототип и так далее. Так образуется цепочка прототипов. Ссылка на свойство объекта — это ссылка на первый прототип в цепочке прототипов объекта, который содержит свойство с данным именем. Иными словами, если данный объект имеет свойство с данным именем, то используется ссылка на это свойство; если нет, то исследуется прототип этого объекта и т. д.

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

3.7.2.4. Резюме

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

Таблица 3.8. Объектная модель JavaScript
Модель, основанная на классах (Java и C++) | Модель, основанная на прототипах (JavaScript)
Класс объектов и экземпляр объекта — это различные понятия. | Все объекты являются экземплярами объектов.
Класс определяется декларацией класса. Экземпляр класса создается конструктором. | Набор объектов определяется и создается функцией-конструктором.
Новый объект создается операцией new. | Новый объект создается операцией new.
Существует иерархия классов, в которой новые классы являются потомками ранее определенных. | Существует иерархия объектов, в которой объект имеет прототип, заданной функцией-конструктором.
Свойства наследуются по цепочке классов-потомков. | Свойства наследуются по цепочке прототипов.
Декларация класса определяет все свойства всех экземпляров данного класса. Набор свойств не может динамически изменяться в ходе выполнения программы. | Конструктор или прототип определяют начальный набор свойств. Свойства набора объектов или отдельного объекта могут динамически добавляться и удаляться в ходе выполнения программы.


WDH: JavaScript - Примитивные встроенные объекты

Глава 3.8. Примитивные встроенные объекты

JavaScript содержит глобальный объект, который является средой его исполняющей системы, а также следующие встроенные объекты:

Объект | Описание | Объект | Описание
Array | Массивы | Math | Математические функции и константы
Boolean | Логические объекты | Number | Числовые объекты
Date | Дата и время | Object | Прототип остальных объектов
Error | Исключения | RegExp | Регулярные выражения
Function | Функции | String | Строковые объекты

В этой главе приведены описания глобального объекта и примитивных встроенных объектов Object, Function, Boolean и Number. Описания остальных встроенных объектов расположены в следующих главах.

3.8.1. Глобальный объект

Глобальный объект (Global) создается исполняющей системой JavaScript перед началом исполнения сценария. Это единственный объект, который не имеет имени, и потому доступ к его свойствам и методам осуществляется без имени объекта. По этой причине их иногда называют свойствами и методами верхнего уровня.

Свойства глобального объекта
Свойство | Описание
Infinity | Специальное значение "бесконечность".
NaN | Специальное значение "не число".
undefined | Неопределенное значение.
Методы глобального объекта
Метод | Описание
Boolean | Преобразует объект в логическое значение.
decodeURI | Декодирует URI.
decodeURIComponent | Декодирует компонент URI.
encodeURI | Кодирует URI.
encodeURIComponent | Кодирует компонент URI.
escape | Преобразует строку в шестнадцатеричную кодировку Unicode.
eval | Исполняет строку кода JavaScript.
isFinite | Возвращает true, если аргумент является конечным числом.
isNaN | Возвращает true, если аргумент равен NaN.
Number | Преобразует объект в число.
Object | Преобразует значение в объект.
parseFloat | Преобразует строку в плавающее число.
parseInt | Преобразует строку в целое число.
String | Преобразует объект в строку.
unescape | Преобразует шестнадцатеричную кодировку Unicode в строку.

Свойство Infinity

Синтаксис: Infinity
Атрибуты:  { DontEnum, DontDelete }

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

Свойство NaN

Синтаксис: NaN
Атрибуты:  { DontEnum, DontDelete }

Начальным значением свойства NaN является значение Number.NaN (Not a Number, "не число"). Это значение не совпадает ни с одним числом, включая себя, поэтому мы не можем проверить правильность числа, сравнивая его с NaN. Вместо этого нужно использовать методы isFinite и isNaN.

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

Свойство undefined

Синтаксис: undefined
Атрибуты:  { DontEnum, DontDelete }

Начальным значением свойства undefined является значение undefined (неопределенное значение). Оно означает, что переменной не было присвоено никакого значения.

Метод Boolean

Синтаксис: Boolean(объект)
Аргументы: объект — любое выражение
Результат: логическое значение

Метод Boolean преобразует аргумент в логическое значение по правилам, приведенным в п. 3.3.2.1.

Метод decodeURI

Синтаксис: decodeURI(строка)
Аргументы: строка — строковое выражение, содержащее кодированный URI
Результат: новый строковый объект
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод decodeURI выполняет стандартную декодировку URI, закодированного методом encodeURI.

Метод decodeURIComponent

Синтаксис: decodeURIComponent(строка)
Аргументы: строка — строковое выражение, содержащее кодированный компонент URI
Результат: новый строковый объект
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод decodeURIComponent выполняет стандартную декодировку отдельного компонента URI, закодированного методом encodeURIComponent.

Метод encodeURI

Синтаксис: encodeURI(строка)
Аргументы: строка — строковое выражение, содержащее URI
Результат: новый строковый объект
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод encodeURI выполняет стандартную кодировку URI. При этом он не кодирует символы ":", "/", ";" и "?", считая их стандартными разделителями URI. Для кодировки этих символов следует пользоваться методом encodeURIComponent.

Например, оператор document.write(encodeURI("http://www.test.com?val=привет")) выведет на экран обозревателя строку http://www.test.com?val=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82.

Обратная декодировка URI производится методом decodeURI.

Метод encodeURIComponent

Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.
Синтаксис: encodeURIComponent(строка)
Аргументы: строка — строковое выражение, содержащее компонент URI
Результат: новый строковый объект

Метод encodeURIComponent выполняет стандартную кодировку отдельного компонента URI. При этом кодируются все символы, не принадлежащие к базовой латинице.

Этим методом не следует пользоваться для кодировки полного URI. Например, оператор document.write(encodeURIComponent("http://www.test.com?val=привет")) выведет на экран обозревателя строку
http%3A%2F%2Fwww.test.com%3Fval%3D%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82.

Обратная декодировка компонента URI производится методом decodeURIComponent.

Метод escape

Синтаксис: escape(строка)
Аргументы: строка — любое строковое выражение
Результат: новый строковый объект

Метод escape преобразует входную строку в шестнадцатеричную кодировку Unicode. При этом все символы, не являющиеся символами базовой латиницы, заменяются на их шестнадцатеричные escape-коды %xx. Если код символа больше 255, то он заменяется на %uxxxx. Например, оператор document.write(escape("Строка.")) выведет на экран обозревателя строку %u0421%u0442%u0440%u043E%u043A%u0430.

Примечания.

  1. Эта функция не должна использоваться для стандартной кодировки строк, содержащих URI. Вместо нее следует использовать методы encodeURI и encodeURIComponent.
  2. Обратное преобразование строки производится методом unescape.

Метод eval

Синтаксис: eval(строка)
Аргументы: строка — строковое выражение, содержащее программный код
Результат: см. описание

Метод eval рассматривает входную строку как программный код JavaScirpt и исполняет его. Он позволяет динамически формировать операторы и выражения JavaScript для последующего выполнения.

Если аргументом метода eval является выражение, то он возвращает значение этого выражения, например:

var x = 10, y = 20;
var z = eval("x + y + 1"); // z равно 31

Если аргументом метода eval являются операторы, то он выполняет эти операторы и возвращает значение undefined, например:

var z = eval("var myDate = new Date();"); // создается новая переменная myDate

Метод eval исполняется в том же контексте (глобальном или локальном), в котором он вызван; этим же контекстом определяется область действия создаваемых их переменных. Операция this также возвращает указатель на тот объект, который был текущим в момент вызова данного метода.

Метод isFinite

Синтаксис: isFinite(число)
Аргументы: число — любое числовое выражение
Результат: логическое значение

Метод isFinite возвращает true, если значением его аргумента является число, отличное от NaN, положительной бесконечности и отрицательной бесконечности. В противном случае он возвращает false.

Метод isNaN

Синтаксис: isNaN(выражение)
Аргументы: выражение — любое выражение
Результат: логическое значение

Метод isNaN возвращает true, если значением его аргумента является NaN. В противном случае он возвращает false.

Альтернативным способом проверки значения переменной на равенство NaN является сравнение ее с самой собой, поскольку NaN — это единственное значение, которое не равно самому себе.

Метод Number

Синтаксис: Number(объект)
Аргументы: объект — любое выражение
Результат: числовое значение

Метод Number преобразует аргумент в числовое значение по правилам, приведенным в п. 3.3.2.2.

Метод Object

Синтаксис: Object(значение)
Аргументы: значение — любое выражение
Результат: объектное значение

Метод Object преобразует аргумент в объектное значение по правилам, приведенным в п. 3.3.2.4.

Метод parseFloat

Синтаксис: parseFloat(строка)
Аргументы: строка — любое строковое выражение
Результат: числовое значение

Метод parseFloat преобразует входную строку в плавающее число. Если аргумент не может быть преобразован в плавающее число, то возвращается значение NaN. Примеры:

parseFloat("314e-2")	// возвращает 3.14
parseFloat("3.14abc")	// возвращает 3.14
parseFloat("abc")	// возвращает NaN

Метод parseInt

Синтаксис: parseInt(строка [,основание]?)
Аргументы: строка — любое строковое выражение
           основание - любое числовое выражение
Результат: числовое значение

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

Если основание задано, то parseInt преобразует входную строку в число с данным основанием. При этом в системах счисления с основанием, большим 10, цифры, большие девяти, задаются латинскими буквами (A = 10, B = 11, …, Z = 35). Формат чисел для оснований, больших 36, не определен.

Если основание не задано, то parseInt преобразует входную строку в число по следующим правилам:

  • если строка начинается с 0x, то число считается шестнадцатеричным;
  • если строка начинается с 0, то число считается восьмеричным;
  • в остальных случаях число считается десятичным.

Если аргумент не может быть преобразован в целое число, то возвращается значение NaN. Примеры:

parseInt("0xF");	// возвращает 15
parseInt("017");	// возвращает 15
parseInt("08");		// возвращает 0
parseInt("15.99", 10);	// возвращает 15
parseInt("FXX", 16);	// возвращает 15
parseInt("1111", 2);	// возвращает 15
parseInt("15*3");	// возвращает 15
parseInt("Hello", 8);	// возвращает NaN

Метод String

Синтаксис: String(объект)
Аргументы: объект — любое выражение
Результат: строковое значение

Метод String преобразует аргумент в строковое значение по правилам, приведенным в п. 3.3.2.3. Если аргументом является объект, то этот метод возвращает то же значение, что и метод toString данного объекта.

Метод unescape

Синтаксис: unescape(строка)
Аргументы: строка — любое строковое выражение
Результат: новый строковый объект

Метод unescape преобразует строку в шестнадцатеричной кодировке Unicode в текстовую. Формат исходной строки описан в методе escape. Эта функция используется, в частности, для стандартной декодировки строк, содержащих URI. Например, оператор document.write(unescape("%u0421%u0442%u0440%u043E%u043A%u0430.")) выведет на экран обозревателя текст Строка.

3.8.2. Объекты общего вида: объект Object

Объект Object — это примитивный объектный тип, производными которого являются все остальные объекты языка JavaScript. Он имеет две формы конструктора:

new Object()
new Object(значение)

Здесь значение — любое выражение, задающее примитивное значение объекта. Если оно не указано, то создается пустой объект. Для создания пустого объекта можно также использовать инициализатор объекта:

{}

Примеры:

var a = new Object();		// пустой объект
var b = {};			// то же самое
var c = new Object(true);	// примитивное значение объекта true

Объект Object содержится во всех объектах JavaScript, поэтому все его методы и свойства им доступны. Методы данного объекта могут быть переопределены в пользовательских объектах.

Свойства объекта Object
Свойство | Описание | Член прототипа
constructor | Конструктор, который создал объект. | Да
prototype | Ссылка на прототип класса объектов. | Да
Методы объекта Object
Метод | Описание | Член прототипа
hasOwnProperty | Проверяет наличие заданного свойства. | Да
isPrototypeOf | Проверяет, является ли объект прототипом данного объекта. | Да
propertyIsEnumerable | Проверяет наличие заданного итерируемого свойства. | Да
toLocaleString | Преобразует объект в строку с учетом формата операционной системы. | Да
toString | Преобразует объект в строку. | Да
valueOf | Возвращает примитивное значение объекта. | Да

Свойство constructor

Синтаксис: объект.constructor
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства constructor является функция, которая была конструктором данного объекта. Подчеркнем, что это не текстовая строка, содержащая имя функции, а именно функция (точнее, ссылка на нее). Примеры:

function Tobacco(name) {
   this.name=name
}

theTobacco = new Tobacco("Camel")
if (theTobacco.constructor == Tobacco) ( ... }
document.write("theTobacco.constructor: " + theTobacco.constructor)

Последний оператор примера выведет на экран обозревателя текст:

theTobacco.constructor: function Tobacco(name) { this.name=name }

Свойство prototype

Синтаксис: объект.prototype
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства prototype является ссылка на прототип данного объекта. Прототип используется для динамического добавления или удаления свойств и методов класса объектов. Подробности и примеры см. в п. 3.7.1.5.

Прототипы встроенных объектов имеют атрибут ReadOnly. В данном случае это означает, что изменять его набор свойств можно, но заменить прототип встроенного объекта нельзя. С другой стороны, прототипы пользовательских объектов допускают присваивание; тем самым мы задаем, какой объект является прототипом данного.

Метод hasOwnProperty

Синтаксис: объект.hasOwnProperty(имя)
Аргумент:  имя — любое строковое выражение
Результат: логическое значение
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод hasOwnProperty возвращает true, если объект имеет свойство с данным именем, и false в противном случае. Этот метод не проверяет наличие свойства по цепочке прототипов; указанным свойством должен обладать именно сам объект. Пример:

var a = new Array();
var b1 = a.hasOwnProperty("join");		 // false
var b2 = Array.prototype.hasOwnProperty("join"); // true

Метод isPrototypeOf

Синтаксис: объект.isPrototypeOf(имя)
Аргумент:  имя — любое объектное выражение
Результат: логическое значение
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод isPrototypeOf возвращает true, если имя является объектом и объект содержится в цепочке его прототипов, и false в противном случае. Пример:

var a = new Array();
var b = Array.prototype.isPrototypeOf(a); // true

Метод propertyIsEnumerable

Синтаксис: объект.propertyIsEnumerable(имя)
Аргумент:  имя — любое строковое выражение
Результат: логическое значение
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод propertyIsEnumerable возвращает true, если объект имеет свойство с данным именем и это свойство не имеет атрибута DontEnum, и false в противном случае. Этот метод не проверяет наличие свойства по цепочке прототипов; указанным свойством должен обладать именно сам объект.

Метод toLocaleString

Синтаксис: объект.toLocaleString()
Результат: строковое значение

Метод toLocaleString преобразует объект в строковое значение, учитывая формат операционной системы. Результат зависит от объекта. По умолчанию возвращает строку "[object имя_объекта]", где имя_объекта — это имя данного класса объектов, т. е. совпадает с методом toString.

Метод toString

Синтаксис: объект.toString()
Результат: строковое значение

Метод toString преобразует объект в строковое значение. Результат зависит от объекта. По умолчанию возвращает строку "[object имя_объекта]", где имя_объекта — это имя данного класса объектов.

Этот метод автоматически вызывается исполняющей системой JavaScript всякий раз, когда требуется неявное преобразование объекта в строку.

Метод valueOf

Синтаксис: объект.valueOf()
Результат: зависит от объекта

Метод valueOf возвращает примитивное значение объекта. Результат зависит от объекта. По умолчанию возвращает строку "[object имя_объекта]", где имя_объекта — это имя данного класса объектов.

Обычно этот метод вызывается исполняющей системой JavaScript неявно при выполнении автоматического преобразования типов.

3.8.3. Функции: объект Function

Объект Function — это прототип функциональных объектов. Он может быть создан двумя способами:

function имя(аргументы?) {
  операторы
}

var имя = new Function ([аргументы,]? операторы)

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

Первый вариант — это декларация функции, описанная ранее. Сама по себе декларация функции не создает функционального объекта; его создание происходит в момент вызова этой функции. Второй вариант — это вызов конструктора объекта Function, при котором функциональный объект создается явно. В этом случае и аргументы, и операторы должны быть текстовыми строками.

Например, для создания функции, возвращающей сумму двух аргументов, можно использовать следующие два варианта:

function sum(a, b) {
  return a + b;
}

var sum = new Function("a", "b", "return a + b");

В обоих случаях вызов функции sum осуществляется оператором типа sum(3, 5).

Свойства объекта Function
Свойство | Описание | Член прототипа
arguments | Локальный объект, описывающий вызов функции. | Да
caller | Имя функции, вызвавшей данную функцию. | Да
constructor | Конструктор, который создал объект. | Да
length | Количество формальных аргументов функции. | Нет
prototype | Ссылка на прототип класса объектов. | Нет
Методы объекта Function
Метод | Описание | Член прототипа
apply | Применяет метод одного объекта к другому. | Да
call | Вызывает метод одного объекта из другого. | Да
toString | Преобразует функцию в строку. | Да
valueOf | Возвращает примитивное значение объекта. | Да

Свойство caller

Синтаксис: функция.caller
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства caller является ссылка на функцию, вызвавшую данную функцию. Если данная функция была вызвана с верхнего уровня сценария, то его значение null. Если это свойство используется в контексте, предполагающем его преобразование в строку, то результатом будет функция.caller.toString(), т. е. текст декларации вызвавшей функции. Пример: следующий сценарий

function sum(a, b) {
  document.write(sum.caller);	// автоматическое преобразование в строку
  return a + b;
}

function test() {
  return sum(1, 2);
}

test();

выведет на экран обозревателя строку function test() { return sum(1, 2); }.

Свойство length

Синтаксис: функция.length
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

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

function sum(a, b) {
  document.write(sum.length);
  return a + b;
}

var x = sum(1, 2);

выведет на экран обозревателя число 2.

Метод apply

Синтаксис: функция.apply(объект[,массив]?)
Аргументы: объект — любое объектное выражение
           массив — массив аргументов функции
Результат: определяется функцией

Метод apply применяет метод одного объекта в контексте другого объекта. Точнее говоря, он вызывает функцию, задавая в качестве this указатель на объект, а в качестве фактических аргументов — элементы массива. Если объект равен null или undefined, то значением this является глобальный объект. Если массив не указан, равен null или undefined, то функция вызывается без аргументов.

Этот метод удобен для создания цепочек конструкторов. Допустим, что мы написали конструктор объекта goods (товар) с двумя свойствами name (название) и price (цена). Теперь мы хотим написать конструктор объекта sales (продажи), который содержит объект goods и дополнительное свойство volume (объем продаж). С помощью метода apply это делается так:

function goods(name, price) {
  this.name = name;
  this.price = price;
}

function sales(name, price, volume) {
  this.volume = volume;
  goods.apply(this, arguments);
}

var meal = new sales("мука", 30, 700)
document.write("Выручка: ", meal.name, " - ",  meal.price * meal.volume, " руб.");

Этот сценарий выведет на экран обозревателя строку Выручка: мука - 21000 руб.

Ср. описание метода call.

Метод call

Синтаксис: функция.call(объект[,аргументы]?)
Аргументы: объект — любое объектное выражение
           аргументы — список аргументов функции через запятую
Результат: определяется функцией

Метод call вызывает метод одного объекта в контексте другого объекта. Точнее говоря, он вызывает функцию, задавая в качестве this указатель на объект, а в качестве фактических аргументов — аргументы. Если объект равен null или undefined, то значением this является глобальный объект. Если аргументы не указаны, то функция вызывается без аргументов.

Этот метод удобен для создания цепочек конструкторов. Перепишем предыдущий пример с использованием метода call:

function goods(name, price) {
  this.name = name;
  this.price = price;
}

function sales(name, price, volume) {
  this.volume = volume;
  goods.call(this, name, price);
}

var meal = new sales("мука", 30, 700)
document.write("Выручка: ", meal.name, " - ",  meal.price * meal.volume, " руб.");

Ср. описание метода apply.

Метод toString

Синтаксис: функция.toString()
Результат: строковое значение

Метод toString преобразует функцию в строковое значение. Результатом является строка, содержащая текст декларации вызвавшей функции. Пример: следующий сценарий

function sum(a, b) {
  document.write(sum.toString());
  return a + b;
}

var x = sum(1, 2);

выведет на экран обозревателя строку function sum(a, b) { document.write(sum.toString()); return a + b; }.

3.8.4. Логические объекты: объект Boolean

Объект Boolean — это объектная реализация примитивного булевского значения. Его конструктор имеет вид:

new Boolean(значение?)

Здесь значение — любое логическое выражение, задающее примитивное значение объекта. Если оно не указано, то примитивное значение объекта равно false.

Свойства объекта Boolean
Свойство | Описание | Член прототипа
constructor | Конструктор, который создал объект. | Да
prototype | Ссылка на прототип класса объектов. | Нет
Методы объекта Boolean
Метод | Описание | Член прототипа
toString | Преобразует объект в строку. | Да
valueOf | Возвращает примитивное значение объекта. | Да

Метод toString

Синтаксис: объект.toString()
Результат: строковое значение

Метод toString преобразует логический объект в строковое значение. Если примитивное значение объекта равно true, то он возвращает строку "true", в противном случае — строку "false".

Метод valueOf

Синтаксис: объект.valueOf()
Результат: логическое значение

Метод valueOf возвращает примитивное значение логического объекта.

3.8.5. Числовые объекты: объект Number

Объект Number — это объектная реализация примитивного числового значения. Его конструктор имеет вид:

new Number(значение?)

Здесь значение — любое числовое выражение, задающее примитивное значение объекта. Если оно не задано, то примитивное значение объекта равно +0.

Свойства объекта Number
Свойство | Описание | Член прототипа
constructor | Конструктор, который создал объект. | Да
MAX_VALUE | Наибольшее положительное значение числового типа. | Да
MIN_VALUE | Наименьшее положительное значение числового типа. | Да
NaN | Специальное значение "не число". | Да
NEGATIVE_INFINITY | Специальное значение "отрицательная бесконечность". | Да
POSITIVE_INFINITY | Специальное значение "положительная бесконечность". | Да
prototype | Ссылка на прототип класса объектов. | Нет
Методы объекта Number
Метод | Описание | Член прототипа
toExponential | Преобразует примитивное значение объекта в строку, содержащую число в экспоненциальной форме. | Да
toFixed | Преобразует примитивное значение объекта в строку, содержащую число с фиксированной запятой. | Да
toLocaleString | Преобразует примитивное значение объекта в строку в формате операционной системы. | Да
toPrecision | Преобразует примитивное значение объекта в строку, содержащую число с заданным количеством значимых цифр. | Да
toString | Преобразует примитивное значение объекта в строку. | Да
valueOf | Возвращает примитивное значение объекта. | Да

Свойство MAX_VALUE

Синтаксис: Number.MAX_VALUE
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства MAX_VALUE является наибольшее положительное значение числового типа, которое приблизительно равно 1.7976931348623157E+308. Числа, большие этого значения, трактуются как Infinity.

Это статическое свойство объекта Number, поэтому для доступа к нему не нужно специально создавать числовой объект.

Свойство MIN_VALUE

Синтаксис: Number.MIN_VALUE
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства MIN_VALUE является наибольшее положительное значение числового типа, которое приблизительно равно 5E-324. Числа, меньшие этого значения, преобразуются в 0.

Это статическое свойство объекта Number, поэтому для доступа к нему не нужно специально создавать числовой объект.

Свойство NaN

Синтаксис: Number.NaN
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства NaN является значение NaN (Not a Number, "не число"). Это значение не совпадает ни с одним числом, включая себя, поэтому мы не можем проверить правильность числа, сравнивая его с NaN. Вместо этого нужно использовать методы isFinite и isNaN.

Это статическое свойство объекта Number, поэтому для доступа к нему не нужно специально создавать числовой объект.

Свойство NEGATIVE_INFINITY

Синтаксис: Number.NEGATIVE_INFINITY
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства NEGATIVE_INFINITY является число, меньшее чем -Number.MIN_VALUE. Это значение обозначает отрицательную бесконечность и меньше любого числа, включая его само. В частности, результат умножения любого числа на NEGATIVE_INFINITY равен NEGATIVE_INFINITY, а результат деления любого числа на NEGATIVE_INFINITY равен 0.

Это статическое свойство объекта Number, поэтому для доступа к нему не нужно специально создавать числовой объект.

Свойство POSITIVE_INFINITY

Синтаксис: Number.POSITIVE_INFINITY
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства POSITIVE_INFINITY является число, большее чем Number.MAX_VALUE. Это значение обозначает положительную бесконечность и больше любого числа, включая его само. В частности, результат умножения любого числа на POSITIVE_INFINITY равен POSITIVE_INFINITY, а результат деления любого числа на POSITIVE_INFINITY равен 0.

Это статическое свойство объекта Number, поэтому для доступа к нему не нужно специально создавать числовой объект.

Метод toExponential

Синтаксис: объект.toExponential(число)
Аргументы: число — числовое выражение от 0 до 20 включительно
Результат: строковое значение
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод toExponential возвращает строку, содержащую экспоненциальную форму значения объекта. Эта строка содержит одну цифру перед десятичной запятой и заданное число цифр после запятой. Если аргумент число не определен, то число цифр определяется по правилам, приведенным в п. 3.3.2.3.

Например, оператор document.write(Math.PI.toExponential(4)) выведет на экран обозревателя текст 3.1416e+0.

Метод toFixed

Синтаксис: объект.toFixed(число)
Аргументы: число — числовое выражение от 0 до 20 включительно
Результат: строковое значение
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод toFixed возвращает строку, содержащую значение объекта в форме с фиксированной запятой. Эта строка содержит заданное число цифр после запятой. Если аргумент число не определен, то он принимается равным нулю.

Например, оператор document.write(Math.PI.toFixed(4)) выведет на экран обозревателя текст 3.1416.

Метод toLocaleString

Синтаксис: объект.toLocaleString()
Результат: строковое значение
Поддержка:   Internet Explorer  Поддерживается с версии 3.0.
             Netscape Navigator  Не поддерживается.

Метод toLocaleString преобразует числовой объект в строковое значение по правилам, приведенным в п. 3.3.2.3. При этом учитывается формат операционной системы, т. е. символ десятичной запятой и разделитель между тысячами.

Метод toPrecision

Синтаксис: объект.toPrecision(число)
Аргументы: число — числовое выражение от 1 до 21 включительно
Результат: строковое значение
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод toPrecision возвращает строку, содержащую значение объекта с заданной точностью. Точнее говоря, эта строка содержит:

  • либо число в экспоненциальной форме с одной цифрой перед десятичной запятой и число - 1 цифр после запятой;
  • либо число с фиксированной запятой, состоящее из число значащих цифр.

Если аргумент число не определен, то возвращается результат метода toString.

Например, оператор document.write(Math.PI.toPrecision(4)) выведет на экран обозревателя текст 3.142.

Метод toString

Синтаксис: объект.toString(основание?)
Аргументы: основание — любое числовое выражение
Результат: строковое значение

Метод toString преобразует числовой объект в строковое значение по правилам, приведенным в п. 3.3.2.3.

Необязательный аргумент основание задает основание системы счисления и должен иметь значение, больше или равное 2. Если он не задан, то считается равным 10. Метод toString преобразует число в строку в данной системе счисления. При этом в системах счисления с основанием, большим 10, цифры, большие девяти, задаются латинскими буквами (A = 10, B = 11, …, Z = 35). Формат чисел для оснований, больших 36, не определен.

Метод valueOf

Синтаксис: объект.valueOf()
Результат: числовое значение

Метод valueOf возвращает примитивное значение числового объекта.


WDH: JavaScript - Строки: встроенный объект String

Глава 3.9. Строки: встроенный объект String

Объект String — это объектная реализация примитивного строкового значения. Его конструктор имеет вид:

new String(значение?)

Здесь значение — любое строковое выражение, задающее примитивное значение объекта. Если оно не указано, то примитивное значение объекта равно "".

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

Помимо методов, предусмотренных стандартом ECMAScript, обозреватели Microscape традиционно поддерживают несколько методов объекта String, обеспечивающих заключение строки в теги HTML. Эти методы также описаны ниже.

Свойства объекта String
Свойство | Описание | Член прототипа
constructor | Конструктор, который создал объект. | Да
length | Количество символов в строке. | Нет
prototype | Ссылка на прототип класса объектов. | Нет
Стандартные методы объекта String
Метод | Описание | Член прототипа
charAt | Возвращает символ, находящийся в данной позиции строки. | Да
charCodeAt | Возвращает код символа, находящегося в данной позиции строки. | Да
concat | Возвращает конкатенацию строк. | Да
fromCharCode | Создает строку из символов, заданных кодами Unicode. | Да
indexOf | Возвращает позицию первого вхождения заданной подстроки. | Да
lastIndexOf | Возвращает позицию последнего вхождения заданной подстроки. | Да
localeCompare | Сравнивает две строки с учетом языка операционной системы. | Да
match | Сопоставляет строку с регулярным выражением. | Да
replace | Сопоставляет строку с регулярным выражением и заменяет найденную подстроку новой подстрокой. | Да
search | Ищет сопоставление строки с регулярным выражением. | Да
slice | Извлекает часть строки и возвращает новую строку. | Да
split | Разбивает строку на массив подстрок. | Да
substr | Возвращает подстроку, заданную позицией и длиной. | Да
substring | Возвращает подстроку, заданную начальной и конечной позициями. | Да
toLocaleLowerCase | Преобразует все буквы строки в строчные с учетом языка операционной системы. | Да
toLocaleUpperCase | Преобразует все буквы строки в прописные с учетом языка операционной системы. | Да
toLowerCase | Преобразует все буквы строки в строчные. | Да
toString | Преобразует объект в строку. | Да
toUpperCase | Преобразует все буквы строки в прописные. | Да
valueOf | Возвращает примитивное значение объекта. | Да
Нестандартные методы объекта String
Метод | Описание | Член прототипа
anchor | Создает закладку HTML (<A NAME="имя">…</A>). | Да
big | Заключает строку в теги <BIG>…</BIG>. | Да
blink | Заключает строку в теги <BLINK>…</BLINK>. | Да
bold | Заключает строку в теги <B>…</B>. | Да
fixed | Заключает строку в теги <TT>…</TT>. | Да
fontcolor | Заключает строку в теги <FONT COLOR="цвет">…</FONT>. | Да
fontsize | Заключает строку в теги <FONT SIZE="размер">…</FONT>. | Да
italics | Заключает строку в теги <I>…</I>. | Да
link | Создает гиперссылку HTML (<A HREF="uri">…</A>). | Да
small | Заключает строку в теги <SMALL>…</SMALL>. | Да
strike | Заключает строку в теги <STRIKE>…</STRIKE>. | Да
sub | Заключает строку в теги <SUB>…</SUB>. | Да
sup | Заключает строку в теги <SUP>…</SUP>. | Да

Свойство length

Синтаксис: объект.length
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства length является количество символов в строке. Для пустой строки это значение равно нулю.

Метод anchor

Синтаксис: объект.anchor(имя)
Аргументы: имя — любое строковое выражение
Результат: строковое значение

Метод anchor возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <A NAME="имя">…</A>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для создания в HTML-документе закладки с заданным именем. Например, оператор document.write("Мой текст".anchor("Закладка")) эквивалентен оператору document.write('<A NAME="Закладка">Мой текст</A>').

Метод big

Синтаксис: объект.big()
Результат: строковое значение

Метод big возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <BIG>…</BIG>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для отображения текста крупным шрифтом. Например, оператор document.write("Мой текст".big()) выведет на экран обозревателя строку Мой текст.

Метод blink

Синтаксис: объект.blink()
Результат: строковое значение

Метод blink возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <BLINK>…</BLINK>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для отображения текста мигающим шрифтом. Указанные теги не входят в стандарт HTML и поддерживаются только обозревателями Netscape и WebTV. Например, оператор document.write("Мой текст".blink()) выведет на экран обозревателя строку Мой текст.

Метод bold

Синтаксис: объект.bold()
Результат: строковое значение

Метод bold возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <B>…</B>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для отображения текста полужирным шрифтом. Например, оператор document.write("Мой текст".bold()) выведет на экран обозревателя строку Мой текст.

Метод charAt

Синтаксис: объект.charAt(позиция)
Аргументы: позиция — любое числовое выражение
Результат: строковое значение

Метод charAt возвращает строку, состоящую из символа, расположенного в данной позиции примитивного значения строкового объекта. Позиции символов строки нумеруются от нуля до объект.length-1. Если позиция лежит вне этого диапазона, то возвращается пустая строка. Например, оператор document.write("Строка".charAt(0)) выведет на экран обозревателя символ С.

Метод charCodeAt

Синтаксис: объект.charCodeAt(позиция)
Аргументы: позиция — любое числовое выражение
Результат: числовое значение

Метод charAt возвращает число, равную коду Unicode символа, расположенного в данной позиции примитивного значения строкового объекта. Позиции символов строки нумеруются от нуля до объект.length-1. Если позиция лежит вне этого диапазона, то возвращается NaN. Например, оператор document.write("Строка".charCodeAt(0).toString(16)) выведет на экран обозревателя шестнадцатеричный код русской буквы "С": 421.

WDH+ О возможных проблемах см. WDH+: ANSI и Unicode.

Метод concat

Синтаксис: объект.concat(строка0, строка1, …, строкаN)
Аргументы: строка0, строка1, …, строкаN — любые строковые выражения
Результат: строковое значение

Метод concat возвращает новую строку, являющуюся конкатенацией исходной строки и аргументов метода. Этот метод эквивалентен операции

объект + строка0 + строка1 + … + строкаN

Например, оператор document.write("Мороз и солнце. ".concat("День чудесный.")) выведет на экран обозревателя строку Мороз и солнце. День чудесный.

Метод fixed

Синтаксис: объект.fixed()
Результат: строковое значение

Метод fixed возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <TT>…</TT>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для отображения текста телетайпным шрифтом. Например, оператор document.write("Мой текст".fixed()) выведет на экран обозревателя строку Мой текст.

Метод fontcolor

Синтаксис: объект.fontcolor(цвет)
Аргументы: цвет — строковое выражение
Результат: строковое значение

Метод fontcolor возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <FONT COLOR=цвет>…</FONT>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для отображения текста заданным цветом. Например, оператор document.write("Мой текст".fontcolor("red")) выведет на экран обозревателя строку Мой текст.

Метод fontsize

Синтаксис: объект.fontsize(размер)
Аргументы: размер — числовое выражение
Результат: строковое значение

Метод fontsize возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <FONT SIZE="размер">…</FONT>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для отображения текста шрифтом заданного размера. Например, оператор document.write("Мой текст".fontsize(5)) выведет на экран обозревателя строку Мой текст.

Метод fromCharCode

Синтаксис: String.fromCharCode(код1, код2, …, кодN)
Аргументы: код1, код2, …, кодN — числовые выражения
Результат: строковое значение

Метод fromCharCode создает новую строку (но не строковый объект), которая является конкатенацией символов Unicode с кодами код1, код2, …, кодN.

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

var s = String.fromCharCode(65, 66, 67);	// s равно "ABC"

Метод indexOf

Синтаксис: объект.indexOf(подстрока [,начало]?)
Аргументы: подстрока — любое строковое выражение
           начало — любое числовое выражение
Результат: числовое значение

Метод indexOf возвращает первую позицию подстроки в примитивном значении строкового объекта. Позиции символов строки нумеруются от нуля до объект.length-1. Если задан необязательный аргумент начало, то поиск ведется, начиная с позиции начало; если нет, то с позиции 0, т. е. с первого символа строки. Если начало отрицательно, то оно принимается равным нулю; если начало больше, чем объект.length-1, то оно принимается равным объект.length-1. Если объект не содержит данной подстроки, то возвращается значение -1.

Поиск ведется слева направо. В остальном этом метод идентичен методу lastIndexOf. Следующий пример подсчитывает количество вхождений подстроки pattern в строку str.

function occur(str, pattern) {
  var pos = str.indexOf(pattern);
  for (var count = 0; pos != -1; count++)
    pos = str.indexOf(pattern, pos + pattern.length);
  return count;
}

Метод italics

Синтаксис: объект.italics()
Результат: строковое значение

Метод italics возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <I>…</I>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для отображения текста курсивным шрифтом. Например, оператор document.write("Мой текст".italics()) выведет на экран обозревателя строку Мой текст.

Метод lastIndexOf

Синтаксис: объект.lastIndexOf(подстрока [,начало]?)
Аргументы: подстрока — любое строковое выражение
           начало — любое числовое выражение
Результат: числовое значение

Метод lastIndexOf возвращает последнюю позицию подстроки в примитивном значении строкового объекта. Позиции символов строки нумеруются от нуля до объект.length-1. Если задан необязательный аргумент начало, то поиск ведется, начиная с позиции начало; если нет, то с позиции 0, т. е. с первого символа строки. Если начало отрицательно, то оно принимается равным нулю; если начало больше, чем объект.length-1, то оно принимается равным объект.length-1. Если объект не содержит данной подстроки, то возвращается значение -1.

Поиск ведется справа налево. В остальном этом метод идентичен методу indexOf. Пример:

var n = "Белый кит".lastIndexOf("кит");	// n равно 6

Метод link

Синтаксис: объект.link(uri)
Аргументы: uri — любое строковое выражение
Результат: строковое значение

Метод link возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <A HREF="uri">…</A>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для создания в HTML-документе гиперссылки с заданным uri. Например, оператор document.write("Мой текст".link("#Закладка")) эквивалентен оператору document.write('<A HREF="#Закладка">Мой текст</A>').

Метод localeCompare

Синтаксис: объект.localeCompare(строка1)
Аргументы: строка1 — любое строковое выражение
Результат: число
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод localeCompare сравнивает две строки с учетом национальных установок операционной системы. Он возвращает -1, если примитивное значение объекта меньше строки1, +1, если оно больше строки1, и 0, если эти значения совпадают.

Метод match

Синтаксис: объект.match(регвыр)
Аргументы: регвыр — любое регулярное выражение
Результат: массив строк

Метод match сопоставляет регулярное выражение регвыр с примитивным значением строкового объекта. Результатом сопоставления является массив найденных подстрок или null, если соответствий нет. При этом:

  • Если регвыр не содержит опцию глобального поиска, то выполняется метод регвыр.exec(объект) и возвращается его результат. Результирующий массив содержит в элементе с индексом 0 найденную подстроку, а в остальных элементах — подстроки, соответствующие подвыражениям регвыр, заключенным в круглые скобки.
  • Если регвыр содержит опцию глобального поиска, то метод регвыр.exec(объект) выполняется до тех пор, пока находятся соответствия. Если n — количество найденных соответствий, то результатом является массив из n элементов, которые содержат найденные подстроки. Свойству регвыр.lastIndex присваивается номер позиции в исходной строке, указывающий на первый символ после последнего найденного соответствия, или 0, если соответствий не найдено.

Следует помнить, что метод регвыр.exec изменяет свойства объекта регвыр. Примеры:

var src = "Он сказал: <I>Я ухожу</I> и добавил: <I>До свидания</I>.";
var res = src.match(/<i>.*?<\/i>/i);	// res = ["<I>Я ухожу</I>"]
var res = src.match(/<i>.*?<\/i>/ig);	// res = ["<I>Я ухожу</I>", "<I>До свидания</I>"]

Метод replace

Синтаксис: объект.replace(регвыр,строка)
           объект.replace(регвыр,функция)
Аргументы: регвыр — регулярное выражение
           строка — строковое выражение
           функция — имя функции или декларация функции
Результат: новая строка

Метод replace сопоставляет регулярное выражение регвыр с примитивным значением строкового объекта и заменяет найденные подстроки другими подстроками. Результатом является новая строка, которая является копией исходной строки с проведенными заменами. Способ замены определяется опцией глобального поиска в регвыр и типом второго аргумента.

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

Если вторым аргументом является строка, то замена каждой найденной подстроки производится на нее. При этом строка может содержать такие свойства объекта RegExp, как $1 , …, $9, lastMatch, lastParen, leftContext и rightContext. Например, оператор document.write("Вкусные яблоки, сочные яблоки.".replace(/яблоки/g, "груши")) выведет на экран обозревателя строку Вкусные груши, сочные груши.

Если вторым аргументом является функция, то замена каждой найденной подстроки производится вызовом этой функции. Функция имеет следующие аргументы. Первый аргумент — это найденная подстрока, затем следуют аргументы, соответствующие всем подвыражениям регвыр, заключенным в круглые скобки, предпоследний аргумент — это позиция найденной подстроки в исходной строке, считая с нуля, и последний аргумент— это сама исходная строка. Следующий пример показывает, как с помощью метода replace можно написать функцию преобразования градусов Фаренгейта в градусы Цельсия. Приведенный сценарий

function myfunc($0,$1) {
  return (($1-32) * 5 / 9) + "C";
}
function f2c(x) {
  var s = String(x);
  return s.replace(/(\d+(\.\d*)?)F\b/, myfunc);
}
document.write(f2c("212F"));

выведет на экран обозревателя строку 100C.

Следует помнить, что этот метод изменяет свойства объекта регвыр.

Метод search

Синтаксис: объект.search(регвыр)
Аргументы: регвыр — любое регулярное выражение
Результат: числовое выражение

Метод search сопоставляет регулярное выражение регвыр с примитивным значением строкового объекта. Результатом сопоставления является позиция первой найденной подстроки, считая с нуля, или -1, если соответствий нет. При этом опция глобального поиска в регвыр игнорируется, и свойства регвыр не изменяются. Примеры:

var src = "Он сказал: <I>Я ухожу</I> и добавил: <I>До свидания</I>.";
var n = src.search(/<i>.*?<\/i>/i);	// n равно 11

Метод slice

Синтаксис: объект.slice(начало [,конец]?)
Аргументы: начало и конец — любые числовые выражения
Результат: новая строка

Метод slice возвращает подстроку примитивного значения строкового объекта, от позиции начало до позиции конец, не включая ее. Если конец не задан, то возвращается подстрока, начиная с позиции начало и до конца исходной строки.

Позиции символов строки нумеруются от нуля до объект.length-1. Если значение начало отрицательно, то оно заменяется на объект.length+начало. Если значение конец отрицательно, то оно заменяется на объект.length+конец. Иными словами, отрицательные аргументы трактуются как смещения от конца строки.

Результатом является строковое значение, а не строковый объект. Например, оператор document.write("ABCDEF".slice(2,-1)) выведет на экран обозревателя строку CDE.

Метод small

Синтаксис: объект.small()
Результат: строковое значение

Метод small возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <SMALL>…</SMALL>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для отображения текста мелким шрифтом. Например, оператор document.write("Мой текст".small()) выведет на экран обозревателя строку Мой текст.

Метод split

Синтаксис: объект.split(разделитель [,число]?)
Аргументы: разделитель — строковое или регулярное выражение
           число — числовое выражение
Результат: массив строк (объект Array)

Метод split разбивает примитивное значение объекта на массив подстрок и возвращает его. Разбиение на подстроки производится следующим образом. Исходная строка просматривается слева направо в поисках разделителя. Как только он найден, подстрока от конца предыдущего разделителя (или от начала строки, если это первое вхождение разделителя) до начала найденного добавляется в массив подстрок. Таким образом, сам разделитель в текст подстроки не попадает.

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

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

  • Если разделитель не задан, то результирующий массив состоит из одного элемента, равного исходной строке.
  • Если разделитель — пустая строка или регулярное выражение, соответствующее пустой строке, то результирующий массив состоит из объект.length элементов, каждый из которых содержит один символ исходной строки.
  • Если разделитель — регулярное выражение, то очередная подстрока выделяется всякий раз, когда нашлось соответствие регулярному выражению, и соответствующая подстрока служит разделителем. Например, оператор var s = "a1b2c3d".split(/\d/); вернет массив ["a", "b", "c", "d"].

В следующем примере регулярное выражение используется для задания тегов HTML в качестве разделителя. Оператор

document.write("Текст <B>полужирный</B> и <EM>курсивный</EM>".split(/<\/?([^<>]+)>/));

выведет на экран обозревателя строку Текст ,полужирный, и ,курсивный.

Метод strike

Синтаксис: объект.strike()
Результат: строковое значение

Метод strike возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <STRIKE>…</STRIKE>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для отображения текста перечеркнутым шрифтом. Например, оператор document.write("Мой текст".strike()) выведет на экран обозревателя строку Мой текст.

Метод sub

Синтаксис: объект.sub()
Результат: строковое значение

Метод sub возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <SUB>…</SUB>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для отображения текста как нижнего индекса. Например, оператор document.write("Мой текст".sub()) выведет на экран обозревателя строку Мой текст.

Метод substr

Синтаксис: объект.substr(позиция [,длина]?)
Аргументы: позиция и длина — числовые выражения
Результат: строковое значение

Метод substr возвращает подстроку примитивного значения строкового объекта, начинающуюся с данной позиции и содержащую длина символов. Если длина не задана, то возвращается подстрока, начиная с данной позиции и до конца исходной строки. Если длина отрицательна или равна нулю, то возвращается пустая строка.

Позиции символов строки нумеруются от нуля до объект.length-1. Если позиция больше или равна объект.length, то возвращается пустая строка. Если позиция отрицательна, то она трактуется как смещение от конца строки, т. е. заменяется на объект.length+позиция.

Примечание. Если позиция отрицательна, то Internet Explorer ошибочно заменяет ее на 0, поэтому в целях совместимости этот вариант использовать не следует.

Результатом является строковое значение, а не строковый объект. Примеры:

var src = "abcdef";
var s1 = src.substr(1, 3);	// "bcd"
var s2 = src.substr(1);		// "bcdef"
var s3 = src.substr(-1);	// "f", но в MSIE: "abcdef"

Метод substring

Синтаксис: объект.substring(начало [,конец])
Аргументы: начало и конец — числовые выражения
Результат: строковое значение

Метод substring возвращает подстроку примитивного значения строкового объекта, от позиции начало до позиции конец, не включая ее. Если конец не задан, то возвращается подстрока, начиная с позиции начало и до конца исходной строки.

Позиции символов строки нумеруются от нуля до объект.length-1. Отрицательные аргументы или равные NaN заменяются на нуль; если аргумент больше длины исходной строки, то он заменяется на нее. Если начало больше конца, то они меняются местами. Если начало равно концу, то возвращается пустая строка.

Результатом является строковое значение, а не строковый объект. Примеры:

var src = "abcdef";
var s1 = src.substring(1, 3);	// "bc"
var s2 = src.substring(1, -1);	// "a"
var s3 = src.substring(-1, 1);	// "a"

Метод sup

Синтаксис: объект.sup()
Результат: строковое значение

Метод sup возвращает строку, состоящую из примитивного значения строкового объекта, заключенного в теги <SUP>…</SUP>. Проверки на то, не была ли исходная строка уже заключена в эти теги, не делается. Этот метод используется совместно с методами document.write и document.writeln для отображения текста как верхнего индекса. Например, оператор document.write("Мой текст".sup()) выведет на экран обозревателя строку Мой текст.

Метод toLocaleLowerCase

Синтаксис: объект.toLocaleLowerCase()
Результат: новая строка
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод toLocaleLowerCase возвращает новую строку, в которой все буквы исходной строки заменены на строчные с учетом национальных установок операционной системы. Остальные символы исходной строки не изменяются. Исходная строка остается прежней. Обычно этот метод возвращает тот же результат, что и toLowerCase; отличие возможно только в том случае, если кодировка языка противоречит правилам Unicode по преобразованию прописных букв в строчные.

Метод toLocaleUpperCase

Синтаксис: объект.toLocaleUpperCase()
Результат: новая строка
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод toLocaleUpperCase возвращает новую строку, в которой все буквы исходной строки заменены на прописные с учетом национальных установок операционной системы. Остальные символы исходной строки не изменяются. Исходная строка остается прежней. Обычно этот метод возвращает тот же результат, что и toUpperCase; отличие возможно только в том случае, если кодировка языка противоречит правилам Unicode по преобразованию строчных букв в прописные.

Метод toLowerCase

Синтаксис: объект.toLowerCase()
Результат: новая строка

Метод toLowerCase возвращает новую строку, в которой все буквы исходной строки заменены на строчные. Остальные символы исходной строки не изменяются. Исходная строка остается прежней. Например, оператор document.write("объект String".toUpperCase()) выведет на экран обозревателя строку объект string.

Метод toString

Синтаксис: объект.toString()
Результат: строковое значение

Метод toString возвращает примитивное значение строкового объекта.

Метод toUpperCase

Синтаксис: объект.toUpperCase()
Результат: новая строка

Метод toUpperCase возвращает новую строку, в которой все буквы исходной строки заменены на прописные. Остальные символы исходной строки не изменяются. Исходная строка остается прежней. Например, оператор document.write("объект String".toUpperCase()) выведет на экран обозревателя строку ОБЪЕКТ STRING.

Метод valueOf

Синтаксис: объект.valueOf()
Результат: строковое значение

Метод valueOf возвращает примитивное значение строкового объекта.


WDH: JavaScript - Массивы: встроенный объект Array

Глава 3.10. Массивы: встроенный объект Array

Объект Array используется для создания массивов, т. е. упорядоченных наборов элементов любого типа. Доступ к элементу массива производится по его номеру в массиве, называемому индексом элемента; обозначается i-й элемент массива a как a[i]. Элементы массива нумеруются с нуля, т. е. массив a, состоящий из N элементов, содержит элементы a[0], a[1], …, a[N-1].

Для создания массивов используются следующие конструкторы массивов:

new Array()
new Array(размер)
new Array(элемент0, элемент1, …, элементN)

Здесь размер — любое числовое выражение, задающее количество элементов в массиве; элемент0, элемент1, …, элементN — любые выражения.

Первый конструктор создает пустой массив, второй — массив из размер элементов, третий создает массив из N+1 элементов и присваивает им соответствующие значения. Если размер не является числом без знака, то создается массив с единственным элементом, имеющим это значение.

Кроме того, массив может быть создан с помощью инициализатора массива:

[элемент0, элемент1, …, элементN]

Примеры:

var a = new Array(5);		// массив из 5 элементов
var b = new Array("строка");	// массив из 1 элемента "строка"
var c = new Array(1, 2, 3);	// массив из 3 элементов: 1, 2 и 3
var d = ["1", "2", "3"];	// то же самое

Мы можем неявно увеличить размер массива, присвоив значение элементу с несуществующим индексом, например:

var colors = new Array();		// пустой массив
colors[99] = "пурпурный";		// размер массива стал равен 100

Функции сопоставления строки с регулярным выражением (RegExp.exec, String.match и String.replace) в качестве результата возвращают массив. Такие массивы, помимо стандартных свойств, обладают дополнительными свойствами index и input (см. описание метода RegExp.exec).

Поддержка:   Internet Explorer  Методы pop, push, shift, unshift поддерживаются с версии 5.5.
             Netscape Navigator  Соответствует стандарту (4.0+).
Свойства объекта Array
Свойство | Описание | Член прототипа
constructor | Конструктор, который создал объект. | Да
length | Количество элементов в массиве. | Нет
prototype | Ссылка на прототип класса объектов. | Нет
Методы объекта Array
Метод | Описание | Член прототипа
concat | Объединяет два массива в один новый и возвращает его. | Да
join | Объединяет все элементы массива в текстовую строку. | Да
pop | Удаляет последний элемент массива. | Да
push | Добавляет элементы в конец массива. | Да
reverse | Изменяет порядок элементов массива на противоположный. | Да
shift | Удаляет первый элемент массива и возвращает его. | Да
slice | Извлекает часть массива и возвращает новый массив. | Да
sort | Сортирует элементы массива. | Да
splice | Заменяет часть массива. | Да
toLocaleString | Преобразует массив в строку с учетом формата операционной системы. | Да
toString | Преобразует массив в строку. | Да
unshift | Добавляет элементы в начало массива. | Да
valueOf | Возвращает примитивное значение массива. | Да

Свойство length

Синтаксис: массив.length
Атрибуты:  { DontEnum, DontDelete }

Значением свойства length является размер массива, т. е. количество элементов в нем, например:

var x = new Array();
x[0] = "Строка";
x[5] = "Еще строка";
var l = x.length;	// l равно 6

Мы можем явно задать новый размер массива, изменяя значение свойства length. Если при этом новый размер массива меньше текущего, то лишние элементы массива будут удалены. Если же новый размер массива больше текущего, то к массиву будут добавлены новые элементы со значением undefined.

Метод concat

Синтаксис: массив.concat(массив1)
Аргументы: массив1 — выражение, возвращающее массив
Результат: новый массив

Метод concat объединяет массив и массив1 в новый массив и возвращает его. При этом все элементы массива массив1 добавляются в конец массива. Например, сценарий

var x = new Array(1, 2, 3);
var y = new Array(4, 5, 6);
document.write(x.concat(y));

выведет на экран обозревателя строку 1,2,3,4,5,6.

WDH+ См. также WDH+: Метод concat работает правильно.

Метод join

Синтаксис: массив.join(разделитель)
Аргументы: разделитель — любое строковое выражение
Результат: строковое значение

Метод join преобразует массив в строковое значение. Для этого все элементы массива преобразуются в строки, и эти строки объединяются в одну строку. Разделителем между ними в .результирующей строке является строка разделитель; если она опущена, то разделителем служит пустая строка. Например, сценарий

var x = new Array(1, 2, 3);
document.write(x.join("-"));

выведет на экран обозревателя строку 1-2-3.

Метод pop

Синтаксис: массив.pop()
Результат: значение последнего элемента массива

Метод pop удаляет последний элемент массива и возвращает его в качестве результата. Размер массива при этом уменьшается на 1. Например, сценарий

var x = ["a", "b", "c", "d"]
x.pop();
document.write(x);

выведет на экран обозревателя строку a,b,c.

Методы push и pop позволяют реализовать программный стек на базе объектов Array.

Метод push

Синтаксис: массив.push(элемент1, …, элементN)
Аргументы: элемент1, …, элементN — любые выражения
Результат: новая длина массива

Метод push добавляет значения аргументов в конец массива и возвращает в качестве результата новый размер массива, который при этом увеличивается на N. Например, сценарий

var x = ["a", "b", "c", "d"]
document.write(x.push("e");

выведет на экран обозревателя число 5.

Методы push и pop позволяют реализовать программный стек на базе объектов Array.

Метод reverse

Синтаксис: массив.reverse()
Результат: массив

Метод reverse изменяет порядок элементов в массиве на противоположный. При этом новый объект Array не создается, перестановка элементов производится в исходном массиве. Если не все элементы массива были определены, то им присваивается значение undefined. Например, сценарий

var x = new Array();
x[0] = 0; x[2] = 2; x[4] = 4;
document.write(x.reverse());

выведет на экран обозревателя строку 4,,2,,0.

Метод shift

Синтаксис: массив.shift()
Результат: значение первого элемента массива

Метод shift удаляет первый элемент массива и возвращает его в качестве результата. Размер массива при этом уменьшается на 1. Например, сценарий

var x = ["a", "b", "c", "d"]
x.shift();
document.write(x);

выведет на экран обозревателя строку b,c,d.

Методы shift и unshift позволяют реализовать программную очередь на базе объектов Array.

Метод slice

Синтаксис: массив.slice(начало [,конец]?)
Аргументы: начало и конец — любые числовые выражения
Результат: новый массив

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

  • Если значение конец неотрицательно, то копируются элементы массив[начало], массив[начало+1], …, массив[конец-1].
  • Если значение конец отрицательно, то копируются элементы массив[начало], массив[начало+1], …, массив[массив.length-конец-1], т. е. конец означает смещение от конца массива.
  • Если аргумент конец отсутствует, то копируются элементы массив[начало], массив[начало+1], …, массив[массив.length-1], т. е. копируются все элементы до конца массива.

Например, сценарий

var x = new Array(10);
for (i = 0; i < 10; i++)
  x[i] = i;
document.write(x.slice(5,-1));

выведет на экран обозревателя строку 5,6,7,8.

Метод sort

Синтаксис: массив.sort(функция?)
Аргументы: функция — функция сортировки, описанная ниже
Результат: массив

Метод sort сортирует элементы массива. При этом новый объект Array не создается, перестановка элементов производится в исходном массиве. Способ сортировки задается необязательным аргументом функция; если аргумента нет, то производится сортировка в лексикографическом порядке по возрастанию значений элементов, которые предварительно преобразуются в строки.

Функция должна иметь вид:

function compare(a, b) {
  if (a меньше b по критерию сортировки)
    return -1;
  if (a больше b по критерию сортировки)
    return 1;
  return 0;	// a равно b
}

Приведем пример сортировки массива в лексикографическом порядке по убыванию значений элементов. Следующий сценарий

function cmp(a, b) {
  if (String(a) > String(b))
    return -1;
  if (String(a) < String(b))
    return 1;
  return 0;
}

var flowers = ["астра", "роза", "пион", "ромашка"];
document.write(flowers.sort(cmp));

выведет на экран обозревателя строку ромашка,роза,пион,астра.

Метод splice

Синтаксис: массив.splice(начало, счетчик [,элементы]?)
Аргументы: начало и счетчик — любые числовые выражения
           элементы — список любых выражений через запятую
Результат: новый массив
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод splice удаляет часть массива и возвращает ее в качестве результата. Если заданы элементы, то они вставляются вместо удаленной части массива. Аргумент начало задает индекс первого элемента удаляемой части, аргумент счетчик — количество удаляемых элементов. Например, сценарий

var x = new Array(10);
for (i = 0; i < 10; i++)
  x[i] = i;
x.splice(5, 3, -5, -6, -7);
document.write(x);

выведет на экран обозревателя строку 0,1,2,3,4,-5,-6,-7,8,9.

Метод toLocaleString

Синтаксис: массив.toLocaleString()
Результат: строковое значение

Метод toLocaleString преобразует массив в строковое значение, учитывая формат операционной системы. Результат зависит от объекта. Обычно он дает тот же результат, что и метод toString.

Метод toString

Синтаксис: массив.toString()
Результат: строковое значение

Метод toString преобразует массив в строковое значение. Для этого все элементы массива преобразуются в строки, и эти строки объединяются в одну строку через запятую. Например, сценарий

var x = new Array(1, 2, 3);
document.write(x.toString());

выведет на экран обозревателя строку 1,2,3.

Метод unshift

Синтаксис: массив.unshift(элемент1, …, элементN)
Аргументы: элемент1, …, элементN — любые выражения
Результат: новая длина массива

Метод unshift добавляет значения аргументов в начало массива и возвращает в качестве результата новый размер массива, который при этом увеличивается на N. Например, сценарий

var x = ["a", "b", "c", "d"]
document.write(x.unshift("e"));

выведет на экран обозревателя число 5.

Методы shift и unshift позволяют реализовать программную очередь на базе объектов Array.

Метод valueOf

Синтаксис: массив.valueOf()
Результат: строковое значение

Метод valueOf возвращает примитивное значение массива. Для этого все элементы массива преобразуются в строки, и эти строки объединяются в одну строку через запятую. Иными словами, этот метод возвращает тот же результат, что и метод toString.


WDH: JavaScript - Дата и время: встроенный объект Date

Глава 3.11. Дата и время: встроенный объект Date

Объект Date предназначен для манипуляций с датами и временами. Его примитивным значением является число, равное количеству миллисекунд относительно базового времени, равного полуночи 1 января 1970 г. по Гринвичскому меридиану (UTC, Universal Coordinated Time). Если это значение равно NaN, то оно считается неопределенным.

День состоит из 86400000 миллисекунд. Диапазон значений Date от -100000000 дней до 100000000 дней относительно базового времени, что приблизительно равно 285616 лет в каждую сторону отсчета.

Для создания объектов Date используются следующие конструкторы:

new Date()
new Date(число)
new Date(строка)
new Date(год, месяц, день [,часы [,минуты [,секунды [,мс]?]?]?]?)

Здесь:

  • число — числовое выражение, задающее примитивное значение объекта в миллисекундах;
  • строка — строковое выражение, задающее дату и время в формате, описанном в методе parse;
  • год — числовое выражение, задающее полный номер года (например, 1988, а не 88);
  • месяц — числовое выражение, задающее номер месяца (0 = январь, 1 = февраль, …, 11 = декабрь);
  • день — числовое выражение, задающее номер для в месяце от 1 до 31;
  • часы — необязательное числовое выражение, задающее номер часа от 0 до 23;
  • минуты — необязательное числовое выражение, задающее номер минуты от 0 до 59;
  • секунды — необязательное числовое выражение, задающее номер секунды от 0 до 59;
  • мс — необязательное числовое выражение, задающее номер миллисекунды от 0 до 999.

Первый конструктор создает объект Date с текущей датой и временем по местному времени. Остальные конструкторы создают объект Date с датой и временем, заданными аргументами конструктора.

Примеры:

var a = new Date();		           // текущие дата и время
var b = new Date("May 21, 1958 10:15 AM"); // заданные дата и время
var c = new Date(1958, 4, 21, 10, 15);     // то же самое в другом формате
Свойства объекта Date
Свойство | Описание | Член прототипа
constructor | Конструктор, который создал объект. | Да
prototype | Ссылка на прототип класса объектов. | Нет
Методы объекта Date
Метод | Описание | Член прототипа
getDate | Возвращает день месяца по местному времени. | Да
getDay | Возвращает день недели по местному времени. | Да
getFullYear | Возвращает полный номер года по местному времени. | Да
getHours | Возвращает часы по местному времени. | Да
getMilliseconds | Возвращает миллисекунды по местному времени. | Да
getMinutes | Возвращает минуты по местному времени. | Да
getMonth | Возвращает месяц по местному времени. | Да
getSeconds | Возвращает секунды по местному времени. | Да
getTime | Возвращает примитивное значение объекта. | Да
getTimezoneOffset | Возвращает разницу в минутах между местным временем и UTC. | Да
getUTCDate | Возвращает день месяца по времени UTC. | Да
getUTCDay | Возвращает день недели по времени UTC. | Да
getUTCFullYear | Возвращает полный номер года по времени UTC. | Да
getUTCHours | Возвращает часы по времени UTC. | Да
getUTCMilliseconds | Возвращает миллисекунды по времени UTC. | Да
getUTCMinutes | Возвращает минуты по времени UTC. | Да
getUTCMonth | Возвращает месяц по времени UTC. | Да
getUTCSeconds | Возвращает секунды по времени UTC. | Да
getVarDate | Возвращает примитивное значение объекта в формате VT_DATE. | Нет
getYear | Возвращает номер года по местному времени. | Да
parse | Преобразует дату, заданную строкой, в количество миллисекунд относительно базового времени. | Нет
setDate | Устанавливает день месяца по местному времени. | Да
setFullYear | Устанавливает полный номер года по местному времени. | Да
setHours | Устанавливает часы по местному времени. | Да
setMilliseconds | Устанавливает миллисекунды по местному времени. | Да
setMinutes | Устанавливает минуты по местному времени. | Да
setMonth | Устанавливает месяц по местному времени. | Да
setSeconds | Устанавливает секунды по местному времени. | Да
setTime | Устанавливает примитивное значение объекта. | Да
setUTCDate | Устанавливает день месяца по времени UTC. | Да
setUTCFullYear | Устанавливает полный номер года по времени UTC. | Да
setUTCHours | Устанавливает часы по времени UTC. | Да
setUTCMilliseconds | Устанавливает миллисекунды по времени UTC. | Да
setUTCMinutes | Устанавливает минуты по времени UTC. | Да
setUTCMonth | Устанавливает месяц по времени UTC. | Да
setUTCSeconds | Устанавливает секунды по времени UTC. | Да
setYear | Устанавливает номер года по местному времени. | Да
toDateString | Преобразует примитивное значение объекта в строку даты. | Да
toGMTString | Преобразует примитивное значение объекта в строку даты и времени по Гринвичскому меридиану. | Да
toLocaleDateString | Преобразует примитивное значение объекта в строку даты в формате операционной системы. | Да
toLocaleString | Преобразует примитивное значение объекта в строку даты и времени в формате операционной системы. | Да
toLocaleTimeString | Преобразует примитивное значение объекта в строку времени в формате операционной системы. | Да
toString | Преобразует примитивное значение объекта в строку. | Да
toTimeString | Преобразует примитивное значение объекта в строку времени. | Да
toUTCString | Преобразует примитивное значение объекта в строку даты и времени по UTC. | Да
UTC | Возвращает примитивное значение объекта по времени UTC. | Нет
valueOf | Возвращает примитивное значение объекта. | Да

Метод getDate

Синтаксис: дата.getDate()
Результат: числовое значение

Метод getDate преобразует примитивное значение объекта дата в номер дня месяца по местному времени и возвращает его. Результатом является целое число в диапазоне от 1 до 31. Например, сценарий

var xmas = new Date("December 25, 1999 23:59:59");
document.write(xmas.getDate());

выведет на экран обозревателя число 25.

Метод getDay

Синтаксис: дата.getDay()
Результат: числовое значение

Метод getDay преобразует примитивное значение объекта дата в номер дня недели по местному времени и возвращает его. Результатом является целое число в диапазоне от 0 до 6:

0 = воскресенье, 1 = понедельник, 2 = вторник, 3 = среда, 4 = четверг, 5 = пятница, 6 = суббота.

Например, сценарий

var xmas = new Date("December 25, 1999 23:59:59");
document.write(xmas.getDay());

выведет на экран обозревателя число 6 (т. е. рождество в 1999 г. пришлось на субботу).

Метод getFullYear

Синтаксис: дата.getFullYear()
Результат: числовое значение

Метод getFullYear преобразует примитивное значение объекта дата в полный (четырехзначный) номер года по местному времени и возвращает его. Например, сценарий

var today = new Date();
document.write(today.getFullYear());

выведет на экран обозревателя число 2000.

Метод getHours

Синтаксис: дата.getHours()
Результат: числовое значение

Метод getHours преобразует примитивное значение объекта дата в номер часа по местному времени и возвращает его. Результатом является целое число в диапазоне от 0 до 23. Например, сценарий

var xmas = new Date("December 25, 1999 23:59:59");
document.write(xmas.getHours());

выведет на экран обозревателя число 23.

Метод getMilliseconds

Синтаксис: дата.getMilliseconds()
Результат: числовое значение

Метод getMilliseconds преобразует примитивное значение объекта дата в микросекунды по местному времени и возвращает его. Результатом является целое число в диапазоне от 0 до 999. Например, сценарий

var xmas = new Date("December 25, 1999 23:59:59");
document.write(xmas.getMilliseconds());

выведет на экран обозревателя число 0.

Метод getMinutes

Синтаксис: дата.getMinutes()
Результат: числовое значение

Метод getMinutes преобразует примитивное значение объекта дата в минуты по местному времени и возвращает его. Результатом является целое число в диапазоне от 0 до 59. Например, сценарий

var xmas = new Date("December 25, 1999 23:59:59");
document.write(xmas.getMinutes());

выведет на экран обозревателя число 59.

Метод getMonth

Синтаксис: дата.getMonth()
Результат: числовое значение

Метод getMonth преобразует примитивное значение объекта дата в номер месяца по местному времени и возвращает его. Результатом является целое число в диапазоне от 0 до 11: 0 = январь, 1 = февраль, 2 = март, 3 = апрель, 4 = май, 5 = июнь, 6 = июль, 7 = август, 8 = сентябрь, 9 = октябрь, 10 = ноябрь, 11 = декабрь.

Например, сценарий

var xmas = new Date("December 25, 1999 23:59:59");
document.write(xmas.getMonth());

выведет на экран обозревателя число 11.

Метод getSeconds

Синтаксис: дата.getSeconds()
Результат: числовое значение

Метод getSeconds преобразует примитивное значение объекта дата в секунды по местному времени и возвращает его. Результатом является целое число в диапазоне от 0 до 59. Например, сценарий

var xmas = new Date("December 25, 1999 23:59:59");
document.write(xmas.getSeconds());

выведет на экран обозревателя число 59.

Метод getTime

Синтаксис: дата.getTime()
Результат: числовое значение

Метод getTime возвращает примитивное значение объекта дата. Этот метод полезен для копирования значения одного объекта Date в другой. Пример:

var d1 = new Date("May 21, 1958");
var d2 = new Date();
d2.SetTime(d1.GetTime());	// теперь значения этих объектов равны

Метод getTimezoneOffset

Синтаксис: дата.getTimezoneOffset()
Результат: числовое значение

Метод getTimezoneOffset возвращает разницу в минутах между временем UTC и местным временем (т. е. временем компьютера, на котором выполняется сценарий). Из-за переходов на летнее и зимнее время эта разница в течение года может изменяться. Для перевода местного времени в UTC следует прибавить к нему полученное значение.

Если, например, следующий сценарий

var today = new Date();
document.write(today.getTimezoneOffset() / 60);

выполняется на компьютере, находящемся в Екатеринбурге, то он выведет на экран обозревателя число -6. Это означает, что время в Екатеринбурге на 6 часов больше, чем UTC.

Метод getUTCDate

Синтаксис: дата.getUTCDate()
Результат: числовое значение

Метод getUTCDate преобразует примитивное значение объекта дата в номер дня месяца по времени UTC и возвращает его. Результатом является целое число в диапазоне от 1 до 31. Например, сценарий

var today = new Date();
document.write(today.getUTCDate());

выведет на экран обозревателя сегодняшний день месяца.

Метод getUTCDay

Синтаксис: дата.getUTCDay()
Результат: числовое значение

Метод getUTCDay преобразует примитивное значение объекта дата в номер дня недели по времени UTC и возвращает его. Результатом является целое число в диапазоне от 0 до 6:

0 = воскресенье, 1 = понедельник, 2 = вторник, 3 = среда, 4 = четверг, 5 = пятница, 6 = суббота.

Например, сценарий

var today = new Date();
document.write(today.getUTCDay());

выведет на экран обозревателя сегодняшний день недели.

Метод getUTCFullYear

Синтаксис: дата.getUTCFullYear()
Результат: числовое значение

Метод getUTCFullYear преобразует примитивное значение объекта дата в полный (четырехзначный) номер года по времени UTC и возвращает его. Например, сценарий

var today = new Date();
document.write(today.getUTCFullYear());

выведет на экран обозревателя номер текущего года.

Метод getUTCHours

Синтаксис: дата.getHours()
Результат: числовое значение

Метод getUTCHours преобразует примитивное значение объекта дата в номер часа по времени UTC и возвращает его. Результатом является целое число в диапазоне от 0 до 23. Например, сценарий

var today = new Date();
document.write(today.getUTCHours());

выведет на экран обозревателя текущее количество часов.

Метод getUTCMilliseconds

Синтаксис: дата.getUTCMilliseconds()
Результат: числовое значение

Метод getUTCMilliseconds преобразует примитивное значение объекта дата в микросекунды по времени UTC и возвращает его. Результатом является целое число в диапазоне от 0 до 999. Например, сценарий

var today = new Date();
document.write(today.getUTCMilliseconds());

выведет на экран обозревателя текущее количество миллисекунд.

Метод getUTCMinutes

Синтаксис: дата.getUTCMinutes()
Результат: числовое значение

Метод getUTCMinutes преобразует примитивное значение объекта дата в минуты по времени UTC и возвращает его. Результатом является целое число в диапазоне от 0 до 59. Например, сценарий

var today = new Date();
document.write(today.getUTCMinutes());

выведет на экран обозревателя текущее количество минут.

Метод getUTCMonth

Синтаксис: дата.getUTCMonth()
Результат: числовое значение

Метод getUTCMonth преобразует примитивное значение объекта дата в номер месяца по времени UTC и возвращает его. Результатом является целое число в диапазоне от 0 до 11: 0 = январь, 1 = февраль, 2 = март, 3 = апрель, 4 = май, 5 = июнь, 6 = июль, 7 = август, 8 = сентябрь, 9 = октябрь, 10 = ноябрь, 11 = декабрь.

Например, сценарий

var today = new Date();
document.write(today.getUTCMonth());

выведет на экран обозревателя номер текущего месяца.

Метод getUTCSeconds

Синтаксис: дата.getSeconds()
Результат: числовое значение

Метод getUTCSeconds преобразует примитивное значение объекта дата в секунды по времени UTC и возвращает его. Результатом является целое число в диапазоне от 0 до 59. Например, сценарий

var today = new Date();
document.write(today.getUTCSeconds());

выведет на экран обозревателя текущее количество секунд.

Метод getVarDate

Синтаксис: дата.getVarDate()
Результат: числовое значение

Метод getVarDate преобразует примитивное значение объекта дата в формат VT_DATE и возвращает его. Результат зависит от региональных настроек и не используется JavaScript. Поэтому этот метод предназначен исключительно для взаимодействия с COM-объектами, объектами ActiveX или с языками, которые используют формат даты VT_DATE (таковы, например, Visual Basic и VBScript).

Метод getYear

Синтаксис: дата.getYear()
Результат: числовое значение
Поддержка:   Internet Explorer  Годы 1900-1999 возвращаются как 00-99; все остальные годы
              возвращаются четырехзначными числами.
             Netscape Navigator  Возвращается номер года минус 1900.

Метод getYear преобразует примитивное значение объекта дата в номер года по местному времени и возвращает его. Этот метод является устаревшим и поддерживается только в целях совместимости; вместо него следует пользоваться методом getFullYear.

Например, сценарий

var today = new Date();
document.write(today.getYear());

выведет на экран Internet Explorer число 2000, а на экран Netscape Navigator число 100.

Метод parse

Синтаксис: Date.parse(строка)
Аргументы: строка — строковое выражение
Результат: числовое значение

Метод parse преобразует дату, заданную строкой, в количество миллисекунд относительно базового времени, и возвращает его. Строка: должна содержать дату и время в определенном формате. Допускаются следующие форматы даты (пробелы и запятые трактуются как разделители):

"7/20/82"    "July 10, 1995"     "12-11-76"    "10 Jan 2000"

Время может содержать часы, минуты и секунды, разделенные двоеточием:

"11:"    "11:45"     "23:45:12"    "11:45:12 PM"

После даты и времени может стоять указатель временной зоны следующего вида (обе формы эквивалентны и означают на 4 часа 30 минут больше UTC):

"UTC+0430"    "GMT+0430"

Если такого указателя нет, то время считается местным. Перед датой и временем может стоять название дня недели; если оно не соответствует заданной дате, то игнорируется.

Это статический метод объекта Date, поэтому для доступа к нему используется форма Date.parse, а не объект.parse.

Например, сценарий

var d = new Date();
d.setTime(Date.parse("21 May 1958 10:12"));
document.write(d.toLocaleString());

выведет на экран обозревателя примерно такую строку: Wednesday, May 21, 1958 10:12:00 (точный вид этой строки зависит от обозревателя и настроек операционной системы).

Метод setDate

Синтаксис: дата.setDate(день)
Аргументы: день — числовое выражение
Результат: нет

Метод setDate изменяет номер дня месяца по местному времени в объекте дата. День должен быть целым числом в диапазоне от 1 до 31. Если день превышает количество дней в данном месяце, то устанавливается день, равный дню минус количество дней в данном месяце, а номер месяца увеличивается. Если день отрицателен, то день и месяц изменяются по аналогичным правилам.

Например, сценарий

var d = new Date("July 27, 1962 23:30:00");
d.setDate(32);
document.write(d.toLocaleString());

выведет на экран обозревателя строку Wednesday, August 01, 1962 23:30:00.

Метод setFullYear

Синтаксис: дата.setFullYear(год [,месяц [,день]?]?)
Аргументы: год, месяц, день — числовые выражения
Результат: нет

Метод setFullYear изменяет полный (четырехзначный) номер года по местному времени в объекте дата. Одновременно он позволяет изменить номер месяца и номер дня в месяце (ср. методы setMonth и setDate). Например, сценарий

var d = new Date("September 26, 2000 09:52:30");
d.setFullYear(1999);
document.write(d.toLocaleString());

выведет на экран обозревателя строку Sunday, September 26, 1999 09:52:30.

Метод setHours

Синтаксис: дата.setHours(часы [,минуты [,секунды [,миллисекунды]?]?]?)
Аргументы: часы, минуты, секунды, миллисекунды — числовые выражения
Результат: нет

Метод setHours задает часы по местному времени в объекте дата. Часы должны быть целым числом в диапазоне от 0 до 23. Если часы больше 23, то устанавливается час, равный часам минус 23, а номер дня увеличивается. Если часы отрицательны, то час и день изменяются по аналогичным правилам.

Этот метод позволяет одновременно изменить минуты, секунды и миллисекунды в объекте дата. Ср. методы setMinutes, setSeconds и setMilliseconds.

Например, сценарий

var d = new Date("July 27, 1962 23:30:00");
d.setHours(25);
document.write(d.toLocaleString());

выведет на экран обозревателя строку Saturday, July 28, 1962 01:30:00.

Метод setMilliseconds

Синтаксис: дата.setMilliseconds(миллисекунды)
Аргументы: миллисекунды — числовое выражение
Результат: нет

Метод setMilliseconds задает миллисекунды по местному времени в объекте дата. Миллисекунды должны быть целым числом в диапазоне от 0 до 999. Если миллисекунды больше 999, то устанавливаются миллисекунды, равные миллисекундам минус 999, а номер секунды увеличивается. Если миллисекунды отрицательны, то миллисекунды и секунды изменяются по аналогичным правилам.

Например, сценарий

var d = new Date("January 20, 1999 23:59:59");
d.setMilliseconds(-1000);
document.write(d.toLocaleString());

выведет на экран обозревателя строку Wednesday, January 20, 1999 23:59:58.

Метод setMinutes

Синтаксис: дата.setMinutes(минуты [,секунды [,миллисекунды]?]?)
Аргументы: минуты, секунды, миллисекунды — числовое выражение
Результат: нет

Метод setMinutes задает минуты по местному времени в объекте дата. Минуты должны быть целым числом в диапазоне от 0 до 59. Если минуты больше 59, то устанавливаются минуты, равные минутам минус 59, а номер часа увеличивается. Если минуты отрицательны, то минуты и часы изменяются по аналогичным правилам.

Этот метод позволяет одновременно изменить секунды и миллисекунды в объекте дата. Ср. методы setSeconds и setMilliseconds.

Например, сценарий

var d = new Date("January 20, 1999 23:59:59");
d.setMinutes(60);
document.write(d.toLocaleString());

выведет на экран обозревателя строку Thursday, January 21, 1999 00:00:59.

Метод setMonth

Синтаксис: дата.setMonth(месяц [,день]?)
Аргументы: месяц, день — числовые выражения
Результат: нет

Метод setMonth задает номер месяца по местному времени в объекте дата. Месяц должен быть целым числом в диапазоне от 0 до 11. Если месяц больше 11, то устанавливается месяц, равный месяцу минус 11, а номер года увеличивается. Если месяц отрицателен, то месяц и годы изменяются по аналогичным правилам.

Этот метод позволяет одновременно изменить номер дня в месяце (ср. метод setDate).

Например, сценарий

var d = new Date("January 20, 1999 23:59:59");
d.setMonth(-1);
document.write(d.toLocaleString());

выведет на экран обозревателя строку Sunday, December 20, 1998 23:59:59.

Метод setSeconds

Синтаксис: дата.setSeconds(секунды [,миллисекунды]?)
Аргументы: секунды, миллисекунды — числовые выражения
Результат: нет

Метод setSeconds задает секунды по местному времени в объекте дата. Cекунды должны быть целым числом в диапазоне от 0 до 59. Если секунды больше 59, то устанавливаются секунды, равные секундам минус 59, а номер минуты увеличивается. Если секунды отрицательны, то секунды и минуты изменяются по аналогичным правилам.

Этот метод позволяет одновременно изменить микросекунды (ср. метод setMilliseconds).

Например, сценарий

var d = new Date("January 20, 1999 23:59:59");
d.setSeconds(60);
document.write(d.toLocaleString());

выведет на экран обозревателя строку Thursday, January 21, 1999 00:00:00.

Метод setTime

Синтаксис: дата.setTime(значение)
Аргументы: значение — числовое выражение
Результат: числовое значение

Метод setTime устанавливает примитивное значение объекта дата, равным значению. Заданное значение объекта не зависит от временной зоны. Этот метод полезен для копирования значения одного объекта Date в другой. Пример:

var d1 = new Date("May 21, 1958");
var d2 = new Date();
d2.SetTime(d1.GetTime());	// теперь значения этих объектов равны

Метод setUTCDate

Синтаксис: дата.setUTCDate(день)
Аргументы: день — числовое выражение
Результат: нет

Метод setUTCDate изменяет номер дня месяца по времени UTC в объекте дата. День должен быть целым числом в диапазоне от 1 до 31. Если день превышает количество дней в данном месяце, то устанавливается день, равный дню минус количество дней в данном месяце, а номер месяца увеличивается. Если день отрицателен, то день и месяц изменяются по аналогичным правилам. Пример:

var d = new Date("July 27, 1962 23:30:00");
d.setUTCDate(25);

Метод setUTCFullYear

Синтаксис: дата.setUTCFullYear(год [,месяц [,день]?]?)
Аргументы: год, месяц, день — числовые выражения
Результат: нет

Метод setUTCFullYear изменяет полный (четырехзначный) номер года по времени UTC в объекте дата. Одновременно он позволяет изменить номер месяца и номер дня в месяце (ср. методы setUTCMonth и setUTCDate). Пример:

var d = new Date("July 27, 1962 23:30:00");
d.setUTCFullYear(1978);

Метод setUTCHours

Синтаксис: дата.setUTCHours(часы [,минуты [,секунды [,миллисекунды]?]?]?)
Аргументы: часы, минуты, секунды, миллисекунды — числовые выражения
Результат: нет

Метод setUTCHours задает часы по времени UTC в объекте дата. Часы должны быть целым числом в диапазоне от 0 до 23 . Если часы больше 23, то устанавливается час, равный часам минус 23, а номер дня увеличивается. Если часы отрицательны, то час и день изменяются по аналогичным правилам.

Этот метод позволяет одновременно изменить минуты, секунды и миллисекунды в объекте дата. Ср. методы setUTCMinutes, setUTCSeconds и setUTCMilliseconds. Пример:

var d = new Date("July 27, 1962 23:30:00");
d.setUTCHours(22);

Метод setUTCMilliseconds

Синтаксис: дата.setUTCMilliseconds(миллисекунды)
Аргументы: миллисекунды — числовое выражение
Результат: нет

Метод setUTCMilliseconds задает миллисекунды по времени UTC в объекте дата. Миллисекунды должны быть целым числом в диапазоне от 0 до 999. Если миллисекунды больше 999, то устанавливаются миллисекунды, равные миллисекундам минус 999, а номер секунды увеличивается. Если миллисекунды отрицательны, то миллисекунды и секунды изменяются по аналогичным правилам. Пример:

var d = new Date("July 27, 1962 23:30:00");
d.setUTCMilliseconds(999);

Метод setUTCMinutes

Синтаксис: дата.setUTCMinutes(минуты [,секунды [,миллисекунды]?]?)
Аргументы: минуты, секунды, миллисекунды — числовое выражение
Результат: нет

Метод setUTCMinutes задает минуты по времени UTC в объекте дата. Минуты должны быть целым числом в диапазоне от 0 до 59. Если минуты больше 59, то устанавливаются минуты, равные минутам минус 59, а номер часа увеличивается. Если минуты отрицательны, то минуты и часы изменяются по аналогичным правилам.

Этот метод позволяет одновременно изменить секунды и миллисекунды в объекте дата. Ср. методы setUTCSeconds и setUTCMilliseconds. Пример:

var d = new Date("July 27, 1962 23:30:00");
d.setUTCMinutes(31);

Метод setUTCMonth

Синтаксис: дата.setUTCMonth(месяц [,день]?)
Аргументы: месяц, день — числовые выражения
Результат: нет

Метод setUTCMonth задает номер месяца по времени UTC в объекте дата. Месяц должен быть целым числом в диапазоне от 0 до 11. Если месяц больше 11, то устанавливается месяц, равный месяцу минус 11, а номер года увеличивается. Если месяц отрицателен, то месяц и годы изменяются по аналогичным правилам.

Этот метод позволяет одновременно изменить номер дня в месяце (ср. метод setUTCDate). Пример:

var d = new Date("July 27, 1962 23:30:00");
d.setUTCMonth(11);

Метод setUTCSeconds

Синтаксис: дата.setUTCSeconds(секунды [,миллисекунды]?)
Аргументы: секунды, миллисекунды — числовые выражения
Результат: нет

Метод setUTCSeconds задает секунды по времени UTC в объекте дата. Cекунды должны быть целым числом в диапазоне от 0 до 59. Если секунды больше 59, то устанавливаются секунды, равные секундам минус 59, а номер минуты увеличивается. Если секунды отрицательны, то секунды и минуты изменяются по аналогичным правилам.

Этот метод позволяет одновременно изменить микросекунды (ср. метод setUTCMilliseconds). Пример:

var d = new Date("July 27, 1962 23:30:00");
d.setUTCSeconds(59);

Метод setYear

Синтаксис: дата.setYear(год)
Аргументы: год — числовое выражение
Результат: нет

Метод setYear устанавливает номер года по местному времени в объекте дата. Если год лежит в диапазоне от 0 до 99 включительно, то устанавливается номер года, равный 1900 + год, в остальных случаях устанавливается номер года, равный году. Этот метод является устаревшим и поддерживается только в целях совместимости; вместо него следует пользоваться методом setFullYear.

Например, сценарий

var d = new Date("May 1, 2000 20:00:00");
d.setYear(99);
document.write(d.toLocaleString());

выведет на экран обозревателя строку Saturday, May 01, 1999 20:00:00.

Метод toDateString

Синтаксис: дата.toDateString()
Результат: строковое выражение
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод toDateString преобразует примитивное значение объекта дата в строку даты по местному времени. Например, сценарий

var d = new Date();
document.write(d.toDateString());

выведет на экран обозревателя Internet Explorer строку вида Sun Oct 29 2000.

Метод toGMTString

Синтаксис: дата.toGMTString()
Результат: строковое выражение

Метод toGMTString преобразует примитивное значение объекта дата в строку даты и времени по Гринвичскому меридиану (GMT). Этот метод является устаревшим и поддерживается только в целях совместимости. Вместо него следует пользоваться методом toUTCString. Формат результирующей строки зависит от обозревателя, например, сценарий

var d = new Date();
document.write(d.toGMTString());

выведет на экран обозревателя Internet Explorer строку вида Tue, 26 Sep 2000 05:16:41 UTC, а на экран Netscape Navigator — строку вида Tue, 26 Sep 2000 05:16:41 GMT.

Метод toLocaleDateString

Синтаксис: дата.toLocaleDateString()
Результат: строковое выражение
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод toLocaleDateString преобразует примитивное значение объекта дата в строку даты по местному времени с учетом локальных установок операционной системы. Формат результирующей строки зависит от локализации операционной системы и обозревателя, например, сценарий

var d = new Date();
document.write(d.toLocaleDateString());

в русифицированной версии Windows выведет на экран обозревателя Internet Explorer строку вида 26 сентября 2000 г.

Метод toLocaleString

Синтаксис: дата.toLocaleString()
Результат: строковое выражение

Метод toLocaleString преобразует примитивное значение объекта дата в строку даты и времени по местному времени с учетом локальных установок операционной системы. Формат результирующей строки зависит от локализации операционной системы и обозревателя, например, сценарий

var d = new Date();
document.write(d.toLocaleString());

в русифицированной версии Windows может вывести на экран обозревателя Internet Explorer строку вида 26 сентября 2000 г. 11:24:24, а на экран Netscape Navigator — строку вида Tuesday, September 26, 2000 11:24:24.

Метод toLocaleTimeString

Синтаксис: дата.toLocaleTimeString()
Результат: строковое выражение
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод toLocaleTimeString преобразует примитивное значение объекта дата в строку времени по местному времени с учетом локальных установок операционной системы. Формат результирующей строки зависит от локализации операционной системы и обозревателя, например, сценарий

var d = new Date();
document.write(d.toLocaleTimeString());

в русифицированной версии Windows выведет на экран обозревателя Internet Explorer строку вида 11:24:24.

Метод toTimeString

Синтаксис: дата.toTimeString()
Результат: строковое выражение
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Не поддерживается.

Метод toTimeString преобразует примитивное значение объекта дата в строку времени по местному времени. Например, сценарий

var d = new Date();
document.write(d.toTimeString());

выведет на экран обозревателя Internet Explorer строку вида 13:05:09 UTC+0500.

Метод toString

Синтаксис: дата.toString()
Результат: строковое выражение

Метод toString преобразует примитивное значение объекта дата в строку даты и времени по местному времени. Формат результирующей строки зависит от обозревателя, например, сценарий

var d = new Date();
document.write(d.toString());

может вывести на экран обозревателя Internet Explorer строку вида Tue Sep 26 11:28:35 UTC-0700 2000 , а на экран Netscape Navigator — строку вида Tue Sep 26 11:28:35 GMT-0700 (Pacific Daylight Time) 2000.

Метод toUTCString

Синтаксис: дата.toUTCString()
Результат: строковое выражение

Метод toUTCString преобразует примитивное значение объекта дата в строку даты и времени по времени UTC. Формат результирующей строки зависит от обозревателя, например, сценарий

var d = new Date();
document.write(d.toUTCString());

выведет на экран обозревателя Internet Explorer строку вида Tue, 26 Sep 2000 05:16:41 UTC, а на экран Netscape Navigator — строку вида Tue, 26 Sep 2000 05:16:41 GMT.

Метод UTC

Синтаксис: Date.UTC(год, месяц, день [,часы [,минуты [,секунды [,мс]?]?]?]?)
Аргументы: год, месяц, день, часы, минуты, секунды, мс — числовые выражения
Результат: числовое значение

Метод UTC преобразует заданные дату и время в примитивное значение объекта Date по времени UTC и возвращает его. Аргументы имеют следующие значения:

  • год — выражение, задающее полный номер года (например, 1988, а не 88);
  • месяц — выражение, задающее номер месяца (0 = январь, 1 = февраль, …, 11 = декабрь);
  • день — выражение, задающее номер для в месяце от 1 до 31;
  • часы — необязательное выражение, задающее номер часа от 0 до 23;
  • минуты — необязательное выражение, задающее номер минуты от 0 до 59;
  • секунды — необязательное выражение, задающее номер секунды от 0 до 59;
  • мс — необязательное выражение, задающее номер миллисекунды от 0 до 999.

Это статический метод объекта Date, поэтому для доступа к нему используется форма Date.UTC, а не объект.UTC. Он полностью аналогичен конструктору Date с единственным отличием: полученное примитивное значение вычисляется по времени UTC, а не по местному времени.

Этот метод полезен для присваивания значения объектам Date. Например, следующий сценарий

var x = Date.UTC(2000, 1, 2, 12, 35, 40);
var d = new Date(x);
document.write(d.toUTCString());

выведет на экран обозревателя строку Wed, 2 Feb 2000 12:35:40 UTC.

Метод valueOf

Синтаксис: дата.valueOf()
Результат: числовое значение

Метод valueOf возвращает примитивное значение объекта дата. Иными словами, этот метод возвращает тот же результат, что и метод getTime.


WDH: JavaScript - Встроенные объекты Error, Math и RegExp

Глава 3.12. Встроенные объекты Error, Math и RegExp

В этой главе приведены описания встроенных объектов Error, Math и RegExp.

3.12.1. Исключения: объект Error

Объекты Error создаются при возникновении ошибок в процессе выполнения сценария и содержат информацию об ошибке, которая используется операторами обработки исключений. К сожалению, реализации этого класса объектов не вполне соответствуют стандарту, поэтому мы сначала описываем объект Error согласно ECMAScript, а затем его реализацию в JScript (JavaScript, реализованный в обозревателях Netscape, вообще не поддерживает объекты Error).

3.12.1.1. Объект Error в ECMAScript

Все исключения подразделяются на системные и пользовательские. Системные исключения генерируются исполняющей системой в процессе выполнения сценария, пользовательские — самим сценарием с помощью оператора throw. Стандарт ECMAScript предусматривает следующие виды системных исключений:

Таблица 3.9. Исключения ECMAScript
Название | Описание
EvalError | Недопустимое обращение к функции eval.
RangeError | Числовое значение вне допустимого диапазона.
ReferenceError | Недопустимое значение ссылки.
SyntaxError | Синтаксическая ошибка.
TypeError | Несовместимые типы операндов.
URIError | Недопустимое обращение к функции работы с URI.

Объекты Error соответственно также могут быть созданы исполняющей системой или сценарием. Конструктор пользовательского объекта Error имеет вид new Error(message), где message — текст сообщения об ошибке.

Свойства объекта Error
Свойство | Описание | Член прототипа
constructor | Конструктор, который создал объект. | Да
message | Текст сообщения об ошибке. | Да
name | Название исключения. | Да
prototype | Ссылка на прототип класса объектов. | Да
Методы объекта Error
Свойство | Описание | Член прототипа
toString | Возвращает строку "[object Error]". | Да

Свойство message

Синтаксис: объект.message
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства message является сообщение об ошибке данного объекта. Это свойство является свойством объекта по умолчанию.

Свойство name

Синтаксис: объект.name
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства name является название данного объекта. В пользовательских объектах оно содержит строку "Error", а в системных объектах — строку, содержащую тип исключения согласно Таблицы 3.9.

3.12.1.2. Объект Error в JScript

В JScript, реализованном в обозревателях Internet Explorer 5.x, объект Error имеет нестандартный конструктор new Error(number [, description]?). Здесь number — номер ошибки, description — текст сообщения о ней. При этом number является свойством по умолчанию и содержит в в старшем слове код источника ошибки (facility code), а в младшем слове — ее номер. Перечень всех системных ошибок JScript приведен в Приложении 14.

Для совместимости с ECMAScript объект Error в Internet Explorer 5.5 получил свойства message и name. При этом свойство message является синонимом свойства description, а name соответствует приведенному выше описанию.

Пример генерации исключения в JScript и вывода информации о нем:

function showErrorInfo(e) {
  document.write(e, ":<BR>");
  document.write("Источник ошибки: ", (e.number >> 16) & 0x1FFF, "<BR>");
  document.write("Номер ошибки: ", e.number & 0xFFFF, "<BR>");
  document.write("Описание ошибки: ", e.description);
}

var x;
try {
  x = y;                // Ошибка: переменная y не определена
}
catch (e) {             // Создает локальный объект e класса Error
  showErrorInfo(e);
}

Этот сценарий выведет на экран:

[object Error]:
Источник ошибки: 10
Номер ошибки: 5009
Описание ошибки: 'y' - определение отсутствует

3.12.2. Математические функции и константы: объект Math

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

Свойства объекта Math
Свойство | Описание
E | Основание натуральных логарифмов e.
LN10 | Число ln 10.
LN2 | Число ln 2.
LOG10E | Число lg e.
LOG2E | Число log2e.
PI | Число π.
SQRT1_2 | Квадратный корень из 1/2.
SQRT2 | Квадратный корень из 2.
Методы объекта Math
Метод | Описание
abs | Возвращает абсолютную величину аргумента.
acos | Возвращает арккосинус аргумента.
asin | Возвращает арксинус аргумента.
atan | Возвращает арктангенс аргумента.
atan2 | Возвращает арктангенс частного от деления аргументов.
ceil | Возвращает наименьшее целое число, большее или равное аргументу.
cos | Возвращает косинус аргумента.
exp | Возвращает экспоненту аргумента.
floor | Возвращает наибольшее целое число, меньшее или равное аргументу.
log | Возвращает натуральный логарифм аргумента.
max | Возвращает наибольший из аргументов.
min | Возвращает наименьший из аргументов.
pow | Возводит первый аргумент в степень, заданную вторым.
random | Генерирует случайное число в диапазоне от 0 до 1.
round | Округляет аргумент до ближайшего целого числа.
sin | Возвращает синус аргумента.
sqrt | Возвращает квадратный корень из аргумента.
tan | Возвращает тангенс аргумента.

Свойство E

Синтаксис: Math.E
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства E является основание натуральных логарифмов e, которое приблизительно равно 2.718281828459045. Пример: var x = Math.E.

Свойство LN10

Синтаксис: Math.LN10
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства LN10 является натуральный логарифм числа 10 (ln 10), который приблизительно равен 2.302585092994046. Пример: var x = Math.LN10.

Свойство LN2

Синтаксис: Math.LN2
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства LN2 является натуральный логарифм числа 2 (ln 2), который приблизительно равен 0.6931471805599453. Пример: var x = Math.LN2.

Свойство LOG10E

Синтаксис: Math.LOG10E
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства LOG10E является десятичный логарифм числа e (lg e), который приблизительно равен 0.4342944819032518. Пример: var x = Math.LOG10E.

Свойство LOG2E

Синтаксис: Math.LOG2E
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства LOG2E является двоичный логарифм числа e (log2e), который приблизительно равен 1.4426950408889634. Пример: var x = Math.LOG2E.

Свойство PI

Синтаксис: Math.PI
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства PI является число π (отношение длины окружности к диаметру круга), которое приблизительно равно 3.1415926535897932. Пример: var x = Math.PI.

Свойство SQRT1_2

Синтаксис: Math.SQRT1_2
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства SQRT1_2 является квадратный корень из 1/2, который приблизительно равен 0.7071067811865476. Пример: var x = Math.SQRT1_2.

Свойство SQRT2

Синтаксис: Math.SQRT2
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства SQRT2 является квадратный корень из 2, который приблизительно равен 1.4142135623730951. Пример: var x = Math.SQRT2.

Метод abs

Синтаксис: Math.abs(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод abs возвращает абсолютную величину числа. Примеры:

var x = Math.abs(2);	// x равно 2
var x = Math.abs(-2);	// x равно 2

Метод acos

Синтаксис: Math.acos(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод acos возвращает арккосинус числа. Если число находится в диапазоне от -1 до 1 включительно, то результат находится в диапазоне от 0 до π. В противном случае результат равен NaN. Примеры:

var x;
with (Math) {
  x = acos(-1);	// x равно 3.141592653589793
  x = acos(0);	// x равно 1.5707963267948965
  x = acos(1);	// x равно 0
  x = acos(2);	// x равно NaN
}

Метод asin

Синтаксис: Math.asin(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод asin возвращает арксинус числа. Если число находится в диапазоне от -1 до 1 включительно, то результат находится в диапазоне от -π/2 до +π/2. В противном случае результат равен NaN. Примеры:

var x;
with (Math) {
  x = asin(-1);	// x равно -1.5707963267948965
  x = asin(0);	// x равно 0
  x = asin(1);	// x равно 1.5707963267948965
  x = asin(2);	// x равно NaN
}

Метод atan

Синтаксис: Math.atan(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод atan возвращает арктангенс числа. Результат находится в диапазоне от -π/2 до +π/2. Примеры:

var x;
with (Math) {
  x = atan(-Infinity);	// x равно -1.5707963267948965
  x = atan(0);		// x равно 0
  x = atan(Infinity);	// x равно 1.5707963267948965
}

Метод atan2

Синтаксис: Math.atan2(число1, число2)
Аргументы: число1, число2 — числовые выражения
Результат: числовое значение

Метод atan2 возвращает арктангенс частного от деления числа1 на число2. Результат находится в диапазоне от -π до +π и соответствует величине угла в радианах между осью абсцисс и вектором до точки с координатами (число2, число1). Примеры:

var x;
with (Math) {
  x = atan2(-0, -1);	// x равно -3.141592653589793
  x = atan2(-1, 0);	// x равно -1.5707963267948965
  x = atan2(0, 1);	// x равно 0
  x = atan2(1, 1);	// x равно 0.7853981633974483
  x = atan2(1, 0);	// x равно 1.5707963267948965
  x = atan2(0, -1);	// x равно 3.141592653589793
}

Метод ceil

Синтаксис: Math.ceil(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод ceil возвращает наименьшее целое число, большее или равное числа. Примеры:

var x = Math.ceil(-2.95);	// x равно -2
var x = Math.ceil(2.95);	// x равно 3

Метод cos

Синтаксис: Math.cos(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод cos возвращает косинус числа. Результат находится в диапазоне от -1 до +1. Примеры:

var x;
with (Math) {
  x = cos(0);		// x равно 1
  x = cos(PI/2);	// x равно 6e-17 (почти 0)
  x = cos(PI);		// x равно -1
}

Метод exp

Синтаксис: Math.exp(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод exp возвращает экспоненту числа (eчисло, где е — основание натуральных логарифмов). Если число больше 709.78, то возвращается Inifinity. Пример:

var x = Math.exp(1);	// x равно 2.718281828459045

Метод floor

Синтаксис: Math.floor(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод floor возвращает наибольшее целое число, меньшее или равное числа. Примеры:

var x = Math.floor(-2.95);	// x равно -3
var x = Math.floor(2.95);	// x равно 2

Метод log

Синтаксис: Math.log(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод log возвращает натуральный логарифм числа. Если число отрицательно, то возвращается NaN. Примеры:

var x = Math.log(Math.E);	// x равно 1
var x = Math.log(0);		// x равно -Infinity
var x = Math.log(-1);		// x равно NaN

Метод max

Синтаксис: Math.max(число1, …, числоN)
Аргументы: число1, …, числоN — числовые выражения
Результат: числовое значение
Поддержка:   Internet Explorer  Соответствует стандарту.
             Netscape Navigator  Возвращает большее из значений первых двух аргументов, остальные
              аргументы игнорируются. Если аргументов меньше двух, возвращает NaN.

Метод max возвращает наибольшее из значений своих аргументов. Если аргументы не заданы, то он возвращает -Inifinity. Например, следующий сценарий

document.write(Math.max(1, 2, 3));

выведет на экран Internet Explorer число 3, а на экран Netscape Navigator число 2.

Метод min

Синтаксис: Math.min(число1, …, числоN)
Аргументы: число1, …, числоN — числовые выражения
Результат: числовое значение
Поддержка:   Internet Explorer  Соответствует стандарту.
             Netscape Navigator  Возвращает меньшее из значений первых двух аргументов, остальные
              аргументы игнорируются. Если аргументов меньше двух, возвращает NaN.

Метод min возвращает наименьшее из значений своих аргументов. Если аргументы не заданы, то он возвращает Inifinity. Например, следующий сценарий

document.write(Math.min(3, 2, 1));

выведет на экран Internet Explorer число 1, а на экран Netscape Navigator число 2.

Метод pow

Синтаксис: Math.pow(число1, число2)
Аргументы: число1, число2 — числовые выражения
Результат: числовое значение

Метод pow возвращает число1, возведенное в степень число2 (число1число2). Примеры:

var x;
with (Math) {
  x = pow(2, 3);	// x равно 8
  x = pow(100, 0);	// x равно 1
  x = pow(10, 0.5);	// x равно 3.162277660168379
}

Метод random

Синтаксис: Math.random()
Результат: числовое значение

Метод random генерирует случайное число в диапазоне от 0 включительно до 1 исключительно. Пример: var x = Math.random().

Метод round

Синтаксис: Math.round(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод round округляет число до ближайшего целого числа и возвращает его. Примеры:

var x;
with (Math) {
  x = round(2.49);	// x равно 2
  x = round(2.5);	// x равно 3
  x = round(-2.5);	// x равно -2
  x = round(-2.51);	// x равно -3
}

Метод sin

Синтаксис: Math.sin(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод sin возвращает синус числа. Результат находится в диапазоне от -1 до +1. Примеры:

var x;
with (Math) {
  x = sin(0);		// x равно 0
  x = sin(PI/2);	// x равно 1
  x = sin(PI);		// x равно 1e-16 (почти 0)
}

Метод sqrt

Синтаксис: Math.sqrt(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод sqrt возвращает квадратный корень из числа. Если число отрицательно, то возвращается NaN. Примеры:

var x = Math.sqrt(2);	// x равно 1.4142135623730951
var x = Math.sqrt(1);	// x равно 1
var x = Math.sqrt(-1);	// x равно NaN

Метод tan

Синтаксис: Math.tan(число)
Аргументы: число — числовое выражение
Результат: числовое значение

Метод tan возвращает тангенс числа. Примеры:

var x;
with (Math) {
  x = tan(0);		// x равно 0
  x = tan(PI/2);	// x равно 16331778728383844
  x = tan(PI);		// x равно -1e-16 (почти 0)
}

3.12.3. Регулярные выражения: объект RegExp

Объект RegExp используется для создания регулярных выражений, подробно описанных в гл. 3.5. Там же описаны способы создания этих объектов.

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

Свойства объекта RegExp
Свойство | Описание | Член прототипа
$1, …, $9 | Хранят запомненные подстроки. | Нет
$01, …, $99 | Хранят запомненные подстроки. | Нет
$& | См. lastMatch. | Да
&` | См. leftContext. | Да
&' | См. rightContext. | Да
&+ | См. lastParen. | Да
&* | См. multiline. | Да
constructor | Конструктор, который создал объект. | Да
global | Значение опции глобального поиска. | Нет
ignoreCase | Значение опции не различать строчные и прописные буквы. | Нет
input | Последняя исходная строка. | Да
lastIndex | Номер позиции в строке для следующего сопоставления с образцом. | Нет
lastMatch | Последняя найденная подстрока. | Да
lastParen | Последняя запомненная подстрока. | Да
leftContext | Подстрока, предшествующая последней найденной подстроке. | Да
multiline | Значение опции многострочного поиска. | Нет
prototype | Ссылка на прототип класса объектов. | Нет
rightContext | Подстрока, следующая за последней найденной подстрокой. | Да
source | Текст регулярного выражения. | Нет
Методы объекта RegExp
Метод | Описание | Член прототипа
compile | Компилирует регулярное выражение. | Да
exec | Выполняет сопоставление строки с образцом и заносит результаты в массив. | Да
test | Проверяет успешность сопоставления строки с образцом. | Да
toString | Преобразует регулярное выражение в строку. | Да
valueOf | Возвращает примитивное значение объекта. | Нет

Свойства $1, …, $9

Синтаксис: RegExp.$n
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Если часть регулярного выражения заключена в круглые скобки, то соответствующая ей подстрока запоминается для последующего использования. Значениями свойств $1, …, $9 являются подстроки исходной строки, которые были запомнены в процессе последнего сопоставления с образцом. Регулярное выражение может содержать любое количество выражений в круглых скобках, но в объекте RegExp запоминаются только последние девять найденных соответствий. Пример: следующий сценарий

var re = new RegExp("(\\d*)\\s*(\\d*)","ig");
var arr = re.exec("111 2222 33333");
var s = "$1 = '" + RegExp.$1 + "' ";
s += "$2 = '" + RegExp.$2 + "' ";
s += "$3 = '" + RegExp.$3 + "'";
document.write(s);

выведет на экран обозревателя текст $1 = '111' $2 = '2222' $3 = ''.

Эти свойства объекта RegExp являются статическими и изменяются при каждой операции сопоставления с регулярным выражением. В методе String.replace они употребляются без имени объекта RegExp. См. пример в п. 3.5.4.

Свойства $01, …, $99

Синтаксис: RegExp.$nn
Атрибуты:  { DontEnum, DontDelete, ReadOnly }
Поддержка:   Internet Explorer  Поддерживаются с версии 5.5.
             Netscape Navigator  Не поддерживаются.

Если часть регулярного выражения заключена в круглые скобки, то соответствующая ей подстрока запоминается для последующего использования. Значениями свойств $01, …, $99 являются подстроки исходной строки, которые были запомнены в процессе последнего сопоставления с образцом. Регулярное выражение может содержать любое количество выражений в круглых скобках, но в этих свойствах запоминаются только последние 99 найденных соответствий. Пример: следующий сценарий

var re = new RegExp("(\\d*)\\s*(\\d*)","ig");
var arr = re.exec("111 2222 33333");
var s = "$01 = '" + RegExp.$01 + "' ";
s += "$02 = '" + RegExp.$02 + "' ";
s += "$03 = '" + RegExp.$03 + "'";
document.write(s);

выведет на экран обозревателя текст $01 = '111' $02 = '2222' $03 = ''.

Эти свойства объекта RegExp являются статическими и изменяются при каждой операции сопоставления с регулярным выражением. В методе String.replace они употребляются без имени объекта RegExp. См. пример в п. 3.5.4.

Свойство global

Синтаксис: регвыр.global
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства global является значение опции "g" (глобальный поиск), заданное при создании объекта регвыр. Например, следующий сценарий

var re = new RegExp("a+b+c","ig");
document.write(re.global);

выведет на экран обозревателя текст true.

Свойство ignoreCase

Синтаксис: регвыр.ignoreCase
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства ignoreCase является значение опции "i" (не различать строчные и прописные буквы), заданное при создании объекта регвыр. Например, следующий сценарий

var re = new RegExp("a+b+c","ig");
document.write(re.ignoreCase);

выведет на экран обозревателя текст true.

Свойство input

Синтаксис: RegExp.input
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

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

var re = new RegExp("\\d+", "g");
var arr = re.exec("111 2222 33333");
document.write(RegExp.input);

выведет на экран обозревателя текст 111 2222 33333.

Свойство lastIndex

Синтаксис: регвыр.lastIndex
Атрибуты:  { DontEnum, DontDelete }

Значением свойства lastIndex является целое число, содержащее номер элемента строки, с которого начнется следующее сопоставление с образцом. При создании объекта регвыр этому свойству присваивается значение 0. Оно используется только в тех случаях, когда включена опция глобального поиска (т. е. свойство global имеет значение true). Пример:

var re = /(aha)/g;
var a = re.exec("aha");	// a равно ["aha", "aha"], re.lastIndex равно 3
var a = re.exec("aha");	// a равно [""], re.lastIndex по-прежнему равно 3
re.lastIndex = 0;	// повторить поиск
var a = re.exec("aha");	// a равно ["aha", "aha"], re.lastIndex равно 3

Свойство lastMatch ($&)

Синтаксис: RegExp.lastMatch
Атрибуты:  { DontEnum, DontDelete, ReadOnly }
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Поддерживается с версии 4.0.

Значением свойства lastMatch является последняя найденная подстрока исходной строки. Это свойство объекта RegExp является статическим и изменяется при каждой операции сопоставления с регулярным выражением. Пример: следующий сценарий

var re = new RegExp("\\d+", "g");
var arr = re.exec("111 2222 33333");
document.write(RegExp.lastMatch);

выведет на экран обозревателя текст 111.

Свойство lastParen (&+)

Синтаксис: RegExp.lastParen
Атрибуты:  { DontEnum, DontDelete, ReadOnly }
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Поддерживается с версии 4.0.

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

var re = new RegExp("(\\d+) (\\d+)", "g");
var arr = re.exec("111 2222 33333");
document.write(RegExp.lastParen);

выведет на экран обозревателя текст 2222.

Свойство leftContext (&`)

Синтаксис: RegExp.leftContext
Атрибуты:  { DontEnum, DontDelete, ReadOnly }
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Поддерживается с версии 4.0.

Значением свойства leftContext является подстрока исходной строки, предшествующая последней найденной подстроке. Это свойство объекта RegExp является статическим и изменяется при каждой операции сопоставления с регулярным выражением. Пример: следующий сценарий

var arr = / (\d+)/.exec("111 2222 33333");
document.write(RegExp.leftContext + "|" + RegExp.lastMatch + "|" + RegExp.rightContext);

выведет на экран обозревателя текст 111| 2222| 33333.

Свойство multiline ($*)

Синтаксис: регвыр.multiline
Атрибуты:  { DontEnum, DontDelete, ReadOnly }
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Поддерживается с версии 4.0.

Значением свойства multiline является значение опции "m" (многострочный поиск), заданное при создании объекта регвыр. Например, следующий сценарий

var re = new RegExp("a+b+c","im");
document.write(re.ignoreCase);

выведет на экран обозревателя текст true.

В обозревателях Netscape опция "m" не поддерживается, а свойство multiline является статическим свойством объекта RegExp. Мы можем присваивать ему логическое значение, которое включает или выключает многострочный поиск для всех регулярных выражений, например RegExp.multiline = true. Помните, что обработчики событий после своего завершения всегда сбрасывают значение этого свойства в false. Кроме того, Netscape поддерживает $* как синоним данного свойства.

Свойство rightContext (&')

Синтаксис: RegExp.rightContext
Атрибуты:  { DontEnum, DontDelete, ReadOnly }
Поддержка:   Internet Explorer  Поддерживается с версии 5.5.
             Netscape Navigator  Поддерживается с версии 4.0.

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

var arr = / (\d+)/.exec("111 2222 33333");
document.write(RegExp.leftContext + "|" + RegExp.lastMatch + "|" + RegExp.rightContext);

выведет на экран обозревателя текст 111| 2222| 33333.

Свойство source

Синтаксис: регвыр.source
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства source является строка, содержащая регулярное выражение, заданное при создании объекта регвыр. Например, следующий сценарий

var re = new RegExp("a+b+c","ig");
document.write(re.source);

выведет на экран обозревателя текст a+b+c.

Метод compile

Синтаксис: регвыр.compile(образец, опции?)
Аргументы: образец — регулярное выражение
           опции — необязательные опции поиска

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

var r = new RegExp("[A-Z]", "g");
r.compile("[a-z]", "g");

Метод exec

Синтаксис: регвыр.exec(строка)
Аргументы: строка — любое строковое выражение
Результат: массив результатов или null

Метод exec выполняет сопоставление строки с образцом, заданным регвыр. Если сопоставление с образцом закончилось неудачей, то возвращается значение null. В противном случае результатом является массив подстрок, соответствующих заданному образцу. В процессе сопоставления производится обновление всех свойств объекта регвыр (и тем самым всех свойств объекта RegExp).

Результирующий массив имеет следующие свойства:

  • свойство input содержит исходную строку;
  • свойство index содержит позицию найденной подстроки в исходной строке;
  • свойство length равно n + 1, где n — количество подвыражений регулярного выражения, заключенных в круглые скобки;
  • элемент 0 содержит найденную подстроку;
  • элементы 1, …, n содержат подстроки, соответствующие подвыражениям регулярного выражения в круглых скобках.

Пример: следующий сценарий

var arr = /(\d+)\.(\d+)\.(\d+)/.exec("Я родился 21.05.1958");
document.write("Дата рождения: ", arr[0], "<br>");
document.write("День рождения: ", arr[1], "<br>");
document.write("Месяц рождения: ", arr[2], "<br>");
document.write("Год рождения: ", arr[3], "<br>");

выведет на экран обозревателя текст:

Дата рождения: 21.05.1958
День рождения: 21
Месяц рождения: 05
Год рождения: 1958

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

var re = /\d+/g;
var s = "123 abc 456 def 789 xyz";
var result;
while (result = re.exec(s))
  document.write(result[0] + " ");

выведет на экран обозревателя строку 123 456 789.

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

Метод test

Синтаксис: регвыр.test(строка)
Аргументы: строка — любое строковое выражение
Результат: логическое значение

Метод test выполняет сопоставление строки с образцом, заданным регвыр и возвращает true, нсли сопоставление с образцом прошло успешно, и false в противном случае. Этот метод эквивалентен выражению регвыр.exec(строка) != null.

Пример:

if (!/(\d+)\.(\d+)\.(\d+)/.test(str))
  document.write("Неверное значение строки!");

Метод toString

Синтаксис: регвыр.toString()
Результат: строковое значение

Метод toString преобразует регвыр в строковое значение. Например, сценарий

var x = new RegExp("a+b+c", "g");
document.write(x.toString());

выведет на экран обозревателя строку /a+b+c/g.


WDH: JSP - Введение в JSP

Документ в процессе разработки!

Глава 7.5. Введение в JSP

7.5.1. Что такое Java Server Pages?


WDH: JavaScript - Дополнительные возможности JScript

Глава 3.13. Дополнительные возможности JScript

В этой главе приведены описания нестандартных возможностей языка Microsoft JScript, реализованных в обозревателе Internet Explorer, а именно:

  • объекта ActiveXObject и функции GetObject;
  • объекта Enumerator;
  • функций, возвращающих информацию о исполняющей системе;
  • директив условной компиляции.

Мы не приводим описания объекта VBArray, используемого для доступа к массивам Visual Basic, т. к. наш справочник не содержит раздела, посвященного языку VBScript.

3.13.1. Управляющие элементы ActiveX

3.13.1.1. Общее описание

Основные дополнения к языку JavaScript, сделанные корпорацией Microsoft, связаны с использованием управляющих элементов ActiveX. Эти элементы представляют собой динамические библиотеки, созданные в соответствии со стандартом COM. COM (Component Object Model) — это стандарт создания программных компонентов, рассмотрение которого выходит за рамки нашего справочника. Для наших целей вполне достаточно воспринимать элементы ActiveX как черный ящик, выполняющий определенные действия по запросу вызвавшей его программы.

Появление элементов ActiveX было порождено стремлением Microsoft создать технологию, которая могла бы успешно конкурировать с подключаемыми модулями обозревателей Netscape. Следует признать, что задача была решена исключительно удачно, т. к. в результате появился стандарт разработки платформо-зависимых программных компонентов, реализующих платформо-независимые протоколы и архитектуры.

Все элементы ActiveX при установке в системе Windows регистрируются в ее регистре. При этом в качестве уникального ключа используется GUID данного элемента, т. е. его уникальный 64-разрядный шестнадцатеричный номер. Для доступа к элементу ActiveX по его GUID в HTML-документе используется элемент OBJECT, например:

<OBJECT style="left: 0px; top: 0px"
  classid="clsid:8E27C92B-1264-101C-8A2F-040224009C02">
    <PARAM NAME="_Version" VALUE="524288">
    <PARAM NAME="_ExtentX" VALUE="7620">
    <PARAM NAME="_ExtentY" VALUE="5080">
    <PARAM NAME="_StockProps" VALUE="1">
    <PARAM NAME="BackColor" VALUE="-2147483633">
    <PARAM NAME="Year" VALUE="2000">
    <PARAM NAME="Month" VALUE="10">
    <PARAM NAME="Day" VALUE="22">
    <PARAM NAME="DayLength" VALUE="1">
    <PARAM NAME="MonthLength" VALUE="2">
    <PARAM NAME="DayFontColor" VALUE="0">
    <PARAM NAME="FirstDay" VALUE="2">
    <PARAM NAME="GridCellEffect" VALUE="1">
    <PARAM NAME="GridFontColor" VALUE="10485760">
    <PARAM NAME="GridLinesColor" VALUE="-2147483632">
    <PARAM NAME="ShowDateSelectors" VALUE="-1">
    <PARAM NAME="ShowDays" VALUE="-1">
    <PARAM NAME="ShowHorizontalGrid" VALUE="-1">
    <PARAM NAME="ShowTitle" VALUE="-1">
    <PARAM NAME="ShowVerticalGrid" VALUE="-1">
    <PARAM NAME="TitleFontColor" VALUE="10485760">
    <PARAM NAME="ValueIsNull" VALUE="0">
</OBJECT>

Этот фрагмент HTML-документа содержит управляющий элемент ActiveX "Календарь" и будет отображаться обозревателем примерно так:

Отображение элемента Календарь

Исполняющая система JScript дает нам более гибкие возможности запуска элементов ActiveX, которые описаны ниже.

3.13.1.2. Объект ActiveXObject

Объект ActiveXObject используется для запуска объектов ActiveX. Он создается конструктором

new ActiveXObject("сервер.класс" [,"адрес"?])

Здесь сервер — имя COM-сервера, класс — имя класса создаваемого объекта, адрес — необязательное имя сетевого сервера, на котором должен быть создан заданный объект (может быть доменным именем или IP-адресом). Создание объекта на удаленном сервере действующими версиями JScirpt пока не поддерживается, т. е. аргумент адрес при вызове данного конструктора игнорируется.

После создания объекта ActiveX (т. е. после запуска соответствующей программы) мы можем обращаться к его методам и свойствам, используя стандартный синтаксис языка JavaScript. Встроенных свойств и методов этот объект не имеет.

Пример: если на компьютере-клиенте установлен Microsoft Word 7.0, то следующий сценарий его запустит, откроет документ Mydoc.doc, сохранит этот документ в текстовом формате и завершит работу MS Word.

var word = new ActiveXObject("Word.Application"); // запускает MS Word
word.Documents.Open("Mydoc.doc");		  // открывает документ
word.ActiveDocument.SaveAs("Mydoc.txt", 4);	  // 4 = текстовый формат DOS
word.Quit();					  // завершает работу MS Word

Примечания.

  1. Следует помнить, что после запуска объекта ActiveX он остается активным до закрытия окна обозревателя, из которого он был вызван. JScript не содержит стандартного средства для завершения работы этого объекта. Если мы хотим, чтобы объект прекратил работу ранее завершения работы нашего сценария, то должны вызвать соответствующий метод данного объекта (в приведенном примере это метод Quit).
  2. Любопытно, что операция typeof возвращает для свойств и методов объектов ActiveX нестандартное значение "unknown" (видимо из-за того, что все объекты ActiveX являются наследниками COM-интерфейса IUnknown).

WDH+ Примеры использования элементов ActiveX см. в WDH+: TreeView на Веб-странице.

3.13.1.3. Функция GetObject

Функция GetObject возвращает ссылку на COM-объект, содержащийся в заданном файле. Она имеет вид

GetObject(["имя_файла"][,"сервер.класс"?])

Здесь имя_файла — спецификация файла, сервер — имя COM-сервера, класс — имя класса объектов. Если имя_файла опущено, то задание второго аргумента обязательно, в противном случае оно может быть опущено.

При вызове этой функции запускается приложение, ассоциированное с заданной спецификацией файла (перечень таких ассоциаций хранится в системном регистре Windows). Если имя_файла — это пустая строка "", то создается новый экземпляр объекта заданного типа. Если имя_файла опущено, то возвращается ссылка на объект данного типа, который активен в данный момент. Если такого объекта нет, то генерируется ошибка.

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

Так, например, программа автоматизации проектирования может хранить в файле чертежей несколько слоев. Для активации второго слоя в файле чертежа с именем MyCad.cad мы можем использовать строку

var layerObj = GetObject("MyCad.cad!Layer2");

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

var myObj = GetObject("SAMPLE.DRW", "FIGMENT.DRAWING");

В этом примере FIGMENT — имя программы, а DRAWING — один из классов объектов, которые она поддерживает.

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

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

Если объект зарегистрирован как существующий в единственном экземпляре (например Word.Basic в Microsoft Word 7.0), то GetObject всегда возвращает ссылку на этот единственный экземпляр объекта, будучи вызвана с пустой строкой в качестве имени файла, и генерирует ошибку, если имя_файла опущено.

Примечание. Приведенное описание функции GetObject и примеры ее использования позаимствованы из документации Microsoft. Дело в том, что автор не смог найти ни одного разумного применения этой функции в клиентской среде. Более того, по сообщению разработчиков, в обозревателях Interent Explorer ее применение запрещено "в целях безопасности" (см. Q239470 Внешняя ссылка).

3.13.2. Коллекции: объект Enumerator

Объект Enumerator используется для просмотра элементов коллекций. Коллекции — это списки объектов, реализованные в исполняющей системе JScript, но непосредственно не доступные пользователю. В частности, мы не можем добраться до их элементов ни с помощью индексов, ни с помощью оператора for…in. Вместо этого мы должны создать для коллекции объект Enumerator, а затем последовательно перемещать его указатель от текущего элемента коллекции к следующему. Объект создается конструктором

new Enumerator(коллекция)

где коллекция — любой объект, являющийся коллекцией. При создании объекта его указатель устанавливается на первый элемент коллекции.

Следующий сценарий позаимствован из документации к JScript и демонстрирует использование данного объекта:

function showDrives()
{
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var e = new Enumerator(fso.Drives);
  var s = "";
  var name;
  for (e.moveFirst(); !e.atEnd(); e.moveNext()) {	// просмотр всех дисков компьютера
    var x = e.item();
    if (x.DriveType == 3)	// сетевой диск?
      name = x.ShareName;
    else if (x.IsReady)
      name = x.VolumeName;
    else
      name = "[Диск не готов]";
    s +=  x.DriveLetter + ": " + name + "<br>";
  }
  return(s);
}

document.write(showDrives());

Объект Enumerator не имеет свойств; его методы описаны ниже.

Методы объекта Enumerator
Метод | Описание
atEnd | Проверяет, достигнут ли конец коллекции.
item | Возвращает текущий элемент коллекции.
moveFirst | Делает текущим первый элемент коллекции.
moveNext | Делает текущим следующий элемент коллекции.

Метод atEnd

Синтаксис: объект.atEnd()
Результат: логическое значение

Метод atEnd возвращает true, если текущий элемент коллекции является последним в ней, и false в противном случае. См. приведенный выше пример.

Метод item

Синтаксис: объект.item()
Результат: объект

Метод item возвращает текущий элемент коллекции. Если коллекция пуста или текущий элемент не определен, то возвращается значение undefined. См. приведенный выше пример.

Метод moveFirst

Синтаксис: объект.moveFirst()

Метод moveFirst перемещает указатель на первый элемент коллекции. См. приведенный выше пример.

Метод moveNext

Синтаксис: объект.moveNext()

Метод moveNext перемещает указатель на следующий элемент коллекции. См. приведенный выше пример.

3.13.3. Информация о исполняющей системе

Описанные ниже функции возвращают различную информацию о исполняющей системе сценариев. Их применение можно проиллюстрировать следующим примером:

function GetScriptEngineInfo() {
  var s = "";
  s += ScriptEngine() + " ";
  s += ScriptEngineMajorVersion() + ".";
  s += ScriptEngineMinorVersion() + ".";
  s += ScriptEngineBuildVersion();
  return s;
}

document.write(GetScriptEngineInfo());

В результате выполнения этого сценария на экран обозревателя будет выведен примерно такой текст: JScript 5.5.5207.

3.13.3.1. Функция ScriptEngine

Синтаксис: ScriptEngine()
Результат: строковое значение

Функция ScriptEngine возвращает одну из следующих строк, указывающую на текущий сценарный язык:

"JScript" | Microsoft JScript
"VBA" | Microsoft Visual Basic for Applications
"VBScript" | Microsoft Visual Basic Scripting Edition

3.13.3.2. Функция ScriptEngineBuildVersion

Синтаксис: ScriptEngineBuildVersion()
Результат: строковое значение

Функция ScriptEngineBuildVersion возвращает строку, содержащую номер сборки (build version) исполняющей системы сценариев.

3.13.3.3. Функция ScriptEngineMajorVersion

Синтаксис: ScriptEngineMajorVersion()
Результат: строковое значение

Функция ScriptEngineMajorVersion возвращает строку, содержащую номер версии исполняющей системы сценариев.

3.13.3.4. Функция ScriptEngineMinorVersion

Синтаксис: ScriptEngineMinorVersion()
Результат: строковое значение

Функция ScriptEngineMinorVersion возвращает строку, содержащую номер подверсии исполняющей системы сценариев.

3.13.4. Условная компиляция

3.13.4.1. Понятие условной компиляции

Начиная с Internet Explorer 4.0, язык JScript поддерживает условную компиляцию сценариев. Она была введена в JScript для того, чтобы одновременно обеспечить и использование новых возможностей языка, и совместимость со старыми версиями обозревателей. Типичными примерами использования условной компиляции являются добавление в сценарий отладочного кода и трассировка исполнения сценария.

Условная компиляция включается директивой @cc_on или директивами @if или @set.

Директивы условной компиляции всегда следует помещать внутрь комментариев с тем, чтобы обозреватели, которые не поддерживают условную компиляцию (например, Netscape Navigator), их игнорировали. Приведем пример:

/*@cc_on @*/
/*@if (@_jscript_version >= 4)
   alert("JScript версии 4 или выше");
   @else @*/
   alert("Ваш JScript устарел.");
/*@end @*/

В этом примере использованы комментарии специального вида, которые используются только после директивы @cc_on. Обозреватели, которые не поддерживают условную компиляцию, увидят здесь только строку alert("Ваш JScript устарел.") и исполнят ее.

3.13.4.2. Переменные условной компиляции

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

Переменные условной компиляции
Переменная | Описание
@_win32 | true при выполнении в системе Win32.
@_win16 | true при выполнении в системе Win16.
@_mac | true при выполнении в системе Apple Macintosh.
@_alpha | true при выполнении на процессоре DEC Alpha.
@_x86 | true при выполнении на процессоре Intel.
@_mc680x0 | true при выполнении на процессоре Motorola 680x0.
@_PowerPC | true при выполнении на процессоре Motorola PowerPC.
@_jscript | Всегда true.
@_jscript_build | Номер сборки JScript.
@_jscript_version | Номер версии JScript в формате m.n.

3.13.4.3. Директива @cc_on

Синтаксис: @cc_on

Директива @cc_on включает условную компиляцию. Пример ее использования приведен выше.

Альтернативный способом включения условной компиляции является использование директив @if или @set, не заключенных в комментарий.

3.13.4.4. Директива @if

Синтаксис:
@if (условие1)
  текст1
@elif (условие2)
  текст2
@else
  текст3
@end
Аргументы: условие1, условие2 — логические выражения
           текст1, текст2, текст3 — любой текст JScript

Директива @if выполняет заданный фрагмент кода в зависимости от значения выражения. Если условие1 истинно, то выполняется текст1. Если условие1 ложно, присутствует необязательная директива @elif и условие2 истинно, то выполняется текст2. В противном случае, если присутствует необязательная директива @else, то выполняется текст3; если ее нет, то управление передается следующему оператору. Данная директива может содержать несколько ветвей @elif, но все они должны предшествовать ветви @else. Пример ее использования:

@if (@_win32)
  alert("Работаем в Windows NT/95/98")
@else
  alert("Неизвестная операционная система!");

3.13.4.5. Директива @set

Синтаксис: @set @перем = значение
Аргументы: перем — переменная условной компиляции
           значение — числовое или логическое выражение

Директива @set создает переменные условной компиляции. Имена таких переменных имеют синтаксис переменных JavaScript, но должны начинаться с символа "@". Значение, которое присваивается переменной, может быть любым выражением JavaScript (возможно с использованием ранее определенных переменных условной компиляции), которое возвращает числовое или логическое значение. Примеры:

@set @var1 = 1
@set @var2 = (@var1 + 1) * 10;
@set @var3 = @_jscript_version

Если переменная используется до ее определения, то она имеет значение NaN. Поскольку это единственное значение. которое не равно самому себе, то проверку определенности значения переменной следует делать так:

@if (@myVar != @myVar) …


WDH: JavaScript - Исполняющая система JScript

Глава 3.14. Исполняющая система JScript

В этой и следующей главах приведено описание исполняющей системы Microsoft JScript, которая существенно расширяет возможности обозревателей Internet Explorer. Все описанные ниже объекты реализованы как управляющие элементы ActiveX, интегрированные в библиотеку типов исполняющей системы JScript.

3.14.1. Словари: объект Dictionary

Объект Dictionary предназначен для создания словарей. Словарь в JScript аналогичен ассоциативному массиву языка PERL и представляет собой набор пар (ключ, значение). Значения могут быть данными любого типа. При этом каждое значение ассоциируется с уникальным ключом, который используется для его поиска и выборки из словаря. Обычно в качестве ключа используются числа или текстовые строки, хотя ключ может быть чем угодно, кроме массива. Конструктор объекта Dictionary имеет вид:

new ActiveXObject("Scripting.Dictionary")

Следующий пример демонстрирует использование словаря:

var d = new ActiveXObject("Scripting.Dictionary");	// Создаем словарь d
d.Add("а", "Архангельск");				// Добавляем несколько пар
d.Add("б", "Баку");
d.Add("в", "Воронеж");
var a = (new VBArray(d.Keys())).toArray();		// Извлекаем массив ключей
var s = "";
for (var i = 0; i < d.Count; i++)			// Просматриваем словарь
  s += a[i] + " - " + d(a[i]) + "<br>";
document.write(s);					// Выводим на экран результат

Последний оператор этого примера выведет на экран обозревателя текст:

а - Архангельск
б - Баку
в - Воронеж

Свойства объекта Dictionary
Свойство | Описание
CompareMode | Способ сравнения ключей.
Count | Количество элементов в словаре.
Item | Значение, соответствующее ключу.
Key | Изменяет значение ключа.
Методы объекта Dictionary
Метод | Описание
Add | Добавляет в словарь пару (ключ, значение).
Exists | Проверяет наличие заданного ключа в словаре.
Items | Возвращает массив значений словаря.
Keys | Возвращает массив ключей словаря.
Remove | Удаляет из словаря пару (ключ, значение).
RemoveAll | Очищает словарь.

Свойство CompareMode

Синтаксис: объект.CompareMode
Атрибуты:  { DontEnum, DontDelete }

Свойство CompareMode позволяет задать способ сравнения текстовых ключей в словаре объект. Оно может принимать следующие значения:

0 | Двоичное сравнение. Задает сравнение строк на основе порядка сортировки, определяемого внутренним двоичным представлением символов. В Windows порядок сортировки определяется кодовой страницей символов, например: A < B < E < Z < a < b < e < z < Б < Л < Ш < б < л < ш.
1 | Текстовое сравнение. Задает сравнение строк без учета регистра символов на основе национальной настройки операционной системы. Тем же символам, что и выше, в этом случае соответствует следующий порядок: (A=a) < (B=b) < (E=e) < (Z=z) < (Б=б) < (Л=л) < (Ш=ш).
2 | Сравнение на основе национальной настройки базы данных. В обозревателях не используется.

Значения, большие двух, могут использоваться для сравнения ключей в определенной кодировке символов и в этом случае они должны быть равны идентификатору кодировки (LCID).

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

var d = new ActiveXObject("Scripting.Dictionary");
d.CompareMode = 0;	// различать строчные и прописные буквы в ключах
d.Add ("а", "ааа");
d.Add ("А", "ААА");
document.write(d.Item("а"));

Свойство Count

Синтаксис: объект.Count
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Значением свойства Count является размер объекта, т. е. количество содержащихся в нем пар (ключ, значение). Пример использования этого свойства приведен выше.

Свойство Item

Синтаксис: объект.Item(ключ)
Атрибуты:  { DontEnum, DontDelete }

Значением свойства Item является значение словаря объект, соответствующее ключу. Точнее говоря, при чтении этого свойства:

  • Если заданный ключ в словаре отсутствует, то создается новая пара с данным ключом и неопределенным значением и возвращается значение undefined.
  • Если заданный ключ в словаре есть, то возвращается ассоциированное с ним значение.

При задании нового значения этого свойства:

  • Если заданный ключ в словаре отсутствует, то создается новая пара с данным ключом и заданным значением.
  • Если заданный ключ в словаре есть, то ассоциированное с ним значение заменяется на заданное.

Например, следующий сценарий

var d = new ActiveXObject("Scripting.Dictionary");
d.Add("а", "Архангельск");
d.Add("б", "Баку");
d.Add("в", "Воронеж");
d.Item("г") = "Гомель";
document.write(d.Item("г"));

выведет на экран обозревателя текст Гомель.

Свойство Key

Синтаксис: объект.Key(ключ) = новый_ключ
Атрибуты:  { DontEnum, DontDelete }

Свойство Key используется для изменения ключа в словаре объект. При этом

  • Если заданный ключ в словаре отсутствует, то создается новая пара с ключом новый_ключ и неопределенным значением.
  • Если заданный ключ в словаре есть, то он заменяется на новый_ключ.

Чтение этого свойства невозможно. Например, следующий сценарий

var d = new ActiveXObject("Scripting.Dictionary");
d.Add("а", "Архангельск");
d.Add("б", "Баку");
d.Add("в", "Воронеж");
d.Key("а") = "ар";
document.write(d.Item("ар"));

выведет на экран обозревателя текст Архангельск.

Метод Add

Синтаксис: объект.Add(ключ, значение)
Аргументы: ключ — ключ создаваемой пары
           значение — соответствующее значение

Метод Add добавляет в словарь объект новую пару (ключ, значение). Если данный ключ уже имеется в словаре, то возникает ошибка. Примеры использования этого метода приведены выше.

Метод Exists

Синтаксис: объект.Exists(ключ)
Аргументы: ключ — выражение, задающее искомый ключ
Результат: логическое значение

Метод Exists возвращает true, если ключ имеется в словаре объект и false в противном случае. Пример:

var d = new ActiveXObject("Scripting.Dictionary");
d.Add("а", "Архангельск");
var x = d.Exists("а");	// x равно true

Метод Items

Синтаксис: объект.Items()
Результат: массив VBScript

Метод Items возвращает массив значений словаря объект. Возвращаемый массив имеет формат VBScript, поэтому для его использования в JScript следует пользоваться приемом, указанным в следующем примере:

var d = new ActiveXObject("Scripting.Dictionary");	// Создаем словарь d
d.Add("а", "Архангельск");				// Добавляем несколько пар
d.Add("б", "Баку");
d.Add("в", "Воронеж");
var a = (new VBArray(d.Items())).toArray();		// Извлекаем массив значений
var s = "";
for (var i in a)					// Просматриваем словарь
  s += a[i] + " ";
document.write(s);					// Выводим на экран результат

Последний оператор этого примера выведет на экран обозревателя текст Архангельск Баку Воронеж.

Метод Keys

Синтаксис: объект.Keys()
Результат: массив VBScript

Метод Keys возвращает массив ключей словаря объект. Возвращаемый массив имеет формат VBScript, поэтому для его использования в JScript следует пользоваться приемом, указанным в следующем примере:

var d = new ActiveXObject("Scripting.Dictionary");	// Создаем словарь d
d.Add("а", "Архангельск");				// Добавляем несколько пар
d.Add("б", "Баку");
d.Add("в", "Воронеж");
var a = (new VBArray(d.Keys())).toArray();		// Извлекаем массив ключей
var s = "";
for (var i in a)					// Просматриваем словарь
  s += a[i] + " ";
document.write(s);					// Выводим на экран результат

Последний оператор этого примера выведет на экран обозревателя текст а б в.

Метод Remove

Синтаксис: объект.Remove(ключ)
Аргументы: ключ — искомый ключ

Метод Remove удаляет из словаря объект пару с заданным (ключом. Если данного ключа нет в словаре, то возникает ошибка. Пример:

var d = new ActiveXObject("Scripting.Dictionary");	// Создаем словарь d
d.Add("а", "Архангельск");				// Добавляем несколько пар
d.Add("б", "Баку");
d.Add("в", "Воронеж");
d.Remove("б");						// Удаляем вторую пару

Метод RemoveAll

Синтаксис: объект.RemoveAll()

Метод RemoveAll очищает словарь объект, т. е. удаляет из него все пары.

3.14.2. Файловая система: объект FileSystemObject

Объект FileSystemObject обеспечивает доступ к файловой системе Windows. Его конструктор имеет вид:

new ActiveXObject("Scripting.FileSystemObject")

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

Следующий пример демонстрирует использование объекта FileSystemObject для создания текстового файла и вывода в него строки:

var fso = new ActiveXObject("Scripting.FileSystemObject"); // Создаем объект
var file = fso.CreateTextFile("c:\\test.txt", true);	// Создаем файл
file.WriteLine("This is a test.");			// Выводим в него строку
file.Close();						// Закрываем файл

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

Свойства объекта FileSystemObject
Свойство | Описание
Drives | Коллекция дисков локального компьютера.
Методы объекта FileSystemObject
Метод | Описание
BuildPath | Создает имя пути из двух компонентов.
CopyFile | Копирует один или несколько файлов.
CopyFolder | Полностью копирует папку.
CreateFolder | Создает новую папку.
CreateTextFile | Создает текстовый файл.
DeleteFile | Удаляет файл.
DeleteFolder | Полностью удаляет папку.
DriveExists | Проверяет, существует ли данный диск.
FileExists | Проверяет, существует ли данный файл.
FolderExists | Проверяет, существует ли данная папка.
GetAbsolutePathName | Возвращает полное название пути.
GetBaseName | Извлекает имя файла из пути.
GetDrive | Возвращает заданный объект Drive.
GetDriveName | Извлекает имя диска из пути.
GetExtensionName | Извлекает расширение файла из пути.
GetFile | Возвращает заданный объект File.
GetFileName | Извлекает спецификацию файла из пути.
GetFolder | Возвращает заданный объект Folder.
GetParentFolderName | Возвращает имя отцовской папки.
GetSpecialFolder | Возвращает объект Folder для системной папки.
GetTempName | Создает имя временного файла.
MoveFile | Переносит файл.
MoveFolder | Полностью перемещает папку.
OpenTextFile | Открывает текстовый файл.

Свойство Drives

Синтаксис: fso.Drives
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство Drives возвращает коллекцию объектов Drive, соответствующих всем физическим и логическим дискам локального компьютера. Для просмотра этой коллекции следует пользоваться объектом Enumerator.

Пример использования свойства Drives был приведен ранее.

Метод BuildPath

Синтаксис: fso.BuildPath(путь, имя)
Аргументы: путь, имя — строковые выражения
Результат: строковое значение

Метод BuildPath добавляет к пути заданное имя и возвращает результирующую строку. При необходимости перед именем добавляется разделитель "\". Например, следующий сценарий

var fso = new ActiveXObject("Scripting.FileSystemObject");
var newpath = fso.BuildPath("c:\\My Documents", "New Folder");
document.write(newpath);

выведет на экран обозревателя текст c:\My Documents\New Folder.

Метод CopyFile

Синтаксис: fso.CopyFile(источник, цель [, флаг]?)
Аргументы: источник, цель — строковые выражения
           флаг — логическое значение

Метод CopyFile копирует один или несколько файлов. При этом строка источник задает спецификацию исходного файла и может содержать подстановочные знаки "*" и "?" в последнем компоненте, строка цель задает имя результирующего файла или папки, а необязательный аргумент флаг указывает, следует ли заменять при копировании существующие файлы (по умолчанию он равен true, т. е. существующие файлы заменяются).

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

  • если нет файлов, соответствующих спецификации источника, то метод завершается ошибкой;
  • если файла с именем цель нет, то производится копирование файла;
  • если файл цель существует и флаг равен false, то метод завершается ошибкой, иначе делается попытка копирования источника поверх цели; при этом независимо от значения флага, попытка замены существующего файла с атрибутом "только для чтения" завершается ошибкой;
  • если цель является каталогом, то метод завершается ошибкой.

Пример: следующий сценарий копирует все файлы из корневой папки дискеты A в папку d:\Temp.

var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFile("a:\\*.*", "d:\\Temp");

Метод CopyFolder

Синтаксис: fso.CopyFolder(источник, цель [, флаг]?)
Аргументы: источник, цель — строковые выражения
           флаг — логическое выражение

Метод CopyFolder копирует одну папку в другую, включая подпапки. При этом строка источник задает спецификацию исходной папки и может содержать подстановочные знаки "*" и "?" в последнем компоненте, строка цель задает имя результирующей папки, а необязательный аргумент флаг указывает, следует ли заменять при копировании существующие файлы (по умолчанию он равен true, т. е. существующие файлы заменяются).

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

  • если нет файлов, соответствующих спецификации источника, то метод завершается ошибкой;
  • если папки с именем цель нет, то она создается и производится копирование файлов;
  • если цель задает имя существующего файла, то метод завершается ошибкой;
  • если файлы исходной папки уже есть в цели и флаг равен false, то метод завершается ошибкой, иначе делается попытка копирования источника поверх цели; при этом независимо от значения флага, попытка замены существующего файла с атрибутом "только для чтения" завершается ошибкой.

Пример: следующий сценарий копирует все файлы и папки из корневой папки дискеты A в папку d:\Temp.

var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFolder("a:\\", "d:\\Temp");

Метод CreateFolder

Синтаксис: fso.CreateFolder(имя)
Аргументы: имя — строковое выражение

Метод CreateFolder создает папку с заданным именем. Если такая папка уже есть, то метод завершается ошибкой.

Пример: следующий сценарий создает папку C:\New Folder.

var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateFolder("c:\\New Folder");

Метод CreateTextFile

Синтаксис: fso.CreateTextFile(имя [[, флаг]?, unicode]?)
Аргументы: имя — строковое выражение
           флаг, unicode — логические выражения
Результат: новый объект TextStream

Метод CreateTextFile создает текстовый файл с заданным именем. При этом необязательный аргумент флаг указывает, следует ли удалять существующий файл с этим именем (по умолчанию он равен true, т. е. существующие файлы заменяются новыми), а необязательный аргумент unicode задает кодировку символов файла (true означает кодировку Unicode, а false — кодировку ANSI; по умолчанию создается файл в кодировке ANSI). Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var ts = fso.CreateTextFile("c:\\file.txt", false);
ts.WriteLine("Тестовая строка.");
ts.Close();

Метод DeleteFile

Синтаксис: fso.DeleteFile(имя [, флаг]?)
Аргументы: имя — строковое выражение
           флаг — логическое выражение

Метод DeleteFile удаляет файл с заданным именем. При этом необязательный аргумент флаг указывает, следует ли удалять файл, имеющий атрибут "только для чтения" (по умолчанию он равен false, т. е. такие файлы не удаляются). Если файла с данным именем нет, то метод завершается ошибкой. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.DeleteFile("c:\\file.txt", true);

Метод DeleteFolder

Синтаксис: fso.DeleteFolder(имя [, флаг]?)
Аргументы: имя — строковое выражение
           флаг — логическое выражение

Метод DeleteFolder удаляет папку с заданным именем. При этом необязательный аргумент флаг указывает, следует ли удалять папку, имеющий атрибут "только для чтения" (по умолчанию он равен false, т. е. такие папки не удаляются). Если папки с данным именем нет, то метод завершается ошибкой. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.DeleteFile("c:\\file.txt", true);

Метод DriveExists

Синтаксис: fso.DriveExists(имя)
Аргументы: имя — строковое выражение
Результат: логическое выражение

Метод DriveExists проверяет, существует ли диск с заданным именем на локальном компьютере, и возвращает соответствующий результат. Строка имя может состоять из буквы, задающей имя диска ("c"), из буквы с двоеточием ("c:"), из буквы с двоеточием и разделителем пути ("c:\\") или содержать спецификацию сетевого диска ("\\computer3\\public1").

Примечание. Этот метод не проверяет наличие диска в дисководе со сменными дисками, а только существование самого дисковода. Для проверки наличия диска в дисководе пользуйтесь методом Drive.IsReady. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var b = fso.DriveExists("e");	// true, если есть диск E

Метод FileExists

Синтаксис: fso.FileExists(имя)
Аргументы: имя — строковое выражение
Результат: логическое выражение

Метод FileExists проверяет, существует ли файл с заданным именем на локальном компьютере, и возвращает соответствующий результат. Строка имя должна содержать спецификацию файла.

var fso = new ActiveXObject("Scripting.FileSystemObject");
var b = fso.FileExists("c:\\test.htm");	// true, если данный файл существует

Метод FolderExists

Синтаксис: fso.FolderExists(имя)
Аргументы: имя — строковое выражение
Результат: логическое выражение

Метод FolderExists проверяет, существует ли папка с заданным именем на локальном компьютере, и возвращает соответствующий результат. Строка имя должна содержать спецификацию папки.

var fso = new ActiveXObject("Scripting.FileSystemObject");
var b = fso.FolderExists("c:\\My Pictures");	// true, если данная папка существует

Метод GetAbsolutePathName

Синтаксис: fso.GetAbsolutePathName(путь)
Аргументы: путь — строковое выражение
Результат: строковое значение

Метод GetAbsolutePathName преобразует заданный путь в полное имя пути и возвращает результирующую строку. Пусть, например, текущим каталогом является c:\My Documents\Letters. Следующая таблица иллюстрирует результаты применения метода GetAbsolutePathName к различным входным аргументам.

имя | GetAbsolutePathName(имя)
"" | "c:\\My Documents\\Letters"
".." | "c:\\My Documents"
"\\" | "c:\\"
"oct2000\\*.doc" | "c:\\My Documents\\Letters\\oct2000\\*.doc"
"file.txt" | "c:\\My Documents\\Letters\\file.txt"

Метод GetBaseName

Синтаксис: fso.GetBaseName(путь)
Аргументы: путь — строковое выражение
Результат: строковое значение

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

var fso = new ActiveXObject("Scripting.FileSystemObject");
var s1 = fso.GetBaseName("c:\\My Documents\\Letters");	// s1 равно "Letters"
var s2 = fso.GetBaseName("c:\\My Documents\\Letters\\d1.doc");	// s2 равно "d1"

Метод GetDrive

Синтаксис: fso.GetDrive(имя)
Аргументы: имя — строковое выражение
Результат: объект Drive

Метод GetDrive возвращает объект Drive, соответствующий диску с заданным именем. Строка имя может состоять из буквы, задающей имя диска ("c"), из буквы с двоеточием ("c:"), из буквы с двоеточием и разделителем пути ("c:\\") или содержать спецификацию сетевого диска ("\\computer3\\public1"). Если диска с данным именем не существует, метод завершается ошибкой. Пример: следующая функция извлекает имя диска из аргумента путь и возвращает объем свободного пространства на этом диске в мегабайтах.

function DriveSpace(path) {
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(path)));
  return d.FreeSpace/1024/1024;
}

Метод GetDriveName

Синтаксис: fso.GetDriveName(путь)
Аргументы: путь — строковое выражение
Результат: строковое значение

Метод GetDriveName извлекает из заданного пути имя диска. Если его там нет, то возвращается пустая строка. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var d = fso.GetDriveName(fso.GetAbsolutePathName(path));

Метод GetExtensionName

Синтаксис: fso.GetExtensionName(путь)
Аргументы: путь — строковое выражение
Результат: строковое значение

Метод GetExtensionName извлекает из заданного пути расширение его последнего компонента, т. е. расширение файла, если это имя файла, и пустую строку, если это имя каталога. Примеры:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var s1 = fso.GetExtensionName("c:\\My Documents\\Letters");	// s1 равно ""
var s2 = fso.GetExtensionName("c:\\My Documents\\Letters\\d1.doc");	// s2 равно "doc"

Метод GetFile

Синтаксис: fso.GetFile(имя)
Аргументы: имя — строковое выражение
Результат: объект File

Метод GetFile возвращает объект File, соответствующий файлу с заданным именем. Если файла с данным именем не существует, метод завершается ошибкой. Пример: следующая функция возвращает дату создания заданного файла.

function DateCreated(path) {
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var f = fso.GetFile(path);
  return f.DateCreated;
}

Метод GetFileName

Синтаксис: fso.GetFileName(путь)
Аргументы: путь — строковое выражение
Результат: строковое значение

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

var fso = new ActiveXObject("Scripting.FileSystemObject");
var s1 = fso.GetBaseName("c:\\My Documents\\Letters");	// s1 равно "Letters"
var s2 = fso.GetBaseName("c:\\My Documents\\Letters\\d1.doc");	// s2 равно "d1.doc"

Метод GetFolder

Синтаксис: fso.GetFolder(имя)
Аргументы: имя — строковое выражение
Результат: объект Folder

Метод GetFolder возвращает объект Folder, соответствующий папке с заданным именем. Если папки с данным именем не существует, метод завершается ошибкой. Пример: следующая функция возвращает дату создания заданного папки.

function DateCreated(path) {
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var f = fso.GetFolder(path);
  return f.DateCreated;
}

Метод GetParentFolderName

Синтаксис: fso.GetParentFolderName(путь)
Аргументы: путь — строковое выражение
Результат: строковое значение

Метод GetParentFolderName извлекает из заданного пути отцовскую папку его последнего компонента или пустую строку, если такой папки в пути нет. Примеры:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var s1 = fso.GetParentFolderName("c:\\My Documents\\Letters");	// s1 = "My Documents"
var s2 = fso.GetParentFolderName("file.txt");	// s2 = ""

Метод GetSpecialFolder

Синтаксис: fso.GetSpecialFolder(номер)
Аргументы: номер — числовое выражение
Результат: объект Folder

Метод GetSpecialFolder возвращает объект Folder, соответствующий системной папке, заданной аргументом номер согласно следующей таблицы.

Номер | Системная папка
0 | Папка операционной системы Windows
1 | Папка System операционной системы Windows
2 | Папка для хранения временных файлов.

Например, в системе Windows 98 будут возвращены следующие имена папок:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var s1 = fso.GetSpecialFolder(0).Path;	// s1 равно "C:\\WINDOWS"
var s2 = fso.GetSpecialFolder(1).Path;	// s2 равно "C:\\WINDOWS\\SYSTEM"
var s3 = fso.GetSpecialFolder(2).Path;	// s3 равно "C:\\WINDOWS\\TEMP"

Метод GetTempName

Синтаксис: fso.GetTempName()
Результат: строковое значение

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

var fso = new ActiveXObject("Scripting.FileSystemObject");
var tempFolder = fso.GetSpecialFolder(2);
var tempFile = tempFolder.CreateTextFile(fso.GetTempName());

Метод MoveFile

Синтаксис: fso.MoveFile(источник, цель)
Аргументы: источник, цель — строковые выражения

Метод MoveFile перемещает один или несколько файлов в другое место. При этом строка источник задает спецификацию исходного файла и может содержать подстановочные знаки "*" и "?" в последнем компоненте, а строка цель задает имя результирующего файла или папки.

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

  • если нет файлов, соответствующих спецификации источника, то метод завершается ошибкой;
  • если файла с именем цель нет, то производится перемещение файла;
  • если файл цель существует, то метод завершается ошибкой;
  • если цель является каталогом, то метод завершается ошибкой.

Пример: следующий сценарий перемещает все файлы из корневой папки дискеты A в папку d:\Temp.

var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.MoveFile("a:\\*.*", "d:\\Temp");

Метод MoveFolder

Синтаксис: fso.MoveFolder(источник, цель)
Аргументы: источник, цель — строковые выражения

Метод MoveFolder перемещает одну папку в другую, включая подпапки. При этом строка источник задает спецификацию исходной папки и может содержать подстановочные знаки "*" и "?" в последнем компоненте, а строка цель задает имя результирующей папки.

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

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

Пример: следующий сценарий перемещает все файлы и папки из корневой папки дискеты A в папку d:\Temp.

var fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFolder("a:\\", "d:\\Temp");

Метод OpenTextFile

Синтаксис: fso.OpenTextFile(имя [[[, режим]?, флаг]?, формат]?)
Аргументы: имя — строковое выражение
           режим, формат — числовые выражения
           флаг — логическое выражение
Результат: новый объект TextStream

Метод OpenTextFile открывает текстовый файл с заданным именем. При этом необязательный аргумент флаг указывает, следует ли создавать новый файл, если файла с таким именем нет (по умолчанию он равен false, т. е. файл не создается).

Необязательный аргумент режим задает режим открытия файла и может принимать следующие значения:

1 | Открыть файл только для чтения. Принято по умолчанию.
2 | Открыть файл для записи. Запись производится с начала файла, старое содержимое теряется.
8 | Открыть файл для добавления. Запись производится в конец файла.

Необязательный аргумент формат задает кодировку символов файла и может принимать следующие значения:

0 | Открыть файл в кодировке ANSI. Принято по умолчанию.
-1 | Открыть файл в кодировке Unicode.
-2 | Открыть файл в кодировке операционной системы.

Пример открытия файла в режиме добавления:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var ts = fso.OpenTextFile("c:\\file.txt", 8);
ts.WriteLine("Тестовая строка.");
ts.Close();


WDH: JavaScript - Исполняющая система JScript (продолжение)

Глава 3.15. Исполняющая система JScript (продолжение)

3.15.1. Диски: объект Drive

Объект Drive обеспечивает доступ к отдельному диску компьютера. Он может быть создан методом FileSystemObject.GetDrive или получен при итерации коллекции FileSystemObject.Drives. Собственных методов этот объект не имеет.

Свойства объекта Drive
Свойство | Описание
AvailableSpace | Объем доступного пространства на диске.
DriveLetter | Буква диска.
DriveType | Тип диска.
FileSystem | Тип файловой системы.
FreeSpace | Объем свободного пространства на диске.
IsReady | Готовность диска.
Path | Путь доступа к диску.
RootFolder | Корневая папка диска.
SerialNumber | Серийный номер диска.
ShareName | Сетевое имя диска.
TotalSize | Общий объем диска.
VolumeName | Метка тома.

Свойство AvailableSpace

Синтаксис: объект.AvailableSpace
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство AvailableSpace возвращает объем дискового пространства, доступного для пользователя, в байтах. Обычно его значение совпадает со значением свойства FreeSpace; исключение составляют такие файловые системы, как NTFS 5.0, поддерживающие дисковые квоты пользователей. Следующий пример возвращает объем доступного пространства на диске C в килобайтах:

function AvailSpace() {
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var d = fso.GetDrive("C");
  return d.AvailableSpace / 1024;
}

Свойство DriveLetter

Синтаксис: объект.DriveLetter
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство DriveLetter возвращает букву, идентифицирующую данный диск. Если диск является сетевым и не отображен на логический диск, то возвращается пустая строка. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var d = fso.GetDrive("C");
var x = d.DriveLetter;	// x равно "C"

Свойство DriveType

Синтаксис: объект.DriveType
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство DriveType возвращает тип диска согласно следующей таблицы:

0 | Неизвестное устройство.
1 | Дисковод со сменными дисками.
2 | Жесткий диск.
3 | Сетевой диск.
4 | Компакт диск.
5 | Виртуальный диск в ОЗУ.

Пример использования этого свойства был приведен ранее.

Свойство FileSystem

Синтаксис: объект.FileSystem
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство FileSystem возвращает тип файловой системы диска согласно следующей таблицы:

"FAT" | Файловая система MS-DOS и Windows 95/98.
"NTFS" | Файловая система Windows NT.
"CDFS" | Файловая система компакт-дисков.

Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var d = fso.GetDrive("C");
var s = d.FileSystem;

Свойство FreeSpace

Синтаксис: объект.FreeSpace
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство FreeSpace возвращает объем свободного дискового пространства в байтах. Обычно его значение совпадает со значением свойства AvailableSpace; исключение составляют такие файловые системы, как NTFS 5.0, поддерживающие дисковые квоты пользователей. Следующий пример возвращает объем свободного пространства на диске C в килобайтах:

function AvailSpace() {
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var d = fso.GetDrive("C");
  return d.FreeSpace / 1024;
}

Свойство IsReady

Синтаксис: объект.IsReady
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство IsReady возвращает true, если в дисководе есть диск, и false в противном случае. Оно имеет смысл только для дисководов со сменными дисками и компакт-дисков. Пример использования этого свойства был приведен ранее.

Свойство Path

Синтаксис: объект.Path
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство Path возвращает путь, соответствующий данному диску в виде строки "X:", где X — буква, обозначающая данный диск. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var d = fso.GetDrive("C");
var s = d.Path;	// s равно "C:"

Свойство RootFolder

Синтаксис: объект.RootFolder
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство RootFolder возвращает объект Folder, соответствующий корневой папке данного диска.

Свойство SerialNumber

Синтаксис: объект.SerialNumber
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство SerialNumber возвращает десятичный серийный номер данного диска. Это свойство позволяет проверить, правильный ли диск вставлен в дисковод. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var d = fso.GetDrive("A");
var n = 959814235;	// серийный номер диска, который должен быть в дисководе A
if (d.SerialNumber == n)
   …

Свойство ShareName

Синтаксис: объект.ShareName
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство ShareName возвращает сетевое имя данного диска. Если диск не является сетевым, то возвращается пустая строка. Пример использования этого свойства был приведен ранее.

Свойство TotalSize

Синтаксис: объект.TotalSize
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство TotalSize возвращает полный объем данного диска в байтах. Следующий пример возвращает объем диска C в килобайтах:

function AvailSpace() {
  var fso = new ActiveXObject("Scripting.FileSystemObject");
  var d = fso.GetDrive("C");
  return d.TotalSize / 1024;
}

Свойство VolumeName

Синтаксис: объект.VoulmeName
Атрибуты:  { DontEnum, DontDelete }

Свойство VolumeName возвращает или устанавливает метку тома для данного диска. Это единственное свойство объекта Drive, доступное для изменения сценарием. Пример использования этого свойства был приведен ранее.

3.15.2. Файлы: объект File

Объект File обеспечивает доступ к отдельному файлу. Он может быть создан методом FileSystemObject.GetFile или получен при просмотре коллекции Folder.Files.

Свойства объекта File
Свойство | Описание
Attributes | Атрибуты файла.
DateCreated | Дата и время создания файла.
DateLastAccessed | Дата и время последнего обращения к файлу.
DateLastModified | Дата и время последнего изменения файла.
Drive | Буква диска, на котором находится файл.
Name | Имя файла.
ParentFolder | Объект Folder папки, в которой находится файл.
Path | Путь доступа к файлу.
ShortName | Короткое имя файла.
ShortPath | Короткое имя пути доступа к файлу.
Size | Размер файла.
Type | Тип файла.
Методы объекта File
Метод | Описание
Copy | Копирует файл.
Delete | Удаляет файл.
Move | Перемещает файл.
OpenAsTextStream | Открывает файл как текстовый.

Свойство Attributes

Синтаксис: объект.Attributes
Атрибуты:  { DontEnum, DontDelete }

Свойство Attributes позволяет читать атрибуты данного файла и изменять некоторые из них. Его значением является логическая комбинация следующих битовых флагов:

Бит | Атрибут | Можно изменять
0 | Обычный файл (все атрибуты сброшены). | —
1 | Файл только для чтения. | Да
2 | Скрытый файл. | Да
4 | Системный файл. | Да
8 | Метка дискового тома. | Нет
16 | Папка или каталог. | Нет
32 | Файл был изменен после архивирования. | Да
64 | Ссылка или сокращение. | Нет
128 | Сжатый файл. | Нет

Следующий пример показывает, как сбросить атрибут файла "только для чтения":

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("c:\\test.txt");
f.Attributes = f.Attributes - 1;

Свойство DateCreated

Синтаксис: объект.DateCreated
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство DateCreated возвращает дату и время создания данного файла. Пример: следующий сценарий

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("c:\\config.sys");
document.write(f.DateCreated);

выведет на экран обозревателя текст следующего вида: Fri Jul 7 01:04:53 UTC+0600 2000.

Примечание. Значение этого свойства имеет нестандартный тип VT_DATE стандарта COM. При присваивании строковой переменной оно автоматически преобразуется в строку указанного вида.

Свойство DateLastAccessed

Синтаксис: объект.DateLastAccessed
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство DateLastAccessed возвращает дату и время последнего открытия данного файла для чтения. Пример: следующий сценарий

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("c:\\config.sys");
document.write(f.DateLastAccessed);

выведет на экран обозревателя текст следующего вида: Fri Jul 7 01:04:53 UTC+0600 2000.

Примечание. Значение этого свойства имеет нестандартный тип VT_DATE стандарта COM. При присваивании строковой переменной оно автоматически преобразуется в строку указанного вида.

Свойство DateLastModified

Синтаксис: объект.DateLastModified
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство DateLastModified возвращает дату и время последней модификации данного файла. Пример: следующий сценарий

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("c:\\config.sys");
document.write(f.DateLastModified);

выведет на экран обозревателя текст следующего вида: Fri Jul 7 01:04:53 UTC+0600 2000.

Примечание. Значение этого свойства имеет нестандартный тип VT_DATE стандарта COM. При присваивании строковой переменной оно автоматически преобразуется в строку указанного вида.

Свойство Drive

Синтаксис: объект.Drive
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

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

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("c:\\config.sys");
var x = f.Drive;	// x равно "C"

Свойство Name

Синтаксис: объект.Name
Атрибуты:  { DontEnum, DontDelete }

Свойство Name позволяет читать и изменять имя данного файла. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("c:\\config.sys");
var x = f.Name;	// x равно "CONFIG.SYS"

Свойство ParentFolder

Синтаксис: fso.ParentFolder
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Метод ParentFolder возвращает объект Folder, соответствующий папке, содержащей данный файл.Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("c:\\config.sys");
var p = f.ParentFolder;
var x = p.Path;	// x равно "C:\\"

Свойство Path

Синтаксис: объект.Path
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство Path возвращает путь доступа к данному файлу. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("c:\\config.sys");
var x = f.Path;	// x равно "C:\\CONFIG.SYS"

Свойство ShortName

Синтаксис: объект.ShortName
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство ShortName возвращает имя данного файла в нотации MS-DOS (8 символов на имя файла и 3 символа на расширение). Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("C:\\Multimedia Files\\Graphics\\Animations\\Airpane.gif");
var x = f.ShortName;	// x равно "AIRPLANE.GIF"

Свойство ShortPath

Синтаксис: объект.ShortPath
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство ShortPath возвращает путь доступа к данному файлу в нотации MS-DOS (8 символов на имя файла и 3 символа на расширение). Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("C:\\Multimedia Files\\Graphics\\Animations\\Airpane.gif");
var x = f.ShortPath;	// x равно "C:\\MULTIM~1\\GRAPHICS\\ANIMAT~1\\AIRPLANE.GIF"

Свойство Size

Синтаксис: объект.Size
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство Size возвращает размер данного файла в байтах. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("c:\\config.sys");
var x = f.Size;

Свойство Type

Синтаксис: объект.Type
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство Type возвращает тип данного файла. Тип файла — это текстовая строка, соответствующая расширению файла и хранящаяся в системном реестре. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("C:\\Multimedia Files\\Graphics\\Animations\\Airpane.gif");
var x = f.Type;	// x равно "GIF Image"

Метод Copy

Синтаксис: объект.Copy(цель [, флаг]?)
Аргументы: цель — строковое выражение
           флаг — логическое значение

Метод Copy копирует данный файл. Строка цель задает имя результирующего файла или папки, а необязательный аргумент флаг указывает, следует ли заменять при копировании существующие файлы (по умолчанию он равен true, т. е. существующие файлы заменяются).

Если цель заканчивается символом "\", то цель считается именем папки, в которую копируются исходный файл. В остальных случаях цель считается именем результирующего файла. Сам процесс копирования происходит так:

  • если файла с именем цель нет, то производится копирование файла;
  • если файл цель существует и флаг равен false, то метод завершается ошибкой, иначе делается попытка копирования источника поверх цели; при этом независимо от значения флага, попытка замены существующего файла с атрибутом "только для чтения" завершается ошибкой;
  • если цель является каталогом, то метод завершается ошибкой.

Пример: следующий сценарий копирует файл CONFIS.SYS в папку d:\Temp.

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("c:\\config.sys");
f.Copy("d:\\Temp");

Ср. метод FileSystemObject.CopyFile.

Метод Delete

Синтаксис: объект.Delete(флаг?)
Аргументы: флаг — логическое выражение

Метод Delete удаляет данный файл. При этом необязательный аргумент флаг указывает, следует ли удалять файл, имеющий атрибут "только для чтения" (по умолчанию он равен false, т. е. такие файлы не удаляются). Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("C:\\Multimedia Files\\Graphics\\Animations\\Airpane.gif");
f.Delete(true);

Ср. метод FileSystemObject.DeleteFile.

Метод Move

Синтаксис: объект.Move(цель)
Аргументы: цель — строковое выражение

Метод Move перемещает данный файл в другое место. При этом строка цель задает имя результирующего файла или папки.

Если цель заканчивается символом "\", то цель считается именем папки, в которую перемещается исходный файл. В остальных случаях цель считается именем результирующего файла. Сам процесс перемещения происходит так:

  • если файла с именем цель нет, то производится перемещение файла;
  • если файл цель существует, то метод завершается ошибкой;
  • если цель является каталогом, то метод завершается ошибкой.

Пример: следующий сценарий перемещает файл CONFIS.SYS в папку d:\Temp (но делать этого не нужно!).

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("c:\\config.sys");
f.Move("d:\\Temp");

Ср. метод FileSystemObject.MoveFile.

Метод OpenAsTextStream

Синтаксис: объект.OpenAsTextStream(режим? [, формат]?)
Аргументы: режим, формат — числовые выражения
Результат: новый объект TextStream

Метод OpenTextFile открывает данный файл как текстовый. Он полностью аналогичен методу FileSystemObject.OpenTextFile.

3.15.3. Папки: объект Folder

Объект Folder обеспечивает доступ к отдельному папке. Он может быть создан методом FileSystemObject.GetFolder или получен чтением свойств Drive.RootFolder и File.ParentFolder.

Свойства объекта Folder
Свойство | Описание
Attributes | Атрибуты папки.
DateCreated | Дата и время создания папки.
DateLastAccessed | Дата и время последнего обращения к папке.
DateLastModified | Дата и время последнего изменения папки.
Drive | Буква диска, на котором находится папка.
Files | Коллекция файлов данной папки.
IsRootFolder | Проверяет, является ли папка корневой.
Name | Имя папки.
ParentFolder | Объект Folder папки, в которой находится папка.
Path | Путь доступа к папке.
ShortName | Короткое имя папки.
ShortPath | Короткое имя пути доступа к папке.
Size | Размер папки с подпапками.
SubFolders | Коллекция подпапок данной папки.
Type | Тип папки.
Методы объекта Folder
Метод | Описание
Copy | Копирует папку.
CreateTextFile | Создает текстовый файл.
Delete | Удаляет папку.
Move | Перемещает папку.

Свойство Attributes

Синтаксис: объект.Attributes
Атрибуты:  { DontEnum, DontDelete }

Свойство Attributes позволяет читать атрибуты данной папки и изменять некоторые из них. Полностью аналогично свойству File.Attributes.

Свойство DateCreated

Синтаксис: объект.DateCreated
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство DateCreated возвращает дату и время создания данной папки. Пример: следующий сценарий

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("c:\\Program Files");
document.write(f.DateCreated);

выведет на экран обозревателя текст следующего вида: Mon Jul 12 20:43:58 UTC+0600 1999.

Примечание. Значение этого свойства имеет нестандартный тип VT_DATE стандарта COM. При присваивании строковой переменной оно автоматически преобразуется в строку указанного вида.

Свойство DateLastAccessed

Синтаксис: объект.DateLastAccessed
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство DateLastAccessed возвращает дату и время последнего доступа к данной папке. Пример: следующий сценарий

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("c:\\Program Files");
document.write(f.DateLastAccessed);

выведет на экран обозревателя текст следующего вида: Mon Jul 12 20:43:58 UTC+0600 1999.

Примечание. Значение этого свойства имеет нестандартный тип VT_DATE стандарта COM. При присваивании строковой переменной оно автоматически преобразуется в строку указанного вида.

Свойство DateLastModified

Синтаксис: объект.DateLastModified
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство DateLastModified возвращает дату и время последней модификации данной папки. Пример: следующий сценарий

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("c:\\Program Files");
document.write(f.DateLastModified);

выведет на экран обозревателя текст следующего вида: Mon Jul 12 20:43:58 UTC+0600 1999.

Примечание. Значение этого свойства имеет нестандартный тип VT_DATE стандарта COM. При присваивании строковой переменной оно автоматически преобразуется в строку указанного вида.

Свойство Drive

Синтаксис: объект.Drive
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

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

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("c:\\Program Files");
var x = f.Drive;	// x равно "C"

Свойство Files

Синтаксис: объект.Files
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство Files возвращает коллекцию объектов File, соответствующих всем файлам, содержащимся в данной папке, включая скрытые и системные файлы. Для просмотра этой коллекции следует пользоваться объектом Enumerator.

Пример: следующий сценарий выведет на экран список всех файлов корневого каталога диска C.

function ShowFileList(folderspec) {
   var fso = new ActiveXObject("Scripting.FileSystemObject");
   var f = fso.GetFolder(folderspec);
   var fc = new Enumerator(f.Files);
   var s = "";
   for (; !fc.atEnd(); fc.moveNext())
      s += fc.item() + "<br>";
   return s;
}

document.write(ShowFileList("c:\\"));

Свойство IsRootFolder

Синтаксис: объект.IsRootFolder
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство IsRootFolder возвращает true, если данная папка является корневой, и false в противном случае.

Свойство Name

Синтаксис: объект.Name
Атрибуты:  { DontEnum, DontDelete }

Свойство Name позволяет читать и изменять имя данной папки. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("c:\\Program Files");
var x = f.Name;	// x равно "Program Files"

Свойство ParentFolder

Синтаксис: fso.ParentFolder
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Метод ParentFolder возвращает объект Folder, соответствующий папке, содержащей данную папку. Если папка является корневой, то возвращается null. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("c:\\Program Files");
var p = f.ParentFolder;
var x = p.Path;	// x равно "C:\\"

Свойство Path

Синтаксис: объект.Path
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство Path возвращает путь доступа к данной папке. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("c:\\Program Files");
var x = f.Path;	// x равно "C:\\Program Files"

Свойство ShortName

Синтаксис: объект.ShortName
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство ShortName возвращает имя данной папки в нотации MS-DOS (8 символов на имя файла и 3 символа на расширение). Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("C:\\Multimedia Files\\Graphics\\Animations");
var x = f.ShortName;	// x равно "ANIMAT~1"

Свойство ShortPath

Синтаксис: объект.ShortPath
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство ShortPath возвращает путь доступа к данной папке в нотации MS-DOS (8 символов на имя файла и 3 символа на расширение). Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("C:\\Multimedia Files\\Graphics\\Animations");
var x = f.ShortPath;	// x равно "C:\\MULTIM~1\\GRAPHICS\\ANIMAT~1"

Свойство Size

Синтаксис: объект.Size
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство Size возвращает суммарный размер в байтах всех файлов, содержащихся в данной папке и ее подпапках. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("c:\\");
var x = f.Size;

Свойство SubFolders

Синтаксис: объект.SubFolders
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство SubFolders возвращает коллекцию объектов Folder, соответствующих всем папкам, содержащимся в данной папке, включая скрытые и системные папки. Для просмотра этой коллекции следует пользоваться объектом Enumerator.

Пример: следующий сценарий выведет на экран список всех подпапок корневого каталога диска C.

function ShowFileList(folderspec) {
   var fso = new ActiveXObject("Scripting.FileSystemObject");
   var f = fso.GetFolder(folderspec);
   var fc = new Enumerator(f.SubFolders);
   var s = "";
   for (; !fc.atEnd(); fc.moveNext())
      s += fc.item() + "<br>";
   return s;
}

document.write(ShowFileList("c:\\"));

Свойство Type

Синтаксис: объект.Type
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство Type возвращает тип данной папки. Тип — это текстовая строка, соответствующая расширению файла и хранящаяся в системном реестре. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("C:\\Multimedia Files\\Graphics\\Animations");
var x = f.Type;	// x равно "Папка с файлами" (в русифицированной Windows)

Метод Copy

Синтаксис: объект.Copy(цель [, флаг]?)
Аргументы: цель — строковое выражение
           флаг — логическое значение

Метод Copy полностью копирует данную папку. Строка цель задает имя результирующей папки, а необязательный аргумент флаг указывает, следует ли заменять при копировании существующие файлы (по умолчанию он равен true, т. е. существующие файлы заменяются). Сам процесс копирования происходит так:

  • если папки с именем цель нет, то производится копирование папки;
  • если папка цель существует и флаг равен false, то метод завершается ошибкой, иначе делается попытка копирования источника поверх цели; при этом независимо от значения флага, попытка замены существующего файла с атрибутом "только для чтения" завершается ошибкой.

Пример: следующий сценарий копирует папку c:\ в папку d:\Temp.

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("c:\\");
f.Copy("d:\\Temp");

Ср. метод FileSystemObject.CopyFolder.

Метод CreateTextFile

Синтаксис: объект.CreateTextFile(имя [[, флаг]?, unicode]?)
Аргументы: имя — строковое выражение
           флаг, unicode — логические выражения
Результат: новый объект TextStream

Метод CreateTextFile создает текстовый файл с заданным именем. Он полностью аналогичен методу FileSystemObject.CreateTextFile.

Метод Delete

Синтаксис: объект.Delete(флаг?)
Аргументы: флаг — логическое выражение

Метод Delete удаляет данную папку. При этом необязательный аргумент флаг указывает, следует ли удалять файлы, имеющие атрибут "только для чтения" (по умолчанию он равен false, т. е. такие файлы не удаляются). Папка удаляется независимо от того, пуста оно или нет. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder("C:\\Multimedia Files\\Graphics\\Animations");
f.Delete(true);

Ср. метод FileSystemObject.DeleteFolder.

Метод Move

Синтаксис: объект.Move(цель)
Аргументы: цель — строковое выражение

Метод Move перемещает данную папку в другое место. При этом строка цель задает имя результирующей папки. Сам процесс перемещения происходит так:

  • если папки с именем цель нет, то производится перемещение папки;
  • если папка цель существует, то метод завершается ошибкой.

Пример: следующий сценарий перемещает папку c:\ в папку d:\Temp (но делать этого не нужно!).

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile("c:\\");
f.Move("d:\\Temp");

Ср. метод FileSystemObject.MoveFolder.

3.15.4. Текстовые файлы: объект TextStream

Объект TextStream предназначен для работы с текстовыми файлами. Он может быть создан методами FileSystemObject.CreateTextFile, FileSystemObject.OpenTextFile, Folder.CreateTextFile и File.OpenAsTextStream.

WDH+ О работе с текстовыми файлами см. также WDH+: ANSI и Unicode.

Свойства объекта TextStream
Свойство | Описание
AtEndOfLine | Проверяет конец строки.
AtEndOfStream | Проверяет конец файла.
Column | Номер текущего символа в строке.
Line | Номер текущей строки.
Методы объекта TextStream
Метод | Описание
Close | Закрывает файл.
Read | Читает заданное количество символов.
ReadAll | Читает весь файл.
ReadLine | Читает строку.
Skip | Пропускает заданное количество символов.
SkipLine | Пропускает строку.
Write | Выводит строку.
WriteBlankLines | Выводит пустые строки.
WriteLine | Выводит строку и символ конца строки.

Свойство AtEndOfLine

Синтаксис: объект.AtEndOfLine
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство AtEndOfLine возвращает true, если следующим символом файла является символ перевода строки, и false в противном случае. Этим свойством обладают только файлы, открытые для чтения. Следующий пример показывает, как можно считать первую строку текстового файла:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile("c:\\test.txt", 1, false);
var s = "";
while (!f.AtEndOfLine)
  s += f.Read(1);
f.Close();

Свойство AtEndOfStream

Синтаксис: объект.AtEndOfStream
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

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

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile("c:\\test.txt", 1, false);
var s = "";
while (!f.AtEndOfStream)
  s += f.ReadLine();
f.Close();

Свойство Column

Синтаксис: объект.Column
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство Column возвращает номер текущего символа в строке, считая с 1. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile("c:\\test.txt", 1, false);
var s = f.ReadLine();
var n = f.Column;

Свойство Line

Синтаксис: объект.Line
Атрибуты:  { DontEnum, DontDelete, ReadOnly }

Свойство Line возвращает номер текущей строки файла, считая с 1. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile("c:\\test.txt", 1, false);
var s = f.ReadAll();
var n = f.Line;

Метод Close

Синтаксис: объект.Close()

Метод Close закрывает данный файл. Примеры его использования приведены выше.

Метод Read

Синтаксис: объект.Read(число)
Аргументы: число — числовое выражение
Результат: строковое значение

Метод Read читает из файла заданное число символов и возвращает их в новой строке. Пример его использования приведен выше.

Метод ReadAll

Синтаксис: объект.ReadAll()
Результат: строковое значение

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

Метод ReadLine

Синтаксис: объект.ReadLine()
Результат: строковое значение

Метод ReadLine считывает очередную строку из файла и возвращает результат в новой строке. Пример его использования приведен выше. Чтение производится до символа перевода строки, но не включая его.

Метод Skip

Синтаксис: объект.Skip(число)
Аргументы: число — числовое выражение

Метод Skip считывает из файла заданное число символов, но не возвращает их. Используется для пропуска ненужного содержимого файла. Следующий пример пропускает при чтении первую строку файла:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile("c:\\test.txt", 1, false);
while (!f.AtEndOfLine)
  f.Skip(1);
…

Метод SkipLine

Синтаксис: объект.SkipLine()

Метод SkipLine считывает из файла очередную строку, но не возвращает ее. Используется для пропуска ненужного содержимого файла. Следующий пример пропускает при чтении первую строку файла:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile("c:\\test.txt", 1, false);
f.SkipLine();
…

Метод Write

Синтаксис: объект.Write(строка)
Аргументы: строка — строковое выражение

Метод Write выводит в файл заданную строку. Символ перевода строки после строки не выводится, для этого нужно пользоваться методом WriteLine. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile("c:\\test.txt", 2, true);
f.Write("Тестовая строка");
f.Close();

Метод WriteBlankLines

Синтаксис: объект.WriteBlankLines(число)
Аргументы: число — числовое выражение

Метод WriteBlankLines выводит в файл заданное число символов перевода строки. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile("c:\\test.txt", 2, false);
f.WriteBlankLines(10);
f.Close()

Метод WriteLine

Синтаксис: объект.Write(строка?)
Аргументы: строка — строковое выражение

Метод Write выводит в файл заданную строку и символ перевода строки после нее. Если строка опущена, то выводится только символ перевода строки. Пример:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.OpenTextFile("c:\\test.txt", 2, true);
f.WriteLine("Тестовая строка");
f.Close();


WDH: Коды ошибок Microsoft JScript

Приложение 14.
Коды ошибок Microsoft JScript

Таблица П14.1. Синтаксические ошибки JScript
Номер | Описание
1001 | Out of memory | Недостаточно памяти
1002 | Syntax error | Ошибка синтаксиса
1003 | Expected ':' | Предполагается наличие ':'
1004 | Expected ';' | Предполагается наличие ';'
1005 | Expected '(' | Предполагается наличие '('
1006 | Expected ')' | Предполагается наличие ')'
1007 | Expected ']' | Предполагается наличие ']'
1008 | Expected '{' | Предполагается наличие '{'
1009 | Expected '}' | Предполагается наличие '}'
1010 | Expected identifier | Предполагается наличие идентификатора
1011 | Expected '=' | Предполагается наличие '='
1012 | Expected '/' | Предполагается наличие '/'
1013 | Invalid number | Недопустимое число
1014 | Invalid character | Недопустимый символ
1015 | Unterminated string constant | Незавершенная строковая константа
1016 | Unterminated comment | Незавершенная строка комментария
1018 | 'return' statement outside of function | Инструкция 'return' вне функции
1019 | Can't have 'break' outside of loop | Инструкция 'break' не может находиться вне блока loop
1020 | Can't have 'continue' outside of loop | Инструкция 'continue' не может находиться вне блока loop
1023 | Expected hexadecimal digit | Предполагается шестнадцатеричное число
1024 | Expected 'while' | Предполагается наличие 'while'
1025 | Label redefined | Метка переопределена
1026 | Label not found | Метка не найдена
1027 | 'default' can only appear in a 'switch' statement | Инструкция 'default' может присутствовать в конструкции 'switch' только один раз
1028 | Expected identifier or string | Предполагается наличие идентификатора или строки
1029 | Expected '@end' | Предполагается наличие '@end'
1030 | Conditional compilation turned off | Условная компиляция выключена
1031 | Expected constant | Предполагается наличие константы
1032 | Expected '@' | Предполагается наличие '@'
1033 | Expected 'catch' | Предполагается наличие 'catch'
1034 | Expected 'var' | Предполагается наличие 'var'
1035 | throw must be followed by an expression on the same source line | За инструкцией throw должно следовать выражение в той же строке

Таблица П14.2. Ошибки JScript времени выполнения
Номер | Описание
5 | Invalid procedure call or argument | Недопустимый вызов или аргумент процедуры
6 | Overflow | Переполнение
7 | Out of memory | Недостаточно памяти
9 | Subscript out of range | Индекс выходит за пределы допустимого диапазона
10 | This array is fixed or temporarily locked | Массив имеет фиксированную длину или временно блокирован
11 | Division by zero | Деление на 0
13 | Type mismatch | Несоответствие типа
14 | Out of string space | Недостаточно памяти для строки
17 | Can't perform requested operation | Невозможно выполнить требуемую операцию
28 | Out of stack space | Недостаточно места в стеке
35 | Sub or Function not defined | Процедура Sub или Function не определена
48 | Error in loading DLL | Ошибка при загрузке DLL
51 | Internal error | Внутренняя ошибка
52 | Bad file name or number | Недопустимое имя или номер файла
53 | File not found | Файл не найден
54 | Bad file mode | Недопустимый режим файла
55 | File already open | Файл уже открыт
57 | Device I/O error | Ошибка устройства ввода-вывода
58 | File already exists | Файл уже существует
61 | Disk full | Диск переполнен
62 | Input past end of file | Ввод данных за пределами файла
67 | Too many files | Слишком много файлов
68 | Device unavailable | Нет доступа к устройству
70 | Permission denied | Разрешение отклонено
71 | Disk not ready | Диск не готов
74 | Can't rename with different drive | Невозможно переименование с другим именем диска
75 | Path/File access error | Ошибка доступа к файлу/каталогу
76 | Path not found | Путь не найден
91 | Object variable or With block variable not set | Объектная переменная или переменная блока With не задана
92 | For loop not initialized | Цикл For не инициализирован
94 | Invalid use of Null | Недопустимое использование Null
322 | Can't create necessary temporary file | Невозможно создание требуемого временного файла
424 | Object required | Требуется объект
429 | Automation server can't create object | Невозможно создание объекта сервером программирования объектов
430 | Class doesn't support Automation | Класс не поддерживает программирование объектов
432 | File name or class name not found during Automation operation | Не найдено имя файла или класса при операции программирования объектов
438 | Object doesn't support this property or method | Объект не поддерживает это свойство или метод
440 | Automation error | Ошибка программирования объектов
445 | Object doesn't support this action | Команда не поддерживается объектом
446 | Object doesn't support named arguments | Объект не поддерживает именованные аргументы
447 | Object doesn't support current locale setting | Объект не поддерживает текущую национальную настройку
448 | Named argument not found | Именованный аргумент не найден
449 | Argument not optional | Обязательный аргумент
450 | Wrong number of arguments or invalid property assignment | Недопустимое число аргументов или присвоение значения свойства
451 | Object not a collection | Объект не является семейством
453 | Specified DLL function not found | Указанная функция DLL не найдена
458 | Variable uses an Automation type not supported in JScript | Переменная использует не поддерживаемый в JScript тип программирования объектов
462 | The remote server machine does not exist or is unavailable | Удаленный сервер не существует или недоступен
501 | Cannot assign to variable | Присвоение значения переменной невозможно
502 | Object not safe for scripting | Применение объекта в сценариях небезопасно
503 | Object not safe for initializing | Инициализация объекта небезопасна
504 | Object not safe for creating | Создание объекта небезопасно
507 | An exception occurred | Произошло исключение
4096 | Microsoft JScript compilation error | Ошибка компиляции Microsoft JScript
4097 | Microsoft JScript runtime error | Ошибка выполнения Microsoft JScript
4098 | Unknown runtime error | Неизвестная ошибка выполнения
5000 | Cannot assign to 'this' | Невозможно присвоение значения 'this'
5001 | Number expected | Предполагается наличие числа
5002 | Function expected | Предполагается наличие функции
5003 | Cannot assign to a function result | Невозможно присвоение результату функции
5004 | Cannot index object | Невозможно индексирование объекта
5005 | String expected | Предполагается наличие строки
5006 | Date object expected | Предполагается наличие объекта-даты
5007 | Object expected | Предполагается наличие объекта
5008 | Illegal assignment | Недопустимое присвоение
5009 | Undefined identifier | Неопределенный идентификатор
5010 | Boolean expected | Предполагается наличие логического значения
5011 | Can't execute code from a freed script | Не удается выполнить программу из освобожденного сценария
5012 | Object member expected | Предполагается наличие компонента объекта
5013 | VBArray expected | Предполагается наличие VBArray
5014 | JScript object expected | Предполагается наличие объекта JScript
5015 | Enumerator object expected | Предполагается наличие объекта Enumerator
5016 | Regular Expression object expected | Предполагается наличие объекта регулярного выражения
5017 | Syntax error in regular expression | Ошибка синтаксиса в регулярном выражении
5018 | Unexpected quantifier | Неизвестный числовой показатель
5019 | Expected ']' in regular expression | Предполагается наличие ']' в регулярном выражении
5020 | Expected ')' in regular expression | Предполагается наличие ')' в регулярном выражении
5021 | Invalid range in character set | Недопустимый диапазон в наборе символов
5022 | Exception thrown and not caught | Исключение сгенерировано и не обработано
5023 | Function does not have a valid prototype object | Функция не имеет правильного объекта- прототипа
5024 | The URI to be encoded contains an invalid character | Кодируемый URI содержит недопустимый символ
5025 | The URI to be decoded is not a valid encoding | Декодируемый URI имеет неверную кодировку
5026 | The number of fractional digits is out of range | Недопустимое число цифр дробной части
5027 | The precision is out of range | Недопустимое значение точности
5028 | Array of arguments object expected | Предполагается наличие объекта массив аргументов
5029 | Array length must be a finite positive integer | Длина массива должна быть целым положительным числом
5030 | Array length must be assigned a finite positive number | Длине массива должна быть присвоено целое положительное число
5031 | Array object expected | Предполагается наличие объекта Array


WDH: DHTML - Введение в Dynamic HTML

Часть IV.
Динамические Веб-страницы:
технологии DHTML

"Фильм должен начинаться с землетрясения, а потом
напряжение должно нарастать."

Альфред Хичкок

Глава 4.1. Введение в Dynamic HTML

4.1.1. Что такое Dynamic HTML?

Последние годы развитие World Wide Web происходит по знаком Dynamic HTML (сокращенно DHTML). Трудно найти публикацию, посвященную WWW, в которой не шла бы речь о DHTML, но еще труднее найти публикацию, в которой это понятие было бы четко сформулировано. В этом разделе мы попытаемся дать определение Dynamic HTML, приемлемое для практического использования, и проследить этапы его становления.

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

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

Для достижения перечисленных целей используются следующие методы:

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

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

Что же дает DHTML разработчику Веб-узлов? По нашему мнению, основных преимуществ три:

  1. Повышение конкурентоспособности узла. Узел, содержащий динамически изменяемые цвета, анимированную графику, систему выпадающих меню и другие стандартные (для современных ОС, но не для Веба) элементы пользовательского интерфейса, явно привлекательнее для пользователя, чем обычные статические страницы. Разумеется, при этом нужно иметь чувство меры и соблюдать общие принципы дизайна.
  2. Легкость сопровождения. DHTML позволяет нам вынести типовые элементы формирования страниц нашего Веб-узла в отдельные таблицы стилей и сценарии, а затем включать их одинаковым образом во все страницы. Это, безусловно, упрощает сопровождение и минимизирует количество возникающих опечаток и других ошибок.
  3. Уменьшение трафика. Одна из основных особенностей DHTML состоит в том, что он переносит основную тяжесть по формированию Веб-страниц с сервера на клиент. Платой за это является загрузка с сервера сценариев и программных компонентов, которые при правильном проектировании незначительны по объему. В результате динамические страницы загружаются и отображаются намного быстрее статических, что особенно важно для отечественных каналов связи, не страдающих чрезмерно высоким качеством.

WDH+ См. также мою статью WDH+: Влияние DHTML на трафик.

Объективности ради следует остановиться и на тех недостатках DHTML, о которых постоянно говорят сторонники "Веб-страниц, одинаково отображаемых всеми обозревателями"1. По их мнению, Dynamic HTML не оправдывает себя прежде всего потому, что он не стандартизован, и под каждый из популярных Веб-обозревателей нужно писать свою версию HTML-документа. Действительно, DHTML, как и всякая другая новая технология, не оформился пока в четкий стандарт. Тем не менее, усилия по созданию динамических страниц окупаются хотя бы по перечисленных выше причинам. Да и отсутствие стандарта никогда не мешало продвижению перспективных технологий (электроприборы, к примеру, существуют гораздо дольше, чем Интернет, но никого не смущает то, что часть из них рассчитана на 220В, а часть на 127В).

Если присмотреться внимательнее, то противодействие распространению DHTML вызвано совершенно другой причиной. Дело в том, что до сих пор создание Веб-страниц не требовало специальных знаний, кроме знакомства с HTML и умения минимально манипулировать графикой. С появлением DHTML ситуация изменилась в корне: разработка динамической страницы требует программирования на сценарном языке, сопряженного с пониманием работы обозревателя на уровне генерации и обработки событий, владением основами пользовательского интерфейса и т. п. Иными словами, Веб-дизайн востребовал специалистов, что у многих вызывает неприятие. На самом деле, демократическая сущность WWW от этого не пострадала. По-прежнему любой желающий может создать, скажем, свою домашнюю страничку на уровне своих знаний, и DHTML этому не помеха. Другое дело, что профессиональные разработки должны соответствовать по уровню лучшим из наличествующих технологий, но на то они и называются профессиональными.

4.1.2. Краткая история DHTML

Dymanic HTML родился в процессе конкурентной борьбы между Веб-обозревателями корпораций Netscape и Microsoft. Он появился в обозревателе Netscape Navigator 4, где были введены два новых тега LAYER и ILAYER, которые позволяли создавать на Веб-страницы слои с динамически изменяемыми свойствами (положением на странице, стилями отображения и т. п.). В ответ на это Microsoft в Internet Explorer 4 предложили намного более мощную поддержку динамических страниц, которая не использовала нестандартных тегов и опиралась на единый подход к HTML-документу как к дереву объектов с динамически изменяемыми атрибутами и свойствами стилей.

Основное различие между двумя подходами состояло в парадигме самого понятия "динамическая страница". Netscape под этим понимал динамическое формирование Веб-страницы в процессе ее загрузки и последующую косметическую правку в ответ на действия пользователя без существенных изменений содержания страницы. Microsoft с самого начала занял позицию динамического формирования и изменения любых элементов страницы в любой момент ее существования.

Понятно, что такое различие моделей DHTML в основных обозревателях никак не соответствует базовой концепции WWW как платформо-независимой информационной сети. Поэтому W3C был вынужден предпринять усилия по стандартизации Dynamic HTML и начал с разработки спецификации объектной модели документа (DOM), в основу которой была положена модель Microsoft, предложенная W3C в качестве Веб-стандарта. В результате в октябре 1998 г. был принята рекомендация W3C по первому уровню DOM (DOM 1), а в ноябре 2000 г. приняты рекомендации по второму уровню DOM (DOM 2), существенно расширяющему DOM 1.

Тем временем Microsoft выпустил обозреватели Internet Explorer 5 и 5.5, которые существенно расширили возможности DHTML, причем во многом в направлениях, не предусмотренных стандартами W3C. Параллельно шла работа над обозревателем Netscape 6, который был призван вернуть часть рынка, завоеванного Microsoft (летом 2000 г. 86% пользователей WWW использовали Internet Explorer и только 14% — Netscape). С этой целью была создана независимая группа Mozilla.org Внешняя ссылка, которая опубликовала в Сети исходные тексты обозревателя Netscape и собрала группу независимых разработчиков для приведения его в соответствие стандарту. Результатом их работы стало ядро обозревателя Gecko, почти в полной мере соответствующее стандартам HTML 4.0, CSS1 и DOM 1 (поддержка стандартов CSS2 и DOM 2 реализована частично) и одновременно сохранившее некоторую совместимость с моделью Netscape 4. Gecko является основой обозревателя Netscape 6, который после двух с половиной лет обещаний вышел, наконец, в свет в конце 2000 г. Выпущенная версия Netscape 6 пока очень сырая, и в ближайшее время следует ожидать появления ее новых сборок, которые должны будут заменить Netscape 4.

Таким образом, сегодня на рынке присутствуют:

  • обозреватели с ядром MSHTML корпорации Microsoft. Прежде всего это Microsoft Internet Explorer 5.x, динамическая модель которого близка к DOM 1 и DOM 2, но не совпадает с ними. Это обозреватель, который установлен на абсолютном большинстве клиентских компьютеров, подключенных к Вебу, и который предлагает самую богатую на сегодня палитру технологий DHTML.
  • Netscape 4.x (наиболее стабильная версия 4.7), поддерживающий исходную динамическую модель Netscape, которую следует признать на сегодня морально устаревшей.
  • Обозреватели с ядром Gecko (Mozilla/5.0, Netscape 6). Эти обозреватели приведены в соответствие со стандартами W3C, но еще не приобрели товарного вида.

В соответствии со сказанным, наше описание Dynamic HTML построено следующим образом. В этой части мы рассматриваем спецификацию объектной модели документа согласно стандартам W3C и ее реализацию в MSHTML и Gecko. Нестандартные возможности Microsoft DHTML и Gecko DHTML рассматриваются в статьях WDH+ (за исключением объекта window, который пока не стандартизован, и в силу своей важности рассматривается здесь (см. гл. 4.13 и 4.14). Динамическую модель Netscape 4.x мы решили не описывать, как представляющую скорее исторический интерес, чем практический (решающим аргументом здесь послужил тот факт, что сама корпорация Netscape отказалась от поддержки слоев в новом обозревателе).

WDH+ О Gecko-обозревателях см. также: WDH+: Богач, бедняк...

1 Сторонникам этого романтического подхода можно посоветовать только одно: заключайте весь документ в теги PRE — это единственный шанс, что ваша страница будет отображаться более или менее одинаково во всех обозревателях. Что касается политического подтекста подобной позиции (обычно связанного с пресловутым лозунгом «Microsoft must die»), то этот справочник написан не для борцов с монополиями, а для тех, кто хочет создавать качественные продукты, пользуясь для этого всеми доступными средствами.


WDH: DHTML - Объектная модель документа

Глава 4.2. Базовая объектная модель документа

4.2.1. Введение в DOM

При описании каскадных таблиц стилей мы уже ввели рассмотрение HTML-документа как дерева элементов. Приведем еще раз пример, иллюстрирующий этот подход. Пусть наш документ имеет вид:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>Моя домашняя страница</TITLE>
</HEAD>
<BODY>
<H1>Моя домашняя страница</H1>
<P>Добро пожаловать!</P>
</BODY>
</HTML>

Тогда мы можем представить его в виде следующего дерева:

Дерево элементов HTML-документа

Корнем этого дерева является элемент HTML, который имеет двух детей — HEAD и BODY. Элемент HEAD является отцом элемента TITLE, а элемент BODY — отцом элементов H1 и P (два последних элемента называются братьями, причем H1 является старшим братом, а P — младшим). Все элементы дерева являются потомками корня, а тот является их предком. При этом все элементы и тексты, образующие их содержимое, являются узлами дерева документа.

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

Именно такой подход был положен в основу динамической модели HTML обозревателей Microsoft, а затем принят за основу стандартов W3C, получивших название объектная модель документа (Document Object Model или DOM). При этом W3C расширил понятие DOM на любые XML-документы, рассматривая HTML DOM как специализированный частный случай с дополнительными возможностями. Таким образом, DOM — это модель HTML- и XML-документов, независимая от платформы и языка программирования, которая определяет:

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

На сегодняшний день W3C стандартизовал DOM первого и второго уровней (DOM 1 и DOM 2); в стадии рабочего проекта находится DOM 3. Эти аббревиатуры соответственно обозначают следующее:

  • DOM 1 описывает базовое представление XML- и HTML-документов в виде деревьев объектов;
  • DOM 2 расширяет базовые интерфейсы DOM 1 и добавляет к ним поддержку событий и стилей;
  • DOM 3 описывает загрузку и синтаксический анализом документов, а также их отображение и форматирование.

Учитывая текущее состояние вещей, мы рассматриваем здесь только DOM 2 (и содержащуюся в нем DOM 1). DOM 2 состоит из следующих групп взаимосвязанных интерфейсов:

  • Core — базовые интерфейсы, определяющие представление любого XML-документа в виде дерева;
  • View — интерфейсы, описывающие возможные отображения документа;
  • Event — интерфейсы, определяющие порядок генерации и обработки событий;
  • Style — интерфейсы, определяющие применение к документам таблиц стилей;
  • Traversal & Range — интерфейсы, определяющие прохождение дерева документа и манипулирование областями его содержимого;
  • HTML — интерфейсы, определяющие представление HTML-документа в виде дерева.

WDH+ См. также WDH+: Программы просмотра дерева объектов.

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

4.2.2. Основные понятия

DOM 2 Core представляет XML-документы в виде деревьев, состоящих из узлов, которые, в свою очередь, также являются объектами и реализуют более специализированные интерфейсы. Одни типы узлов могут иметь детей, т. е. сами являться поддеревьями, другие являются листьями, т. е. детей не имеют. В следующей таблице сведены все возможные типы узлов абстрактного документа; для каждого типа узлов перечислены те узлы, которые могут быть его детьми. О понятиях, соответствующих перечисленным узлам, см. описание структуры XML-документа.

Таблица 4.1. Структура дерева документа
Интерфейс | Описание | Дети
Document | Документ | Element (не более одного), ProcessingInstruction, Comment, DocumentType (не более одного)
DocumentFragment | Фрагмент документа | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
DocumentType | Тип документа | детей не имеет
EntityReference | Ссылка на раздел | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
Element | Элемент | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
Attr | Атрибут | Text, EntityReference
ProcessingInstruction | Директива XML | детей не имеет
Comment | Комментарий | детей не имеет
Text | Текст | детей не имеет
CDATASection | Секция CDATA | детей не имеет
Entity | Раздел | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
Notation | Нотация | детей не имеет

Кроме того, DOM 2 Core содержит спецификацию интерфейсов NodeList (упорядоченные списки узлов, доступных по номеру в списке) и NamedNodeMap (неупорядоченные списки узлов, доступных по своему имени). Эти объекты являются живыми, т. е. любое изменение документа автоматически влечет изменение всех связанных с ним списков.

Интерфейсы Text, Comment и CDATASection являются потомками интерфейса CharacterData.

Следует подчеркнуть, что DOM 2 Core содержит два набора интерфейсов, каждый из которых обеспечивает полный доступ ко всем элементам документа. Первый набор представляет объектно-ориентированный подход со следующей иерархией наследования: документ — составляющие его элементы — их атрибуты и текстовое содержимое. При таком рассмотрении дерева документа мы говорим о иерархии объектов. Второй подход построен по принципу "все есть узлы (Nodes)". Здесь все составляющие документа рассматриваются как равноправные узлы его дерева, и мы можем говорить только о иерархии узлов. Таким образом, DOM 2 по своей сути является избыточной, но предоставляет нам возможность в зависимости от задачи рассматривать документ тем или иным способом.

Все интерфейсы DOM 2 Core подразделяются на основные (fundamental) и дополнительные (extended). Основными являются интерфейсы DOMException, DOMImplementation, DocumentFragment, Document, Node, NodeList, NamedNodeMap, CharacterData, Attr, Element, Text и Comment. Эти интерфейсы должны поддерживаться всеми реализациями DOM, как для XML-, так и для HTML-документов. Дополнительные интерфейсы ориентированы на XML-документы, поэтому реализации DOM для HTML могут их не поддерживать. К ним относятся CDATASection, DocumentType, Notation, Entity, EntityReference и ProcessingInstruction.

В целях независимости от языка и платформы DOM определяет следующие типы:

DOMString
Текстовая строка, состоящая из символов Unicode в формате UTF-16. В JavaScript и в Java реализуется типом String.
DOMTimeStamp
Дата и время в приемлемом для конкретного языка формате. Например, в JavaScript это будет объект Date, а в Java — целое число типа long, содержащее количество миллисекунд.

Ниже приведено краткое описание всех интерфейсов DOM с указанием уровня модели (DOM 1 или DOM 2), в которой определено то или иное свойство интерфейса. Спецификации W3C написаны на платформо-независимом языке IDL. Мы же приводим их в соответствии с синтаксисом JavaScript, который на сегодня является основным сценарным языком.

Вместе с описание стандарта мы приводим краткое описание его реализации в объектных моделях Microsoft и Gecko. При этом следует учитывать, что реализации Microsoft для XML и HTML совершенно независимы (они реализуются соответственно программными компонентами XMLDOM и MSHTML), тогда как в Gecko объектная модель одинакова для HTML- и XML-документов. Основное внимание в последующем изложении уделено DOM для HTML; XML DOM подробно будет рассмотрена в Части VIII.

4.2.3. Исключения: интерфейс DOMException

Объект DOMException является прототипом всех исключительных ситуаций, которые могут возникнуть в процессе обработки документа. Он имеет единственное свойство code типа Number, которое содержит номер исключения согласно следующей таблицы:

Таблица 4.2. Стандартные исключения DOM
Название | Значение | Описание | Модель
INDEX_SIZE_ERR | 1 | Выход индекса за пределы допустимого диапазона. | DOM 1
DOMSTRING_SIZE_ERR | 2 | Заданный текст не может быть приведен к типу DOMString. | DOM 1
HIERARCHY_REQUEST_ERR | 3 | Попытка вставить узел в ненадлежащее место дерева. | DOM 1
WRONG_DOCUMENT_ERR | 4 | Недопустимый тип документа. | DOM 1
INVALID_CHARACTER_ERR | 5 | Встречен недопустимый символ. | DOM 1
NO_DATA_ALLOWED_ERR | 6 | Узел не содержит данных. | DOM 1
NO_MODIFICATION_ALLOWED_ERR | 7 | Попытка недопустимой модификации объекта. | DOM 1
NOT_FOUND_ERR | 8 | Обращение к несуществующему узлу. | DOM 1
NOT_SUPPORTED_ERR | 9 | Параметр или операция не реализованы. | DOM 1
INUSE_ATTRIBUTE_ERR | 10 | Попытка добавления атрибута, который уже существует. | DOM 1
INVALID_STATE_ERR | 11 | Обращение к несуществующему объекту. | DOM 1
SYNTAX_ERR | 12 | Синтаксическая ошибка. | DOM 2
INVALID_MODIFICATION_ERR | 13 | Попытка изменения типа объекта. | DOM 2
NAMESPACE_ERR | 14 | Попытка создания или изменения объекта, не соответствующая пространству имен XML. | DOM 2
INVALID_ACCESS_ERR | 15 | Параметр или операция не поддерживаются объектом. | DOM 2
Поддержка:    Internet Explorer  Нестандартная реализация.
              Gecko  Поддерживается часть кодов ошибок.

4.2.4. Описание реализации: интерфейс DOMImplementation

Поддержка:   Internet Explorer  Только для XML-документов (XMLDOMImplementation).
             Gecko  Соответствует DOM 1.

Интерфейс DOMImplementation содержит методы, выполнение которых не зависит от конкретной объектной модели документа. Он доступен через свойство implementation объекта Document.

Методы интерфейса DOMImplementation
Метод | Модель | Описание
createCSSStyleSheet | DOM 2 | Создает новый объект CSSStyleSheet.
createDocument | DOM 2 | Создает объект Document для данного XML-документа.
createDocumentType | DOM 2 | Создает пустой узел DocumentType.
hasFeature | DOM 1 | Проверяет наличие заданного свойства у реализации.

Метод createCSSStyleSheet

Синтаксис:  объект.createCSSStyleSheet(title, media)
Аргументы:  title, media — выражения типа DOMString
Результат:  новый объект CSSStyleSheet
Исключения: SYNTAX_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод createCSSStyleSheet создает новый объект CSSStyleSheet и возвращает указатель на него. Этот метод должен поддерживаться только теми реализациями DOM, которые поддерживают CSS. Объект создается вне контекста документа; DOM 2 не позволяет поключить вновь созданную таблицу стилей к документу. Аргумент title задает титул таблицы стилей, а media — список устройств отображения через запятую.

Метод createDocument

Синтаксис:  объект.createDocument(namespaceURI, qualifiedName, doctype)
Аргументы:  namespaceURI, qualifiedName — выражения типа DOMString
            doctype — выражение типа DocumentType
Результат:  новый объект Document
Исключения: INVALID_CHARACTER_ERR, NAMESPACE_ERR, WRONG_DOCUMENT_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод createDocument создает новый объект Document и возвращает указатель на него. Он предназначен для создания XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен корневого элемента документа, qualifiedName — его ограниченное имя, а doctype — тип создаваемого документа (может иметь значение null).

Метод createDocumentType

Синтаксис:  объект.createDocumentType(qualifiedName, publicId, systemId)
Аргументы:  qualifiedName, publicId, systemId — выражения типа DOMString
Результат:  новый узел DocumentType
Исключения: INVALID_CHARACTER_ERR, NAMESPACE_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод createDocumentType создает пустой узел типа DocumentType и возвращает указатель на него. Он предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент qualifiedName задает ограниченное имя создаваемого типа документа, publicId — публичный идентификатор внешнего раздела, а systemId — системный идентификатор внешнего раздела.

Метод hasFeature

Синтаксис:  объект.hasFeature(feature, version)
Аргументы:  feature, version — выражения типа DOMString
Результат:  логическое значение
Исключения: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод hasFeature возвращает true, если реализация DOM поддерживает указанное свойство, и false в противном случае. Имя свойства (в любом регистре) задается аргументом feature; оно должно соответствовать правилам образования имен XML. Аргумент version задает имя версии проверяемого свойства. Если он не задан, то возвращается true, если поддерживается хотя бы какая-то версия данного свойства.

DOM 2 рекомендует, чтобы реализации DOM возвращали true, если version равно "2.0", а feature принимает следующие значения:

Поддерживаются | feature
Базовые интерфейсы | "Core"
XML-документы | "XML"
HTML-документы | "HTML"
Таблицы стилей | "StyleSheets"
Модуль CSS | "CSS"
Модуль CSS2 | "CSS2"
Обработка событий | "Events"
События пользовательского интерфейса | "UIEvents"
События, генерируемые мышью | "MouseEvents"
События, генерируемые изменением содержимого | "MutationEvents"
События HTML | "HTMLEvents"
Модуль Views | "Views"
Модуль Range | "Range"
Модуль Traversal | "Traversal"

В Gecko значениями feature могут быть строки "XML" и "HTML", а значением version — строки "1.0" и "2.0". Пример:

alert(document.implementation.hasFeature("HTML", "1.0"));
alert(document.implementation.hasFeature("HTML", "2.0"));
alert(document.implementation.hasFeature("HTML", "3.0"));

Первые два оператора alert выведут строку true, а третий false.

В Microsoft XMLDOM значениями feature могут быть строки "XML", "DOM" и "MS-DOM", а значением version — строка "1.0". Пример:

var objDoc = new ActiveXObject("Microsoft.XMLDOM");
alert(objDoc.implementation.hasFeature("XML", "1.0"));
alert(objDoc.implementation.hasFeature("XML", "2.0"));

Первый оператор alert выведет строку true, а второй false.

4.2.5. Фрагмент документа: интерфейс DocumentFragment

Поддержка:   Internet Explorer  Только для XML-документов (XMLDOMDocumentFragment).
             Gecko  Соответствует DOM 1.

Интерфейс DocumentFragment является потомком интерфейса Node и наследует все его свойства и методы. Как и вытекает из его названия, он предназначен для операций с фрагментами документов (извлечение части дерева документа, создание нового фрагмента документа, вставка фрагмента в качестве сына какого-либо узла и т. п.). Отметим, что при вставке объекта типа DocumentFragment в узел Node, способный иметь детей, вставляются все дети этого объекта, но не сам объект. Примеры см. в описании интерфейса Node.

4.2.6. Документ: интерфейс Document

Поддержка:   Internet Explorer  Поддерживается для XML-документов (XMLDOMDocument);
              для HTML-документов поддерживается частично.
             Gecko  DOM 1 полностью, DOM 2 частично.

Интерфейс Document соответствует XML- или HTML-документу. Он является основой для доступа к содержанию документа и для создания его составляющих.

Свойства интерфейса Document
Свойство | Изменяемое | Модель | Описание
doctype | Нет | DOM 1 | Тип документа.
documentElement | Нет | DOM 1 | Корневой элемент документа.
implementation | Нет | DOM 1 | Реализация DOM.
styleSheets | Нет | DOM 2 | Список таблиц стилей документа.
Методы интерфейса Document
Свойство | Модель | Описание
createAttribute | DOM 1 | Создает атрибут.
createAttributeNS | DOM 2 | Создает атрибут с учетом пространства имен.
createCDATASection | DOM 1 | Создает секцию CDATA.
createComment | DOM 1 | Создает комментарий.
createDocumentFragment | DOM 1 | Создает новый фрагмент документа.
createElement | DOM 1 | Создает новый элемент.
createElementNS | DOM 2 | Создает элемент с с учетом пространства имен.
createEntityReference | DOM 1 | Создает ссылку на раздел.
createEvent | DOM 2 | Создает новый объект Event.
createProcessingInstruction | DOM 1 | Создает директиву.
createTextNode | DOM 1 | Создает новый текстовый узел.
getElementById | DOM 2 | Возвращает элемент с заданным идентификатором.
getElementsByTagName | DOM 1 | Возвращает коллекцию всех элементов, имеющих данный тег.
getElementsByTagNameNS | DOM 2 | Возвращает коллекцию всех элементов, имеющих данный тег с учетом пространства имен.
importNode | DOM 2 | Импортирует узел из другого документа.

Свойство doctype

Синтаксис:  документ.doctype
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство doctype возвращает тип данного документа (типа DocumentType). Для HTML-документов и для XML-документов, не имеющих декларации типа документа, возвращается null.

Свойство documentElement

Синтаксис:  документ.documentElement
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство documentElement возвращает корневой элемент данного документа (типа Element). Для HTML-документов возвращается элемент HTML. Пример: оператор

alert(document.documentElement.tagName);

выведет на экран строку HTML.

Свойство implementation

Синтаксис:  документ.implementation
Изменяемое: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует DOM 1.

Свойство implementation возвращает объект типа DOMImplementation, описывающий данную реализацию DOM.

Свойство styleSheets

Синтаксис:  документ.styleSheets
Изменяемое: нет
Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Свойство styleSheets возвращает объект типа StyleSheetList, соответствующий списку внешних и внутренних таблиц стилей документа. Это свойство поддерживается только теми реализациями DOM, которые поддерживают динамические таблицы стилей.

Метод createAttribute

Синтаксис:  документ.createAttribute(name)
Аргументы:  name — выражение типа DOMString
Результат:  новый объект Attr
Исключения: INVALID_CHARACTER_ERR
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод createAttribute создает новый объект типа Attr и возвращает указатель на него. Аргумент name задает имя создаваемого атрибута. У нового объекта атрибут nodeName имеет значение name, а атрибуты localName, prefix и namespaceURI равны null. В дальнейшем созданный атрибут может быть присвоен какому-либо элементу методом Element.setAttributeNode.

Пример создания атрибута для элемента HTML:

var myDiv = document.getElementById('idDiv');
var attr = document.createAttribute('temp');
attr.value = 'temporary';
myDiv.setAttributeNode(attr);
alert(myDiv.getAttribute('temp'));

Оператор alert выведет строку temporary.

Пример создания атрибута в Microsoft XMLDOM:

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.load("c:\My Documents\books.xml");
var root = xmlDoc.documentElement;
var newAttr = xmlDoc.createAttribute("temp");
newAttr.value = 'temporary';
root.setAttributeNode(attr);
alert(root.getAttribute('temp'));

Здесь оператор alert также выведет строку temporary.

Метод createAttributeNS

Синтаксис:  документ.createAttributeNS(namespaceURI, qualifiedName)
Аргументы:  namespaceURI, qualifiedName — выражения типа DOMString
Результат:  новый объект Attr
Исключения: INVALID_CHARACTER_ERR, NAMESPACE_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод createAttributeNS создает новый объект типа Attr и возвращает указатель на него. Он предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а qualifiedName — ограниченное имя создаваемого атрибута в этом пространстве имен. Созданный объект типа Attr имеет следующие атрибуты:

Атрибут | Значение
nodeName | ограниченное имя
namespaceURI | URI пространства имен
prefix | префикс, извлеченный из ограниченного имени, или null, если ограниченное имя не содержит префикса
localName | локальное имя, извлеченное из ограниченного имени
name | ограниченное имя
nodeValue | пустая строка

В дальнейшем созданный атрибут может быть присвоен какому-либо элементу методом Element.setAttributeNode.

Метод createCDATASection

Синтаксис:  документ.createCDATASection(data)
Аргументы:  data — выражение типа DOMString
Результат:  новый объект CDATASection
Исключения: NOT_SUPPORTED_ERR
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод createCDATASection создает новый объект типа CDATASection и возвращает указатель на него. Он предназначен только для XML-документов; попытка вызвать его в HTML DOM генерирует исключение NOT_SUPPORTED_ERR. Аргумент data задает содержимое создаваемой секции CDATA. Пример создания секции CDATA в Microsoft XMLDOM:

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.load("c:\My Documents\books.xml");
var root = xmlDoc.documentElement;
var newSection = xmlDoc.createCDATASection("Hello World!");
root.appendChild(newSection);

Метод createComment

Синтаксис:  документ.createComment(data)
Аргументы:  data — выражение типа DOMString
Результат:  новый объект Comment
Исключения: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод createComment создает новый объект типа Comment и возвращает указатель на него. Аргумент data задает содержимое создаваемого комментария. Пример создания комментария в Gecko:

var root = document.documentElement.firstChild;
var comm = document.createComment('Это комментарий.');
root.appendChild(comm);

Метод createDocumentFragment

Синтаксис:  документ.createDocumentFragment()
Результат:  новый объект DocumentFragment
Исключения: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод createDocumentFragment создает новый пустой объект типа DocumentFragment и возвращает указатель на него. Пример создания фрагмента документа в Gecko:

var elem = document.documentElement.firstChild;
var o = document.createDocumentFragment();
elem.appendChild(o);

Метод createElement

Синтаксис:  документ.createElement(tagName)
Аргументы:  tagName — выражение типа DOMString
Результат:  новый объект Element
Исключения: INVALID_CHARACTER_ERR
Поддержка:   Internet Explorer  Соответствует стандарту (см. прим. 2).
             Gecko  Соответствует стандарту.

Метод createElement создает новый объект типа Element и возвращает указатель на него. Аргумент tagName задает тег создаваемого элемента. У нового объекта атрибут nodeName имеет значение tagName, а атрибуты localName, prefix и namespaceURI равны null. Если объект имеет атрибуты со значениями по умолчанию, то автоматически создаются соответствующие узлы Attr и присоединяются к элементу.

Примечания:

  1. Для XML названия тегов элементов чувствительны к регистру. Для HTML они могут быть заданы в любом регистре, но при создании элемента преобразуются в прописные буквы.
  2. Попытка создания в Internet Explorer элемента FRAME или IFRAME приводит либо к неустранимой ошибке обозревателя, либо, как минимум, к полному разрушению объектного дерева документа.

Пример создания элемента P и включения его в документ:

var text = document.createTextNode("Пример абзаца.");
var elem = document.createElement("P");
elem.appendChild(text);
document.body.appendChild(elem);

Метод createElementNS

Синтаксис:  документ.createElementNS(namespaceURI, qualifiedName)
Аргументы:  namespaceURI, qualifiedName — выражения типа DOMString
Результат:  новый объект Element
Исключения: INVALID_CHARACTER_ERR, NAMESPACE_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод createElementNS создает новый объект типа Element и возвращает указатель на него. Он предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а qualifiedName — ограниченное имя создаваемого элемента в этом пространстве имен. Созданный объект типа Element имеет следующие атрибуты:

Атрибут | Значение
nodeName | ограниченное имя
namespaceURI | URI пространства имен
prefix | префикс, извлеченный из ограниченного имени, или null, если ограниченное имя не содержит префикса
localName | локальное имя, извлеченное из ограниченного имени
tagName | ограниченное имя

Метод createEntityReference

Синтаксис:  документ.createEntityReference(name)
Аргументы:  name — выражение типа DOMString
Результат:  новый объект EntityReference
Исключения: INVALID_CHARACTER_ERR, NOT_SUPPORTED_ERR
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод createEntityReference создает новый объект типа EntityReference и возвращает указатель на него. Он предназначен только для XML-документов; попытка вызвать его в HTML DOM генерирует исключение NOT_SUPPORTED_ERR. Аргумент name задает имя раздела, на который должна быть создана ссылка. Пример создания ссылки на раздел в Microsoft XMLDOM:

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.load("c:\My Documents\books.xml");
var root = xmlDoc.documentElement;
var myEntity = xmlDoc.createEntityReference("newRef");
root.childNodes.item(0).appendChild(myEntity);

Метод createEvent

Синтаксис:  документ.createEvent(type)
Аргументы:  type — выражение типа DOMString
Результат:  новый объект Event
Исключения: NOT_SUPPORTED_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод createEvent создает новый объект Event и возвращает указатель на него. Этот метод должен поддерживаться только теми реализациями DOM, которые поддерживают события. Аргумент type задает тип создаваемого события:

  • "UIEvents" — события пользовательского интерфейса;
  • "MouseEvents" — события мыши;
  • "KeyEvents" — события клавиатуры;
  • "MutationEvents" — события изменения документа;
  • "HTMLEvents" — события HTML.

Метод createProcessingInstruction

Синтаксис:  документ.createProcessingInstruction(target, data)
Аргументы:  target, data — выражения типа DOMString
Результат:  новый объект ProcessingInstruction
Исключения: INVALID_CHARACTER_ERR, NOT_SUPPORTED_ERR
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод createProcessingInstruction создает новый объект типа ProcessingInstruction и возвращает указатель на него. Он предназначен только для XML-документов; попытка вызвать его в HTML DOM генерирует исключение NOT_SUPPORTED_ERR. Аргумент target задает имя создаваемой директивы, а аргумент data — ее содержимое, т. е. все что следует в директиве после ее имени до закрывающего тега "?>". Пример создания директивы <?xml version="1.0"?> в Microsoft XMLDOM:

var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.load("c:\My Documents\books.xml");
var root = xmlDoc.documentElement;
var pi = xmlDoc.createProcessingInstruction("xml", ' version="1.0"');
xmlDoc.insertBefore(pi, xmlDoc.childNodes.item(0));

Метод createTextNode

Синтаксис:  документ.createTextNode(data)
Аргументы:  data — выражение типа DOMString
Результат:  новый объект Text
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод createTextNode создает новый объект типа Text и возвращает указатель на него. Аргумент data задает текст, который присваивается атрибуту nodeValue объекта. Пример:

var text = document.createTextNode("Пример абзаца.");
var elem = document.createElement("P");
elem.appendChild(text);
document.body.appendChild(elem);

Метод getElementById

Синтаксис:  документ.getElementById(elementId)
Аргументы:  elementId — выражение типа DOMString
Результат:  объект Element или null
Исключения: нет
Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Метод getElementById возвращает указатель на объект Element, имеющий заданный идентификатор elementId. Если такого объекта нет, то возвращается null; если же таких элементов несколько, то возвращается первый из них. Следующий пример

<P id="id1">Абзац 1</P>
<P id="id1">Абзац 2</P>
<SCRIPT>
var o = document.getElementById("id1");
alert(o.firstChild.nodeValue);
</SCRIPT>
...

выведет на экран текст Абзац 1.

Примечание. В HTML идентификатором элемента является значение его атрибута id. В XML такого атрибута нет, поэтому данный метод имеет смысл только применительно к тем элементам, у которых в DTD определен атрибут-идентификатор. Для остальных элементов этот метод должен возвращать null.

Метод getElementsByTagName

Синтаксис:  документ.getElementsByTagName(tagname)
Аргументы:  tagname — выражение типа DOMString
Результат:  объект NodeList
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту (см. прим.).
             Gecko  Соответствует стандарту.

Метод getElementsByTagName создает новый объект NodeList, состоящий из всех объектов Element, имеющих заданное имя и возвращает указатель на него. Аргумент tagname задает искомый тег; если он равен "*", то возвращается список всех элементов документа.

Примечание. Internet Explorer не поддерживает специальное имя "*". В нем вместо document.getElementsByTagName("*") следует использовать нестандартное свойство document.all.

Следующий пример выводит на экран количество графических образов в документе, а затем URI первого образа:

var imgList = document.getElementsByTagName("IMG");
alert(imgList.length);
alert(imgList[0].src);

Метод getElementsByTagNameNS

Синтаксис:  документ.getElementsByTagNameNS(namespaceURI, localName)
Аргументы:  namespaceURI, localName — выражения типа DOMString
Результат:  объект NodeList
Исключения: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод getElementsByTagNameNS создает новый объект NodeList, состоящий из всех объектов Element, имеющих заданное имя и возвращает указатель на него. Он предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а localName — локальное имя искомого тега в этом пространстве имен; если он равен "*", то возвращается список всех элементов документа, относящихся к данному словарю.

Метод importNode

Синтаксис:  документ.importNode(node, deep)
Аргументы:  node — выражение типа Node
            deep — логическое выражение
Результат:  объект Node
Исключения: NOT_SUPPORTED_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод importNode импортирует копию узла Node из другого документа в данный. При этом создается копия исходного узла, как описано ниже; исходный узел не изменяется. Метод возвращает указатель на созданный объект Node. Если аргумент deep равен true, то производится импорт поддерева исходного документа, начиная с данного узла; в противном случае импортируется только сам узел.

Возвращаемый узел не имеет предка (его атрибут parentNode равен null). Значения атрибутов nodeName, nodeType, prefix, localName и namespaceURI копируются из исходного узла. Дополнительная информация, копируемая в новый узел, зависит от типа узла (см. Таблицу 4.3):

Тип узла | Поведение
ATTRIBUTE_NODE | Атрибут ownerElement равен null, specified равен true. Все потомки исходного узла рекурсивно копируются в новый узел Attr, независимо от значения deep.
DOCUMENT_FRAGMENT_NODE | Если deep равен true, то производится импорт заданного фрагмента документа; в противном случае создается пустой узел DocumentFragment.
DOCUMENT_NODE, DOCUMENT_TYPE_NODE | Не могут быть импортированы.
ELEMENT_NODE | В новый узел Element копируются все атрибуты исходного узла, кроме заданных по умолчанию в исходном документе. Затем создаются атрибуты по умолчанию, принятые в данном документе для элементов с этим именем. Если deep равен true, то производится импорт всего поддерева исходного элемента.
ENTITY_NODE | Узлы Entity могут быть импортированы, но в DOM 2 объект DocumentType доступен только для чтения, поэтому импорт таких узлов не имеет смысла.
ENTITY_REFERENCE_NODE | Копируется только сам узел EntityReference, независимо от значения deep. Если в нашем документе есть определение раздела с данным именем, то оно заносится в новый узел.
NOTATION_NODE | Узлы Notation могут быть импортированы, но в DOM 2 объект DocumentType доступен только для чтения, поэтому импорт таких узлов не имеет смысла.
PROCESSING_INSTRUCTION_NODE | Копируются значения атрибутов target и data исходного узла.
TEXT_NODE, CDATA_SECTION_NODE, COMMENT_NODE | Копируются значения атрибутов data и length исходного узла.


WDH: DHTML - Узлы дерева документа

Глава 4.3. Узлы дерева документа

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

4.3.1. Абстрактный узел: интерфейс Node

Поддержка:   Internet Explorer  Поддерживается для XML-документов (XMLDOMNode);
              для HTML-документов поддерживается частично.
             Gecko  DOM 1 полностью, DOM 2 частично.

Интерфейс Node соответствует абстрактному узлу дерева XML- или HTML-документа. Все конкретные составляющие документа реализуются интерфейсами, которые являются его потомками. Тип узла задается значением его свойства nodeType в соответствии со следующей таблицей:

Таблица 4.3. Типы узлов DOM
Название | Значение | Интерфейс | Описание
ELEMENT_NODE | 1 | Element | Элемент
ATTRIBUTE_NODE | 2 | Attr | Атрибут
TEXT_NODE | 3 | Text | Текст
CDATA_SECTION_NODE | 4 | CDATASection | Секция CDATA
ENTITY_REFERENCE_NODE | 5 | EntityReference | Ссылка на раздел
ENTITY_NODE | 6 | Entity | Раздел документа
PROCESSING_INSTRUCTION_NODE | 7 | ProcessingInstruction | Директива
COMMENT_NODE | 8 | Comment | Комментарий
DOCUMENT_NODE | 9 | Document | Документ
DOCUMENT_TYPE_NODE | 10 | DocumentType | Тип документа
DOCUMENT_FRAGMENT_NODE | 11 | DocumentFragment | Фрагмент документа
NOTATION_NODE | 12 | Notation | Нотация

Значения свойств узла nodeName, nodeValue и attributes меняются в зависимости от его типа:

Таблица 4.4. Свойства узлов DOM
Интерфейс | nodeName | nodeValue | attributes
Attr | Имя атрибута | Значение атрибута | null
CDATASection | #cdata-section | Содержимое секции CDATA | null
Document | #document | null | null
DocumentFragment | #document-fragment | null | null
DocumentType | Имя типа документа | null | null
Element | Тег элемента | null | NamedNodeMap
Entity | Имя раздела | null | null
EntityReference | Имя раздела | null | null
Notation | Имя нотации | null | null
ProcessingInstruction | Имя директивы | Содержимое директивы | null
Text | #text | Содержимое текстового узла | null

Примечание. Internet Explorer поддерживает только узлы типа Element, Attr и Text. Для остальных типов узлов перечисленные в таблице свойства не определены.

Свойства интерфейса Node
Свойство | Изменяемое | Модель | Описание
attributes | Нет | DOM 1 | Атрибуты узла.
childNodes | Нет | DOM 1 | Список детей.
firstChild | Нет | DOM 1 | Первый ребенок.
lastChild | Нет | DOM 1 | Последний ребенок.
localName | Нет | DOM 2 | Локальное имя в пространстве имен.
namespaceURI | Нет | DOM 2 | URI пространства имен.
nextSibling | Нет | DOM 1 | Следующий узел дерева.
nodeName | Нет | DOM 1 | Имя узла.
nodeType | Нет | DOM 1 | Тип узла.
nodeValue | Да | DOM 1 | Значение узла.
ownerDocument | Нет | DOM 1 | Документ — владелец узла.
parentNode | Нет | DOM 1 | Отец данного узла.
prefix | Да | DOM 2 | Префикс пространства имен.
previousSibling | Нет | DOM 1 | Предыдущий узел дерева.
Методы интерфейса Node
Свойство | Модель | Описание
appendChild | DOM 1 | Добавляет сына в конец списка детей.
cloneNode | DOM 1 | Создает копию данного узла.
hasAttrbutes | DOM 2 | Проверяет наличие у узла атрибутов.
hasChildNodes | DOM 1 | Проверяет наличие у узла детей.
insertBefore | DOM 1 | Вставляет новый узел перед заданным сыном.
isSupported | DOM 2 | Проверяет свойство реализации DOM.
normalize | DOM 1 | Нормализует текстовое содержимое узла.
removeChild | DOM 1 | Удаляет заданного сына.
replaceChild | DOM 1 | Заменяет заданного сына новым узлом.

Свойство attributes

Синтаксис:  узел.attributes
Изменяемое: нет
Поддержка:   Internet Explorer  Для XML-документов соответствует стандарту;
              для HTML-документов частично (см. прим.).
             Gecko  Соответствует стандарту.

Свойство attributes возвращает объект типа NamedNodeMap, содержащий список всех атрибутов данного узла, если узел имеет тип Element, и null в противном случае.

Примечание. В Internet Explorer это свойство реализовано нестандартно:

  1. Список атрибутов элемента является статическим, а не живым, т. е. изменение атрибутов элемента не влечет его автоматического обновления.
  2. Этот список не содержит атрибута style (для доступа к нему используется нестандартное свойство узел.style.cssText) и expando-атрибутов.

Следующий пример

<BODY bgcolor="yellow" text="green">
<SCRIPT>
var body = document.getElementsByTagName("BODY")[0];
var attrs = body.attributes;
for (var i = 0; i < attrs.length; i++) {
  if (attrs[i].nodeValue)
    document.write(attrs[i].nodeName, "=", attrs[i].nodeValue, " ");
}
</SCRIPT>
</BODY>

выведет в Gecko текст: bgcolor=yellow text=green,
а в Internet Explorer: contentEditable=inherit text=1140883456 bgColor=-1694433281.

Свойство childNodes

Синтаксис:  узел.childNodes
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство childNodes возвращает объект типа NodeList, содержащий список всех детей данного узла. Если узел не имеет детей, то возвращается список нулевой длины. Следующий пример

<BODY>
<SCRIPT>
var body = document.getElementsByTagName("BODY")[0];
var list = body.childNodes;
for (var i = 0; i < list.length; i++) {
    document.write(list[i].nodeName, " ");
}
</SCRIPT>
</BODY>

выведет в Gecko текст: #text SCRIPT, а в Internet Explorer: SCRIPT #text. Как мы видим, порядок элементов в списке может быть любым; гарантируется только, что в нем присутствуют все дети данного узла.

Свойство firstChild

Синтаксис:  узел.firstChild
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство firstChild возвращает указатель на первый узел, являющийся сыном данного узла. Если узел не имеет детей, то возвращается null. Это свойство эквивалентно выражению узел.childNodes[0].

Свойство lastChild

Синтаксис:  узел.lastChild
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство lastChild возвращает указатель на последний узел, являющийся сыном данного узла. Если узел не имеет детей, то возвращается null. Это свойство эквивалентно выражению узел.childNodes[узел.childNodes.length-1].

Свойство localName

Синтаксис:  узел.localName
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство localName возвращает строку, содержащую локальную часть ограниченного имени узла. Оно имеет смысл только для узлов типа Element и Attr, созданных соответственно методами CreateElementNS и CreateAttributeNS. В остальных случаях возвращается null.

Свойство namespaceURI

Синтаксис:  узел.namespaceURI
Изменяемое: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Не поддерживается.

Свойство namespaceURI возвращает строку, содержащую URI пространства имен данного узла. Оно имеет смысл только для узлов типа Element и Attr, созданных соответственно методами CreateElementNS и CreateAttributeNS. В остальных случаях возвращается null.

Свойство nextSibling

Синтаксис:  узел.nextSibling
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство nextSibling возвращает указатель на узел, непосредственно следующий в документе за данным узлом. Если такого узла нет, то возвращается null.

Свойство nodeName

Синтаксис:  узел.nodeName
Изменяемое: нет
Поддержка:   Internet Explorer  Для XML-документов соответствует стандарту;
              для HTML-документов частично (см. прим. к Таблице 4.4).
             Gecko  Соответствует стандарту.

Свойство nodeName возвращает строку, содержащую имя данного узла согласно Таблицы 4.4. Пример: оператор alert(document.nodeName) выведет в Gecko строку #document (в Internet Explorer имя узла Document не определено).

Свойство nodeType

Синтаксис:  узел.nodeType
Изменяемое: нет
Поддержка:   Internet Explorer  Для XML-документов соответствует стандарту;
              для HTML-документов частично (см. прим.).
             Gecko  Соответствует стандарту.

Свойство nodeType возвращает тип данного узла согласно Таблицы 4.3.

Примечание. В Internet Explorer это свойство реализовано для узлов Element и Text. Для остальных типов узлов оно не определено.

Пример: оператор alert(document.nodeName) выведет в Gecko строку 9.

Свойство nodeValue

Синтаксис:  узел.nodeValue
Изменяемое: да
Исключения: NO_MODIFICATION_ALLOWED_ERR (при записи), DOMSTRING_SIZE_ERR (при чтении)
Поддержка:   Internet Explorer  Cоответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство nodeValue обеспечивает доступ к значению данного узла. Значение узла зависит от его типа (см. Таблицу 4.4). Если значением узла может быть только null, то попытка изменить его значение игнорируется. Пример:

var text = document.createTextNode("");
text.nodeValue = "Пример абзаца.";
var elem = document.createElement("P");
elem.appendChild(text);
document.body.appendChild(elem);

Свойство ownerDocument

Синтаксис:  узел.ownerDocument
Изменяемое: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Свойство ownerDocument возвращает указатель на объект Document, к которому принадлежит данный узел. Для узлов типа Document и DocumentType, которые еще не связаны с конкретным документом, возвращается null. Пример:

var elem = document.createElement("P");
document.body.appendChild(elem);
alert(elem.ownerDocument.documentElement.nodeName);

Свойство parentNode

Синтаксис:  узел.parentNode
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство parentNode возвращает указатель на узел, являющийся отцом данного узла. Если узел не имеет отца, то возвращается null.

Свойство prefix

Синтаксис:  узел.prefix
Изменяемое: да
Исключения: INVALID_CHARACTER_ERR, NO_MODIFICATION_ALLOWED_ERR, NAMESPACE_ERR
Поддержка:   Internet Explorer  Только для XML-документов; неизменяемое.
             Gecko  Не поддерживается.

Свойство prefix возвращает строку, содержащую префикс пространства имен данного узла. Оно имеет смысл только для узлов типа Element и Attr, созданных соответственно методами CreateElementNS и CreateAttributeNS. В остальных случаях возвращается null.

При записи этого свойства автоматически изменяются свойство узла nodeName, содержащее ограниченное имя узла, а также свойства tagName (если это Element) и name (если это Attr).

Свойство previousSibling

Синтаксис:  узел.previousSibling
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство previousSibling возвращает указатель на узел, непосредственно предшествующий в документе данному узлу. Если такого узла нет, то возвращается null.

Метод appendChild

Синтаксис:  узел.appendChild(newChild)
Аргументы:  newChild — выражение типа Node
Результат:  узел Node
Исключения: HIERARCHY_REQUEST_ERR, WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод appendChild добавляет узел newChild в конец списка детей данного узла и возвращает его в качестве результата. Если узел newChild уже был в списке, то он сначала удаляется, а затем добавляется. Пример: сценарий

var elem = document.createElement("IMG");
document.body.appendChild(elem);
alert(document.body.lastChild.tagName);

выведет на экран текст IMG.

Метод cloneNode

Синтаксис:  узел.cloneNode(deep)
Аргументы:  deep — логическое выражение
Результат:  новый узел Node
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод cloneNode создает копию данного узла и возвращает ее. Если аргумент deep равен true, то создается копия поддерева документа, начиная с данного узла; если он равен false, то копируется только сам узел (и его атрибуты, если это Element).

Метод hasAttributes

Синтаксис:  узел.hasAttributes()
Результат:  логическое значение
Исключения: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод hasAttributes возвращает true, если узел является элементом и имеет хотя бы один атрибут. В остальных случаях возвращается false. Вызов этого метода эквивалентен выражению (узел.attributes.length != 0).

Метод hasChildNodes

Синтаксис:  узел.hasChildNodes()
Результат:  логическое значение
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод hasChildNodes возвращает true, если узел имеет хотя бы одного ребенка; в противном случае возвращается false. Вызов этого метода эквивалентен выражению (узел.childNodes.length != 0).

Метод insertBefore

Синтаксис:  узел.insertBefore(newChild, refChild)
Аргументы:  newChild, refChild — выражения типа Node
Результат:  узел Node
Исключения: HIERARCHY_REQUEST_ERR, WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR,
            NOT_FOUND_ERR
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод insertBefore вставляет узел newChild в список детей данного узла перед узлом refChild и возвращает его в качестве результата. Если узел newChild уже был в списке, то он сначала удаляется, а затем добавляется. Пример: сценарий

var elem = document.createElement("IMG");
document.body.insertBefore(elem, document.body.firstChild);
alert(document.body.firstChild.tagName);

выведет на экран текст IMG.

Метод isSupported

Синтаксис:  объект.isSupported(feature, version)
Аргументы:  feature, version — выражения типа DOMString
Результат:  логическое значение
Исключения: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод isSupported возвращает true, если реализация DOM поддерживает указанное свойство, и false в противном случае. Имя свойства (в любом регистре) задается аргументом feature; оно должно соответствовать правилам образования имен XML. Аргумент version задает имя версии проверяемого свойства. Если он не задан, то возвращается true, если поддерживается хотя бы какая-то версия данного свойства. Ср. метод DOMImplementation.hasFeature.

В Gecko значениями feature могут быть строки "XML" и "HTML", а значением version — строки "1.0" и "2.0". Пример:

alert(document.body.isSupported("HTML", "1.0"));
alert(document.body.isSupported("HTML", "2.0"));
alert(document.body.isSupported("HTML", "3.0"));

Первые два оператора alert выведут строку true, а третий false.

Метод normalize

Синтаксис:  узел.normalize()
Исключения: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

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

var pars = document.getElementsByTagName("P");
for (var i = 0; i < pars.length; i++)
  pars[i].normalize();

Метод removeChild

Синтаксис:  узел.removeChild(oldChild)
Аргументы:  oldChild — выражение типа Node
Результат:  узел Node
Исключения: NO_MODIFICATION_ALLOWED_ERR, NOT_FOUND_ERR
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод removeChild удаляет узел oldChild из списка детей данного узла и возвращает его в качестве результата. Пример:

document.body.removeChild(document.body.firstChild);

Метод replaceChild

Синтаксис:  узел.replaceChild(newChild, oldChild)
Аргументы:  newChild, oldChild — выражения типа Node
Результат:  узел Node
Исключения: HIERARCHY_REQUEST_ERR, WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR,
            NOT_FOUND_ERR
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод replaceChild заменяет узел oldChild в списке детей данного узла на узел newChild и возвращает oldChild в качестве результата. Если newChild уже был в списке детей, то он удаляется из него до замены. Пример:

var elem = document.createElement("P");
document.body.replaceChild(elem, document.body.firstChild);

4.3.2. Упорядоченный список узлов: интерфейс NodeList

Поддержка:   Internet Explorer  Для XML-документов соответствует стандарту (XMLDOMNodeList);
              для HTML-документов поддерживается в виде коллекций.
             Gecko  Соответствует стандарту.

Интерфейс NodeList реализует упорядоченные списки узлов, которые возвращаются многими свойствами и методами DOM. Списки узлов в DOM являются живыми, т. е. любое изменение документа влечет автоматическое изменение всех связанных с ним списков.

Этот интерфейс имеет единственное свойство length, возвращающее количество узлов в списке, и единственный метод item, возвращающий элемент списка с заданным номером (элементы списка узлов нумеруются, начиная с нуля).

Свойство length

Синтаксис:  список.length
Изменяемое: нет
Поддержка:   Internet Explorer  Cоответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство length возвращает количество элементов в данном списке. Допустимые индексы элементов списка лежат в диапазоне от 0 до length-1 включительно. Следующий пример выводит на экран количество элементов в дереве документа:

alert(document.getElementsByTagName("*").length); // в Gecko (стандарт)
alert(document.all.length);                       // в Internet Explorer

Метод item

Синтаксис:  список.item(index)
Аргументы:  index — числовое выражение
Результат:  узел Node или null
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод item возвращает элемент списка узлов с заданным индексом в качестве результата. Если индекс выходит за пределы диапазона элементов списка, то возвращается null. Пример: оператор

alert(document.childNodes.item(0).nodeName);

выведет на экран текст HTML.

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

alert(document.childNodes[0].nodeName);

Internet Explorer поддерживает еще одну форму обращения к элементу списка, а именно:

alert(document.childNodes(0).nodeName);

Однако, эта форма является нестандартной, и ей лучше не пользоваться.

4.3.3. Неупорядоченный список узлов: интерфейс NamedNodeMap

Поддержка:   Internet Explorer  Для XML-документов соответствует стандарту (XMLDOMNamedNodeMap);
              для HTML-документов поддерживается в виде коллекций.
             Gecko  Соответствует стандарту.

Интерфейс NamedNodeMap реализует неупорядоченные списки узлов, доступ к которым осуществляется по имени узла. Эти списки также являются живыми, т. е. любое изменение документа влечет автоматическое изменение всех связанных с ним списков.

DOM допускает возможность доступа к элементам списка NamedNodeMap по их номеру в списке, но подчеркивает, что эта возможность не означает упорядоченности списка по какому-либо признаку.

Этот интерфейс имеет единственное свойство length, возвращающее количество узлов в списке, и несколько методов, обеспечивающих доступ к элементам списка:

Методы интерфейса NamedNodeMap
Свойство | Модель | Описание
getNamedItem | DOM 1 | Возвращает узел с заданным именем.
getNamedItemNS | DOM 2 | Возвращает узел с заданным именем с учетом пространства имен.
item | DOM 1 | Возвращает узел с заданным номером.
removeNamedItem | DOM 1 | Удаляет узел с заданным именем.
removeNamedItemNS | DOM 2 | Удаляет узел с заданным именем с учетом пространства имен.
setNamedItem | DOM 1 | Добавляет узел в список.
setNamedItemNS | DOM 2 | Добавляет узел в список с учетом пространства имен.

Свойство length

Синтаксис:  список.length
Изменяемое: нет
Поддержка:   Internet Explorer  Cоответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство length возвращает количество элементов в данном списке. Допустимые индексы элементов списка лежат в диапазоне от 0 до length-1 включительно. Следующий пример выводит на экран количество атрибутов элемента BODY:

alert(document.body.attributes.length);

Метод getNamedItem

Синтаксис:  список.getNamedItem(name)
Аргументы:  name — выражение типа DOMString
Результат:  узел Node или null
Исключения: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод getNamedItem возвращает элемент списка узлов с заданным именем name в качестве результата. Если узла с таким именем в списке нет, то возвращается null. Пример:

alert(document.body.attributes.getNamedItem("text").nodeValue);

В Internet Explorer этот пример должен быть записан любым из двух следующих способов:

alert(document.body.attributes["text"].nodeValue);
alert(document.body.attributes("text").nodeValue);

Метод getNamedItemNS

Синтаксис:  список.getNamedItemNS(namespaceURI, localName)
Аргументы:  namespaceURI, localName — выражения типа DOMString
Результат:  узел Node или null
Исключения: нет
Поддержка:   Internet Explorer  Нестандартная поддержка для XML-документов (см. прим.).
             Gecko  Не поддерживается.

Метод getNamedItemNS возвращает элемент списка узлов с заданным именем в качестве результата. Если узла с таким именем в списке нет, то возвращается null. Этот метод предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а localName — локальное имя узла.

Примечание. В Microsoft XML DOM этот метод имеет вид getQualifiedItem(localName, namespaceURI).

Метод item

Синтаксис:  список.item(index)
Аргументы:  index — числовое выражение
Результат:  узел Node или null
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод item возвращает элемент списка узлов с заданным индексом в качестве результата. Если индекс выходит за пределы диапазона элементов списка, то возвращается null. Пример:

alert(document.body.attributes.item(0).nodeName);

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

alert(document.attributes[0].nodeName);

Internet Explorer поддерживает еще одну форму обращения к элементу списка, а именно:

alert(document.attributes(0).nodeName);

Однако, эта форма является нестандартной, и ей лучше не пользоваться.

Метод removeNamedItem

Синтаксис:  список.removeNamedItem(name)
Аргументы:  name — выражение типа DOMString
Результат:  узел Node
Исключения: NOT_FOUND_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод removeNamedItem удаляет элемент списка узлов с заданным именем name и возвращает его в качестве результата. Если удаляемый узел является атрибутом элемента, имеющим значение по умолчанию, то сразу после его удаления он вновь появляется в списке со значением по умолчанию. Пример:

document.body.attributes.removeNamedItem("text");

Метод removeNamedItemNS

Синтаксис:  список.removeNamedItemNS(namespaceURI, localName)
Аргументы:  namespaceURI, localName — выражения типа DOMString
Результат:  узел Node
Исключения: NOT_FOUND_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Нестандартная поддержка для XML-документов (см. прим.).
             Gecko  Не поддерживается.

Метод removeNamedItemNS удаляет элемент списка узлов с заданным именем и возвращает его в качестве результата. Если удаляемый узел является атрибутом элемента, имеющим значение по умолчанию, то сразу после его удаления он вновь появляется в списке со значением по умолчанию. Этот метод предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а localName — локальное имя узла.

Примечание. В Microsoft XML DOM этот метод имеет вид removeQualifiedItem(localName, namespaceURI).

Метод setNamedItem

Синтаксис:  список.setNamedItem(arg)
Аргументы:  arg — выражение типа Node
Результат:  узел Node или null
Исключения: WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR, INUSE_ATTRIBURE_ERR
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод setNamedItem добавляет элемент arg в данный список узлов. Если узел с таким именем в списке есть, то он заменяется на arg и возвращается в качестве результата. Если узла с таким именем в списке нет, то arg вставляется в список и возвращается null. Пример:

var attr = document.createAttribute("text");
attr.nodeValue = "red";
document.body.attributes.setNamedItem(attr);

Метод setNamedItemNS

Синтаксис:  список.setNamedItemNS(arg)
Аргументы:  arg — выражение типа Node
Результат:  узел Node или null
Исключения: WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR, INUSE_ATTRIBURE_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод setNamedItemNS добавляет элемент arg в данный список узлов. Если узел с таким именем в списке есть, то он заменяется на arg и возвращается в качестве результата. Если узла с таким именем в списке нет, то arg вставляется в список и возвращается null. Этот метод предназначен для XML-документов и для HTML-документов может не поддерживаться. Он отличается от метода setNamedItem тем, что при вставке узла используются URI его пространства имен, и его локальное имя.


WDH: DHTML - Элементы и атрибуты

Глава 4.4. Элементы и атрибуты

В этой главе мы рассматриваем узлы дерева документа Attr, Element, CharacterData, Text и Comment.

4.4.1. Атрибут: интерфейс Attr

Поддержка:   Internet Explorer  Поддерживается для XML-документов (XMLDOMAttribute);
              для HTML-документов поддерживается частично.
             Gecko  Соответствует стандарту.

Интерфейс Attr соответствует атрибуту элемента XML- или HTML-документа. Он наследует интерфейс Node, но поскольку атрибуты фактически не являются детьми элемента, который они описывают, DOM не считает их частью дерева документа. Поэтому значения свойств parentNode, previousSibling и nextSibling для атрибутов всегда равны null.

В XML значение атрибута представляется узлами типа Text и EntityReference, поскольку здесь значения атрибутов могут содержать ссылки на разделы. В HTML значением атрибута является просто строка типа DOMString.

Свойства интерфейса Attr
Свойство | Изменяемое | Модель | Описание
name | Нет | DOM 1 | Имя атрибута.
ownerElement | Нет | DOM 2 | Элемент-владелец атрибута.
specified | Нет | DOM 1 | Явно ли задан атрибут.
value | Да | DOM 1 | Значение атрибута.

Свойство name

Синтаксис:  атрибут.name
Изменяемое: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Свойство name возвращает строку, содержащую имя данного атрибута. Введение этого свойства в DOM не вполне обоснованно, т. к. его значение всегда совпадает со значением свойства nodeName. По этой причине MSHTML это свойство не поддерживает, и в целях совместимости лучше пользоваться свойством nodeName.

Свойство ownerElement

Синтаксис:  атрибут.ownerElement
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство ownerElement возвращает указатель на узел Element, атрибутом которого является данный атрибут, или null, если такого элемента нет. Пример: оператор

alert(document.body.attributes[0].ownerElement.tagName)

выведет на экран строку BODY.

Свойство specified

Синтаксис:  атрибут.specified
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство specified возвращает true, если значение атрибута было явно задано в тексте документа или в сценарии, и false в противном случае. Точнее говоря:

  • если атрибуту присвоено значение в документе или сценарии, то specified равно true, а значением атрибута является присвоенное значение;
  • если атрибуту не присваивалось значение в документе или сценарии и он имеет значение по умолчанию, заданное в DTD, то specified равно false, а значением атрибута является значение по умолчанию;
  • если атрибуту не присваивалось значение в документе или сценарии и он имеет значение #IMPILED в DTD, то этот атрибут не включается в дерево документа;
  • если свойство атрибута ownerElement равно null, то specified равно true.

Свойство value

Синтаксис:  атрибут.value
Изменяемое: да
Исключения: NO_MODIFICATION_ALLOWED_ERR (при записи)
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Свойство value позволяет задавать и считывать значение данного атрибута. В HTML его значение всегда совпадает со значением свойства nodeValue. По этой причине MSHTML это свойство не поддерживает, и в целях совместимости лучше пользоваться свойством nodeValue.

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

4.4.2. Элемент: интерфейс Element

Поддержка:   Internet Explorer  Поддерживается для XML-документов (XMLDOMEelement);
              для HTML-документов поддерживается частично.
             Gecko  Соответствует стандарту.

Интерфейс Element соответствует элементу XML- или HTML-документа. Он наследует интерфейс Node.

Свойства интерфейса Element
Свойство | Изменяемое | Модель | Описание
tagName | Нет | DOM 1 | Имя тега.
Методы интерфейса Element
Метод | Модель | Описание
getAttribute | DOM 1 | Возвращает значение заданного атрибута.
getAttributeNS | DOM 2 | Возвращает значение заданного атрибута с учетом пространства имен.
getAttributeNode | DOM 1 | Возвращает заданный узел Attr.
getAttributeNodeNS | DOM 2 | Возвращает заданный узел Attr с учетом пространства имен.
getElementsByTagName | DOM 1 | Возвращает список потомков, имеющих заданный тег.
getElementsByTagNameNS | DOM 2 | Возвращает список потомков, имеющих заданный тег, с учетом пространства имен.
hasAttribute | DOM 2 | Проверяет наличие заданного атрибута.
hasAttributeNS | DOM 2 | Проверяет наличие заданного атрибута с учетом пространства имен.
removeAttribute | DOM 1 | Удаляет заданный атрибут.
removeAttributeNS | DOM 2 | Удаляет заданный атрибут с учетом пространства имен.
removeAttributeNode | DOM 1 | Удаляет заданный узел Attr.
setAttribute | DOM 1 | Добавляет новый атрибут.
setAttributeNS | DOM 2 | Добавляет новый атрибут с учетом пространства имен.
setAttributeNode | DOM 1 | Добавляет новый узел Attr.
setAttributeNodeNS | DOM 2 | Добавляет новый узел Attr с учетом пространства имен.

Свойство tagName

Синтаксис:  элемент.tagName
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство tagName возвращает строку, содержащую имя тега данного элемента. Имя тега HTML всегда преобразуется в прописные буквы, тогда как имя тега XML хранится так, как оно задано в документе. Это свойство является избыточным, т. к. его значение всегда совпадает со значением свойства nodeName. Пример: оператор

alert(document.documentElement.tagName);

выведет на экран строку HTML.

Метод getAttribute

Синтаксис:  элемент.getAttribute(name)
Аргументы:  name — выражение типа DOMString
Результат:  значение типа DOMString
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод getAttribute возвращает значение атрибута, имеющего имя name. Если атрибут не имеет значения, то возвращается пустая строка. Пример:

<BODY text="blue">
<SCRIPT>
alert(document.body.getAttribute("text"));
</SCRIPT>
</BODY>

Оператор alert в Internet Explorer выведет строку #0000ff, а в Gecko — строку blue.

Метод getAttributeNS

Синтаксис:  элемент.getAttributeNS(namespaceURI, localName)
Аргументы:  namespaceURI, localName — выражения типа DOMString
Результат:  значение типа DOMString
Исключения: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод getAttributeNS возвращает значение заданного атрибута. Если атрибут не имеет значения, то возвращается пустая строка. Этот метод предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а localName — локальное имя атрибута.

Метод getAttributeNode

Синтаксис:  элемент.getAttributeNode(name)
Аргументы:  name — выражение типа DOMString
Результат:  значение типа Attr или null
Исключения: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод getAttributeNode возвращает указатель на объект Attr, соответствующий атрибуту с именем name. Если такого атрибута нет, то возвращается null. Пример:

<BODY text="blue">
<SCRIPT>
alert(document.body.getAttributeNode("text").nodeValue);
</SCRIPT>
</BODY>

Оператор alert в Gecko выведет строку blue (Internet Explorer этот метод не поддерживает).

Метод getAttributeNodeNS

Синтаксис:  элемент.getAttributeNodeNS(namespaceURI, localName)
Аргументы:  namespaceURI, localName — выражения типа DOMString
Результат:  значение типа Attr или null
Исключения: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод getAttributeNodeNS возвращает указатель на объект Attr, соответствующий заданному атрибуту. Если такого атрибута нет, то возвращается null. Этот метод предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а localName — локальное имя атрибута.

Метод getElementsByTagName

Синтаксис:  элемент.getElementsByTagName(tagname)
Аргументы:  tagname — выражение типа DOMString
Результат:  объект NodeList
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту (см. примечание).
             Gecko  Соответствует стандарту.

Метод getElementsByTagName создает новый объект NodeList, состоящий из всех потомков данного элемента типа Element, имеющих заданное имя и возвращает указатель на него. Аргумент tagname задает искомый тег; если он равен "*", то возвращается список всех элементов документа.

Примечание. Internet Explorer не поддерживает специальное имя "*". В нем вместо element.getElementsByTagName("*") следует использовать нестандартное свойство element.all.

Следующий пример выводит на экран количество графических образов в документе, а затем URI первого образа:

var imgList = document.body.getElementsByTagName("IMG");
alert(imgList.length);
alert(imgList[0].src);

Метод getElementsByTagNameNS

Синтаксис:  элемент.getElementsByTagNameNS(namespaceURI, localName)
Аргументы:  namespaceURI, localName — выражения типа DOMString
Результат:  объект NodeList
Исключения: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод getElementsByTagNameNS создает новый объект NodeList, состоящий из всех потомков данного элемента типа Element, имеющих заданное имя и возвращает указатель на него. Он предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а localName — локальное имя искомого тега в этом пространстве имен; если он равен "*", то возвращается список всех элементов документа, относящихся к данному словарю.

Метод hasAttribute

Синтаксис:  элемент.hasAttribute(name)
Аргументы:  name — выражение типа DOMString
Результат:  логическое значение
Исключения: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод hasAttribute возвращает true, если элемент имеет атрибут с именем name, и false в противном случае. Пример:

<BODY text="blue">
<SCRIPT>
alert(document.body.hasAttribute("text"));
alert(document.body.hasAttribute("size"));
</SCRIPT>
</BODY>

Первый оператор alert выведет в Gecko строку true, второй — строку false.

Метод hasAttributeNS

Синтаксис:  элемент.hasAttributeNS(namespaceURI, localName)
Аргументы:  namespaceURI, localName — выражения типа DOMString
Результат:  логическое значение
Исключения: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод hasAttributeNS возвращает true, если элемент имеет заданный атрибут, и false в противном случае. Он предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а localName — локальное имя атрибута.

Метод removeAttribute

Синтаксис:  элемент.removeAttribute(name)
Аргументы:  name — выражение типа DOMString
Исключения: NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод removeAttribute удаляет атрибут с именем name. Если атрибут имеет значение по умолчанию, то он немедленно появляется вновь, со значением по умолчанию. Пример:

var elem = document.getElementsByTagName("BODY")[0];
elem.removeAttribute("text");
alert(elem.getAttribute("text"));

Оператор alert выведет на экран пустую строку.

Метод removeAttributeNS

Синтаксис:  элемент.removeAttributeNS(namespaceURI, localName)
Аргументы:  namespaceURI, localName — выражения типа DOMString
Исключения: NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод removeAttributeNS удаляет заданный атрибут. Если атрибут имеет значение по умолчанию, то он немедленно появляется вновь, со значением по умолчанию. Этот метод предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а localName — локальное имя атрибута.

Метод removeAttributeNode

Синтаксис:  элемент.removeAttributeNode(oldAttr)
Аргументы:  oldAttr — выражение типа Attr
Результат:  объект типа Attr
Исключения: NO_MODIFICATION_ALLOWED_ERR, NOT_FOUND_ERR
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод removeAttributeNode удаляет заданный узел oldAttr и возвращает указатель на него. Если атрибут имеет значение по умолчанию, то он немедленно появляется вновь, со значением по умолчанию. Пример:

document.body.removeAttributeNode(elem.getAttributeNode("text"));

Метод setAttribute

Синтаксис:  элемент.setAttribute(name, value)
Аргументы:  name, value — выражения типа DOMString
Исключения: INVALID_CHARACTER_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод setAttribute создает новый атрибут с именем name и значением value. Если атрибут с таким именем уже есть, то ему просто присваивается новое значение. Следующий пример изменяет цвет отображения текста документа на зеленый:

document.body.setAttribute("text", "green");

При работе с XML-документами следует учитывать, что значение value рассматривается как обычная строка и не анализируется XML-процессором. Поэтому если мы хотим присвоить атрибуту значение, содержащее ссылки на разделы, то должны сначала создать новый узел Attr, затем создать необходимые узлы Text и EntityReference, включить их в дерево атрибута и присоединить все созданное дерево к элементу методом setAttributeNode.

Метод setAttributeNS

Синтаксис:  элемент.setAttributeNS(namespaceURI, qualifiedName, value)
Аргументы:  namespaceURI, qualifiedName, value — выражения типа DOMString
Исключения: INVALID_CHARACTER_ERR, NO_MODIFICATION_ALLOWED_ERR, NAMESPACE_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод setAttributeNS создает новый атрибут с заданным именем и значением value. Если атрибут с таким именем уже есть, то ему просто присваивается новое значение. Этот метод предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а qualifiedName — ограниченное имя атрибута. При работе с XML-документами следует учитывать замечания к методу setAttribute.

Метод setAttributeNode

Синтаксис:  элемент.setAttributeNode(newAttr)
Аргументы:  newAttr — выражение типа Attr
Результат:  объект типа Attr или null
Исключения: WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR, INUSE_ATTRIBUTE_ERR
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод setAttributeNode добавляет к данному элементу новый узел newAttr. Если атрибут с именем newAttr.nodeName уже есть, то он заменяется на новый узел, а указатель на старый узел возвращается в качестве результата. Если такого атрибута нет, то возвращается null. Пример:

var attr = document.createAttribute("temp");
attr.value = "temporary";
document.body.setAttributeNode(attr);
alert(document.body.getAttribute("temp"));

Оператор alert в Gecko выведет на экран строку temporary.

Метод setAttributeNodeNS

Синтаксис:  элемент.setAttributeNodeNS(newAttr)
Аргументы:  newAttr — выражение типа Attr
Результат:  объект типа Attr или null
Исключения: WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR, INUSE_ATTRIBUTE_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод setAttributeNodeNS добавляет к данному элементу новый узел newAttr. Если атрибут с такими же newAttr.localName и newAttr.namespaceURI уже есть, то он заменяется на новый узел, а указатель на старый узел возвращается в качестве результата. Если такого атрибута нет, то возвращается null. Этот метод предназначен для XML-документов и для HTML-документов может не поддерживаться.

4.4.3. Символьные данные: интерфейс CharacterData

Поддержка:   Internet Explorer  Поддерживается для XML-документов (XMLDOMCharacterData);
              для HTML-документов поддерживается частично.
             Gecko  Соответствует стандарту.

Интерфейс CharacterData инкапсулирует свойства и методы, присущие узлам, содержащим текстовые данные. Самостоятельно он не употребляется, а только служит прототипом для интерфейсов Text и Comment. Этот интерфейс спроектирован так, чтобы поддерживать большие объемы текстовой информации в XML-документах, которые могут не помещаться в символьные строки сценарных языков. Для HTML-документов эта проблема не актуальна, и мы можем работать с содержимым текстовых узлов как с обычными строками JavaScript. Напомним, что текстовые строки представляются в DOM строками символов формата UTF-16, а нумерация символов в строке начинается с нуля.

Свойства интерфейса CharacterData
Свойство | Изменяемое | Модель | Описание
data | Да | DOM 1 | Символьные данные узла.
length | Нет | DOM 1 | Количество символов в data.
Методы интерфейса CharacterData
Метод | Модель | Описание
appendData | DOM 1 | Добавляет строку в конец данных узла.
deleteData | DOM 1 | Удаляет фрагмент данных узла.
insertData | DOM 1 | Вставляет строку в заданное место данных узла.
replaceData | DOM 1 | Заменяет фрагмент данных узла на новую строку.
substringData | DOM 1 | Извлекает фрагмент данных узла.

Свойство data

Синтаксис:  узел.data
Изменяемое: да
Исключения: NO_MODIFICATION_ALLOWED_ERR (при записи), DOMSTRING_SIZE_ERR (при чтении)
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство data задает или возвращает строку, содержащую текстовое содержимое данного узла. Пример:

var node = document.createTextNode("Мой текст");
node.data = "Новый текст";
alert(node.data);

Оператор alert выведет на экран строку Новый текст.

Свойство length

Синтаксис:  узел.length
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство length возвращает беззнаковое целое число, равное количеству символов в текстовом содержимом узла. Пример:

var node = document.createTextNode("Мой текст");
alert(node.length);

Оператор alert выведет на экран число 9.

Метод appendData

Синтаксис:  элемент.appendData(arg)
Аргументы:  arg — выражение типа DOMString
Исключения: NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод appendData добавляет в конец текстового содержимого узла строку arg. Пример:

var node = document.createTextNode("12345");
node.appendData("67890");
alert(node.data);

Оператор alert выведет в Gecko на экран строку 1234567890. В Internet Explorer вместо этого метода следует использовать оператор node.data += arg.

Метод deleteData

Синтаксис:  элемент.deleteData(offset, count)
Аргументы:  offset, count — неотрицательные целые выражения
Исключения: NO_MODIFICATION_ALLOWED_ERR, INDEX_SIZE_ERR
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод deleteData удаляет фрагмент текстового содержимого узла длиной count символов, начиная с позиции offset. Если count + offset > length, то удаляется подстрока, начиная с позиции offset и до конца данных. Если offset отрицателен или больше length, либо если count отрицателен, то генерируется исключение INDEX_SIZE_ERR. Пример:

var node = document.createTextNode("12345");
node.deleteData(1, 3);
alert(node.data);

Оператор alert выведет в Gecko на экран строку 15. В Internet Explorer вместо этого метода следует использовать оператор node.data = node.data.substr(0, offset) + node.data.substr(offset+count).

Метод insertData

Синтаксис:  элемент.insertData(offset, arg)
Аргументы:  offset — неотрицательное целое выражение
            arg — выражение типа DOMString
Исключения: NO_MODIFICATION_ALLOWED_ERR, INDEX_SIZE_ERR
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод insertData вставляет строку arg в текстовое содержимое, начиная с позиции offset. Если offset отрицателен или больше length, то генерируется исключение INDEX_SIZE_ERR. Пример:

var node = document.createTextNode("12345");
node.insertData(0, "0");
alert(node.data);

Оператор alert выведет в Gecko на экран строку 012345. В Internet Explorer вместо этого метода следует использовать оператор
node.data = node.data.substr(0, offset) + arg + node.data.substr(offset).

Метод replaceData

Синтаксис:  элемент.replaceData(offset, count, arg)
Аргументы:  offset, count — неотрицательные целые выражения
            arg — выражение типа DOMString
Исключения: NO_MODIFICATION_ALLOWED_ERR, INDEX_SIZE_ERR
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод replaceData заменяет фрагмент текста длиной count символов, начиная с позиции offset, на строку arg. Если offset отрицателен или больше length, либо count отрицателен, то генерируется исключение INDEX_SIZE_ERR. Пример:

var node = document.createTextNode("12345");
node.replaceData(0, 3, "678");
alert(node.data);

Оператор alert выведет в Gecko на экран строку 67845. В Internet Explorer вместо этого метода следует использовать оператор
node.data = node.data.substr(0, offset) + arg + node.data.substr(offset+count).

Метод substringData

Синтаксис:  элемент.substringData(offset, count)
Аргументы:  offset, count — неотрицательные целые выражения
Результат:  значение типа DOMString
Исключения: DOMSTRING_SIZE_ERR, INDEX_SIZE_ERR
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Метод substringData возвращает фрагмент текстового содержимого узла длиной count символов, начиная с позиции offset. Если count + offset > length, то возвращается подстрока, начиная с позиции offset и до конца данных. Текстовое содержимое узла не изменяется. Если offset отрицателен или больше length, либо если count отрицателен, то генерируется исключение INDEX_SIZE_ERR. Пример:

var node = document.createTextNode("12345");
alert(node.substringData(1, 3));

Оператор alert выведет в Gecko на экран строку 234. В Internet Explorer вместо этого метода следует использовать оператор node.data.substr(offset, count).

4.4.4. Текстовый узел: интерфейс Text

Поддержка:   Internet Explorer  Поддерживается для XML-документов (XMLDOMText);
              для HTML-документов поддерживается частично.
             Gecko  Соответствует стандарту.

Интерфейс Text реализует текстовое содержимое элементов и атрибутов. Он наследует все свойства и методы интерфейса CharacterData и имеет единственный собственный метод splitText.

Метод splitText

Синтаксис:  элемент.splitText(offset)
Аргументы:  offset — неотрицательное целое выражение
Результат:  новый узел Text
Исключения: NO_MODIFICATION_ALLOWED_ERR, INDEX_SIZE_ERR
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод splitText расщепляет текстовый узел на два узла, которые являются братьями в дереве документа. Старый узел будет содержать свое исходное содержимое до позиции offset исключительно, а новый узел — исходное содержимое, начиная с позиции offset и до конца текста. Если offset отрицателен или больше length, то генерируется исключение INDEX_SIZE_ERR. Пример:

var node = document.createTextNode("0123456789");
var newnode = node.splitText(5);
alert(node.data);
alert(newnode.data);

Первый оператор alert выведет на экран строку 01234, а второй — строку 56789.

4.4.5. Комментарий: интерфейс Comment

Поддержка:   Internet Explorer  Поддерживается только для XML-документов (XMLDOMComment).
             Gecko  Соответствует стандарту.

Интерфейс Comment реализует комментарии XML- и HTML-документов. Он наследует все свойства и методы интерфейса CharacterData и содержит текст комментария, т. е. все, что находится между ограничителями <!-- и -->. Собственных свойств и методов у него нет.


WDH: DHTML - Дополнительные интерфейсы базовой модели

Глава 4.5. Дополнительные интерфейсы базовой модели

В этой главе мы рассматриваем дополнительные интерфейсы базовой модели DOM. Эти интерфейсы предназначены для XML-документов, поэтому читатели, которых интересует только работа с HTML-документами, могут эту главу безболезненно пропустить. Ее содержимое нам понадобится, когда мы дойдем до описания XML DOM.

4.5.1. Секция CDATA: интерфейс CDATASection

Поддержка:   Internet Explorer  Соответствует стандарту (XMLDOMCDATASection).
             Gecko  Соответствует стандарту.

Интерфейс CDATASection реализует секции CDATA XML-документов. Он наследует все свойства и методы интерфейса Text и содержит текст секции CDATA, т. е. все, что находится между ограничителями <![CDATA[ и ]]>. Собственных свойств и методов у него нет. Основным отличием узлов данного типа от узлов типа Text является то, что при нормализации узлов методом Node.normalize соседние секции CDATA не сливаются в одну секцию.

4.5.2. Тип документа: интерфейс DocumentType

Поддержка:   Internet Explorer  Соответствует DOM 1 (XMLDOMDocumentType).
             Gecko  Соответствует DOM 2.

Каждый объект типа Document имеет атрибут doctype, значением которого является либо null, либо объект DocumentType. Интерфейс DocumentType обеспечивает доступ ко всем разделам и нотациям, определенным для данного документа. DOM 2 не допускает редактирования узлов этого типа; они предназначены только для чтения. Интерфейс DocumentType наследует методы и свойства интерфейса Node и имеет дополнительно следующие свойства.

Свойства интерфейса DocumentType
Свойство | Изменяемое | Модель | Описание
entities | Нет | DOM 1 | Список деклараций разделов.
internalSubset | Нет | DOM 2 | Внутреннее подмножество DTD.
name | Нет | DOM 1 | Имя DTD.
notations | Нет | DOM 1 | Список деклараций нотаций.
publicId | Нет | DOM 2 | Публичный идентификатор DTD.
systemId | Нет | DOM 2 | Системный идентификатор DTD.

Свойство entities

Синтаксис:  объект.entities
Изменяемое: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Свойство entities возвращает объект типа NamedNodeMap, содержащий список всех деклараций разделов в документе, как внутренних, так и внешних. Параметрические разделы в список не включаются. Каждому разделу соответствует объект типа Entity. Пример:

alert(document.doctype.entities.length);

Свойство internalSubset

Синтаксис:  объект.internalSubset
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство internalSubset возвращает текст внутреннего подмножества DTD в виде строки. Фактически возвращаемое значение определяется конкретной реализацией XML-процессора. Пример:

alert(document.doctype.internalSubset);

Свойство name

Синтаксис:  объект.name
Изменяемое: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Свойство name возвращает строку, содержащую имя DTD, т. е. имя, непосредственно следующее за ключевым словом !DOCTYPE. Пример:

alert(document.doctype.name);

Свойство notations

Синтаксис:  объект.notations
Изменяемое: нет
Поддержка:   Internet Explorer  Только для XML-документов.
             Gecko  Соответствует стандарту.

Свойство notations возвращает объект типа NamedNodeMap, содержащий список всех деклараций нотаций в документе. Каждой нотации соответствует объект типа Notation. Пример:

alert(document.doctype.notations.length);

Свойство publicId

Синтаксис:  объект.publicId
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство publicId возвращает строку, содержащую публичный идентификатор внешнего подмножества DTD. Пример:

alert(document.doctype.publicId);

Свойство systemId

Синтаксис:  объект.systemId
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство systemId возвращает строку, содержащую системный идентификатор внешнего подмножества DTD. Пример:

alert(document.doctype.systemId);

4.5.3. Нотация: интерфейс Notation

Поддержка:   Internet Explorer  Соответствует стандарту (XMLDOMNotation).
             Gecko  Соответствует стандарту.

Интерфейс Notation соответствует декларации нотации в DTD XML-документа. DOM 2 не допускает редактирования узлов этого типа; они предназначены только для чтения. Интерфейс Notation наследует методы и свойства интерфейса Node и имеет дополнительно следующие свойства (имя нотации хранится в свойстве nodeName).

Свойства интерфейса Notation
Свойство | Изменяемое | Модель | Описание
publicId | Нет | DOM 1 | Публичный идентификатор нотации.
systemId | Нет | DOM 1 | Системный идентификатор нотации.

Свойство publicId

Синтаксис:  объект.publicId
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство publicId возвращает строку, содержащую публичный идентификатор нотации, или null, если его нет. Пример:

alert(document.doctype.notations[0].publicId);

Свойство systemId

Синтаксис:  объект.systemId
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство systemId возвращает строку, содержащую системный идентификатор нотации, или null, если его нет. Пример:

alert(document.doctype.notations[0].systemId);

4.5.4. Раздел: интерфейс Entity

Поддержка:   Internet Explorer  Соответствует стандарту (XMLDOMEntity).
             Gecko  Соответствует стандарту.

Интерфейс Entity соответствует разделу XML-документа. DOM 2 не допускает редактирования узлов этого типа; они предназначены только для чтения. Интерфейс Entity наследует методы и свойства интерфейса Node и имеет дополнительно следующие свойства (имя раздела хранится в свойстве nodeName).

Свойства интерфейса Entity
Свойство | Изменяемое | Модель | Описание
notationName | Нет | DOM 1 | Имя нотации.
publicId | Нет | DOM 1 | Публичный идентификатор раздела.
systemId | Нет | DOM 1 | Системный идентификатор раздела.

Свойство notationName

Синтаксис:  объект.notationName
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство notationName возвращает строку, содержащую нотацию раздела для неанализируемых разделов или null, если раздел анализируемый. Пример:

alert(document.doctype.entities[0].notationName);

Свойство publicId

Синтаксис:  объект.publicId
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство publicId возвращает строку, содержащую публичный идентификатор раздела, или null, если его нет. Пример:

alert(document.doctype.entities[0].publicId);

Свойство systemId

Синтаксис:  объект.systemId
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство systemId возвращает строку, содержащую системный идентификатор раздела, или null, если его нет. Пример:

alert(document.doctype.entities[0].systemId);

4.5.5. Ссылка на раздел: интерфейс EntityReference

Поддержка:   Internet Explorer  Соответствует стандарту (XMLDOMEntityReference).
             Gecko  Соответствует стандарту.

Интерфейс EntityReference реализует ссылки на разделы в XML-документах. Он наследует все свойства и методы интерфейса Node; собственных свойств и методов у него нет. Отметим, что специальные символы XML- и HTML-документов, которые являются частным случаем ссылок, всегда заменяются в процессе синтаксического анализа документа на соответствующие символы Unicode. Что касается остальных ссылок разделов, то момент их замены на соответствующие текстовые строки зависит от конкретного XML-процессора.

4.5.6. Директива: интерфейс ProcessingInstruction

Поддержка:   Internet Explorer  Соответствует стандарту (XMLDOMProcessingInstruction).
             Gecko  Соответствует стандарту.

Интерфейс ProcessingInstruction соответствует директивам в XML-документах. Он наследует все свойства и методы интерфейса Node. Кроме того, он имеет следующие свойства.

Свойства интерфейса ProcessingInstruction
Свойство | Изменяемое | Модель | Описание
data | Да | DOM 1 | Текст директивы.
sheet | Нет | DOM 2 | Указатель на таблицу стилей.
target | Нет | DOM 1 | Имя директивы.

Свойство data

Синтаксис:  объект.data
Изменяемое: да
Исключения: NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство data возвращает или задает строку, содержащую текст директивы, т. е. все, что содержится в ней от первого пробела до ограничителя ?>. Например, для директивы <?xml version="1.0"?> это свойство вернет строку 'version="1.0"'. Значение этого свойства совпадает со значением свойства nodeValue.

Свойство sheet

Синтаксис:  объект.sheet
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство sheet возвращает указатель на объект StyleSheet, соответствующий внешней таблице стилей, если это директива xml-stylesheet и если данная реализация DOM поддерживает таблицы стилей.

Свойство target

Синтаксис:  объект.target
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство target возвращает строку, содержащую имя директивы, т. е. все, что содержится в ней до первого пробела. Например, для директивы <?xml version="1.0"?> это свойство вернет строку 'xml'.


WDH: DHTML - Объектная модель HTML-документа

Глава 4.6. Объектная модель HTML-документа

После рассмотрения базовых интерфейсов мы переходим к описанию объектной модели HTML-документов в соответствии с DOM 2 HTML. Эта модель основана на следующих интерфейсах:

  • интерфейс HTMLDocument, соответствующий HTML-документу и производный от интерфейса Document;
  • интерфейс HTMLElement, соответствующий абстрактному HTML-элементу и производный от интерфейса Element;
  • интерфейсы, соответствующие конкретным элементам языка HTML и производные от интерфейса HTMLElement;
  • вспомогательные интерфейсы HTMLDOMImplementation и HTMLCollection.

Описанные в этой главе интерфейсы не являются обязательными для реализации DOM. Если реализация их поддерживает, то рекомендуется, чтобы ее метод DOMImplementation.hasFeature возвращал true при соответствующем запросе.

4.6.1. Реализация DOM HTML: интерфейс HTMLDOMImplementation

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс HTMLDOMImplementation является производным от интерфейса DOMImplementation. Он наследует все его свойства и методы, и имеет единственный дополнительный метод createHTMLDocument, позволяющий нам создавать объекты типа HTMLDocument.

Метод createHTMLDocument

Синтаксис:  объект.createHTMLDocument(title)
Аргументы:  title — выражение типа DOMString
Результат:  новый объект HTMLDocument
Исключения: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод createHTMLDocument создает новый объект HTMLDocument и возвращает указатель на него. Дерево нового документа состоит из четырех элементов: HTML, HEAD, TITLE и BODY. Аргумент title содержит титул документа, который становится содержимым элемента TITLE как его сыновний узел типа Text.

4.6.2. Коллекции: интерфейс HTMLCollection

Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Интерфейс HTMLCollection обобщает интерфейс NodeList таким образом, что доступ к элементам списка узлов становится возможен как по их номеру в списке, так и по их имени. Под именем элемента здесь понимается значение его атрибута id или name. Коллекции являются живыми, т. е. любое изменение документа влечет автоматическое изменение всех связанных с ним коллекций.

Этот интерфейс имеет единственное свойство length, возвращающее количество узлов в списке, и два метода: item, возвращающий элемент списка с заданным номером (элементы списка узлов нумеруются, начиная с нуля) и namedItem, возвращающий элемент списка с заданным именем.

Свойство length

Синтаксис:  коллекция.length
Изменяемое: нет
Поддержка:   Internet Explorer  Cоответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство length возвращает количество элементов в коллекции. Допустимые индексы элементов списка лежат в диапазоне от 0 до length-1 включительно. Следующий пример выводит на экран количество элементов в дереве документа:

alert(document.getElementsByTagName("*").length); // в Gecko (стандарт)
alert(document.all.length);                       // в Internet Explorer

Метод item

Синтаксис:  коллекция.item(index)
Аргументы:  index — числовое выражение
Результат:  узел Node или null
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

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

alert(document.childNodes.item(0).nodeName);

выведет на экран текст HTML.

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

alert(document.childNodes[0].nodeName);

Internet Explorer поддерживает еще одну форму обращения к элементу списка, а именно:

alert(document.childNodes(0).nodeName);

Однако, эта форма является нестандартной, и ей лучше не пользоваться.

Метод namedItem

Синтаксис:  коллекция.namedItem(name)
Аргументы:  name — выражение типа DOMString
Результат:  узел Node или null
Исключения: нет
Поддержка:   Internet Explorer  Реализован нестандартно.
             Gecko  Соответствует стандарту.

Метод namedItem возвращает элемент коллекции с заданным именем в качестве результата. Сначала ищется элемент, у которого атрибут id равен name; в случае неудачи ищется элемент, у которого атрибут name равен name. Если и такой элемент не найден, то возвращается null. Пример:

<IMG name="img1" src="file1.gif">
...
<SCRIPT>
alert(document.images.namedItem("img1").src);
</SCRIPT>

Оператор alert выведет в Gecko на экран спецификацию файла file1.gif. Internet Explorer не поддерживает стандартный синтаксис этого метода, поэтому для него данный оператор должен выглядеть так:

alert(document.images["img1"].src);

Приведенная форма приемлема и для Gecko. Internet Explorer поддерживает еще одну форму обращения к именованному элементу списка, а именно:

alert(document.images("img1").src);

Однако, эта форма является нестандартной, и ей лучше не пользоваться.

4.6.3. HTML-документ: интерфейс HTMLDocument

Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Интерфейс HTMLDocument является корнем в иерархии HTML-элементов. Он наследует все свойства и методы интерфейса Document и, кроме того, содержит несколько дополнительных свойств и методов, призванных облегчить написание сценариев для управления динамическими страницами.

Свойства интерфейса HTMLDocument
Свойство | Изменяемое | Модель | Описание
anchors | Нет | DOM 1 | Коллекция закладок, определенных в документе.
applets | Нет | DOM 1 | Коллекция аплетов, определенных в документе.
body | Да | DOM 1 | Указатель на тело документа.
cookie | Да | DOM 1 | Куки, ассоциированные с документом.
domain | Нет | DOM 1 | Доменное имя сервера.
forms | Нет | DOM 1 | Коллекция форм, определенных в документе.
images | Нет | DOM 1 | Коллекция графических образов, определенных в документе.
links | Нет | DOM 1 | Коллекция гиперссылок, определенных в документе.
referrer | Нет | DOM 1 | URI документа, ссылающегося на данный.
title | Да | DOM 1 | Титул документа.
URL | Нет | DOM 1 | Полный URI документа.
Методы интерфейса HTMLDocument
Метод | Модель | Описание
close | DOM 1 | Завершает редактирование документа.
getElementsByName | DOM 1 | Возвращает коллекцию элементов, имеющих заданное имя.
open | DOM 1 | Открывает документ для редактирования.
write | DOM 1 | Записывает в документ заданную строку.
writeln | DOM 1 | Записывает в документ заданную строку и символ перевода строки.

Свойство anchors

Синтаксис:  документ.anchors
Изменяемое: нет
Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

Свойство anchors возвращает коллекцию всех закладок, определенных в документе. Под закладкой здесь понимается элемент A, имеющий атрибут name. Согласно стандарту, закладки, определенные атрибутом id, а не name, не должны включаться в эту коллекцию, однако Internet Explorer их включает. Пример:

<A name="a1"></A>
<A id="a2"></A>
<SCRIPT>
alert(document.anchors.length);
</SCRIPT>

Оператор alert выведет в Gecko число 1, а в Internet Explorer число 2.

Свойство applets

Синтаксис:  документ.applets
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство applets возвращает коллекцию всех аплетов, определенных в документе. Аплеты определяются либо элементом OBJECT, либо морально устаревшим элементом APPLET. Пример:

for (var i = 0; i < document.applets.length; i++)
  alert(document.applets[i].code);

Свойство body

Синтаксис:  документ.body
Изменяемое: да (в Internet Explorer нет)
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство body задает или возвращает указатель на тело документа, т. е. либо на элемент BODY, либо, во фреймовых документах, на элемент FRAMESET. Пример:

alert(document.body.tagName);

Свойство cookie

Синтаксис:  документ.cookie
Изменяемое: да
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство cookie задает или возвращает строку, содержащую куки данного документа. Куки — это небольшой текстовый файл, который сохраняется обозревателем на компьютере-клиенте и содержит определенную информацию о данном Веб-документе. Содержимое куки передается в виде набора пар имя=значение, разделенных точкой с запятой. Число таких пар не должно превышать 20. Следующие имена в куки имеют специальное значение:

expires=дата | Задает дату и время удаления куки. Если этот параметр не задан, то куки существует до закрытия окна обозревателя (т. н. сеансовый куки). Дата должна иметь тот же формат, что и результат метода Date.toUTCString.
domain=имя_домена | Задает имя домена. Это позволяет нескольким серверам, входящим в один домен, совместно пользоваться информацией из куки.
path=путь | Задает путь на сервере. Это позволяет всем страницам данного домена, хранящимся в данном каталоге и его подкаталогах, совместно пользоваться информацией из куки.
secure | Этот параметр означает, что информация из куки должна быть доступна только в безопасном контексте.

При чтении этого свойства всегда возвращается строка, содержащая все куки данного документа. При этом следует учитывать, что Gecko добавляет после точки с запятой пробел, а Internet Explorer нет. Поэтому обрабатывать куки следует так, как показано в следующем примере, который возвращает дату и время удаления куки (или null для сенсового куки):

function trimLeft(s) {
  while(s[0] == " ")
    s = s.substr(1);
  return s;
}
function getCookie(sName) {
  var aCookie = document.cookie.split(";");
  for (var i = 0; i < aCookie.length; i++) {
    var aCrumb = trimLeft(aCookie[i]).split("=");
    if (sName == aCrumb[0])
      return unescape(aCrumb[1]);
  }
  return null;
}
alert(getCookie("expires"));

Свойство domain

Синтаксис:  документ.domain
Изменяемое: нет (в Internet Explorer да)
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство domain возвращает строку, содержащую доменное имя сервера, с которого загружена данная страница, или null, если сервер не может быть идентифицирован. Пример:

alert(document.domain);

Примечание. В Internet Explorer значение этого свойства можно изменять, присвоив ему суффикс доменного имени сервера. Дело в том, что доступ из одного фрейма MSIE к объектной модели другого допускается только в тех случаях, когда эти фреймы загружены из одного доменного имени. Пусть, например, один фрейм был загружен с сервера lib.suncloud.ru, а второй — с сервера home.suncloud.ru. Эти два фрейма не смогут общаться друг с другом; для разрешения доступа таких фреймов друг к другу мы должны присвоить их document.domain строку "suncoud.ru".

Свойство forms

Синтаксис:  документ.forms
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство forms возвращает коллекцию всех форм, определенных в документе, т. е. всех элементов FORM. Пример:

alert(document.forms.length);

Свойство images

Синтаксис:  документ.images
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство images возвращает коллекцию всех графических образов, определенных в документе, т. е. всех элементов IMG. Пример:

alert(document.images.length);

Свойство links

Синтаксис:  документ.links
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

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

for (var i = 0; i < document.links.length; i++)
  alert(document.links[i].href);

Свойство referrer

Синтаксис:  документ.referrer
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство referrer возвращает строку, содержащую имя документа, из которого по гиперссылке был загружен данный документ. Если такого документа нет (например, когда имя документа было введено в поле адреса обозревателя), то возвращается пустая строка. Пример:

alert(document.referrer);

Свойство title

Синтаксис:  документ.title
Изменяемое: да
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство title возвращает или задает строку, содержащую титул данного документа, т. е. содержимое его элемента TITLE. Пример:

if (document.title == "")
  document.title = "Без заголовка";

Свойство URL

Синтаксис:  документ.URL
Изменяемое: нет (в обозревателях да)
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство URL возвращает строку, содержащую полный URI данного документа. Например, для страницы, которую вы сейчас читаете, оператор alert(document.URL) выведет на экран строку http://wdh.suncloud.ru/dhtml06.htm.

Хотя стандарт считает это свойство неизменяемым, оба обозревателя позволяют задавать его значение. При этом Gecko просто игнорирует такой оператор присваивания, а Internet Explorer загружает в текущее окно документ с новым URL. Ср. описание объекта window.location в Gecko и Internet Explorer.

Метод close

Синтаксис:  документ.close()
Результат:  нет
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод close закрывает документ, открытый методом open, и вызывает отображение этого документа. См. пример и комментарии в описании метода open.

Метод getElementsByName

Синтаксис:  документ.getElementsByName(elementName)
Аргументы:  elementName — выражение типа DOMString
Результат:  объект типа HTMLCollection
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод getElementsByName возвращает коллекцию, состоящую из всех элементов, имеющих значение атрибута name, равное elementName. Если таких элементов нет, то возвращается пустая коллекция. В результирующую коллекцию включаются только те элементы, наличие у которых атрибута name допускается стандартом HTML. Пример:

var imgList = document.getElementsByName("MyImage");
alert(imgList.length);

Метод open

Синтаксис:  документ.open()
Результат:  нет
Исключения: нет
Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

Метод open открывает документ для редактирования методами write и writeln. Методы open, write, writeln и close введены в DOM HTML для совместимости со старыми версиями Netscape Navigator, который требовал специальных процедур открытия и закрытия слоя перед изменением его содержания. Современные обозреватели в этом не нуждаются, и, по всей вероятности, из следующих версий DOM перечисленные методы будут исключены.

Поэтому Gecko поддерживает методы open и close, но попросту их игнорирует. Internet Explorer точно так же игнорирует метод close, а метод open имеет два варианта: без параметров он игнорируется, а с параметрами он является синонимом метода window.open. Пример:

document.open();
document.writeln("<P>Новый абзац 1.</P><P>Новый абзац 2.</P>");
document.close();

Метод write

Синтаксис:  документ.write(text)
Аргументы:  text — выражение типа DOMString
Результат:  нет
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод write вставляет в текущую позицию документа HTML-текст, заданный аргументом text. См. пример и комментарии в описании метода open.

Метод writeln

Синтаксис:  документ.writeln(text)
Аргументы:  text — выражение типа DOMString
Результат:  нет
Исключения: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Метод writeln вставляет в текущую позицию документа HTML-текст, заданный аргументом text. К HTML-тексту добавляется символ перевода строки. См. пример и комментарии в описании метода open.

4.6.4. HTML-элемент: интерфейс HTMLElement

Интерфейс HTMLElement соответствует HTML-элементу общего вида. Он наследует все свойства и методы интерфейса Element и, кроме того, содержит несколько дополнительных свойств, соответствующих общим атрибутам элементов HTML. Атрибут style подробно будет описан в гл. 4.10, посвященной DOM CSS. Обработчики событий описаны в гл. 4.11, посвященной DOM Events.

Элементы HTML, имеющие только общие атрибуты, реализуются данным интерфейсом. Сюда относятся следующие элементы: ABBR, ACRONYM, ADDRESS, B, BDO, BIG, CENTER, CITE, CODE, DD, DFN, DT, EM, HEAD, I, KBD, NOFRAMES, NOSCRIPT, S, SAMP, SMALL, SPAN, STRIKE, STRONG, SUB, SUP, TT, U, VAR. Остальные HTML-элементы имеют собственные интерфейсы, которые являются наследниками интерфейса HTMLElement.

Особо следует остановиться на формате строк, содержащих значения атрибутов. Как мы уже знаем, названия тегов HTML всегда преобразуются в прописные буквы. Для атрибутов принято другое соглашение, а именно: атрибуты типа CDATA хранятся так, как они заданы в документе, а атрибуты, принимающие значения из фиксированного списка, должны преобразовываться в строчные буквы, но первая их буква делается прописной. Например, значения свойства dir должны иметь значения "Ltr" и "Rtl". Gecko следует этому соглашению, тогда как Internet Explorer преобразует значения таких атрибутов в строчные буквы (в данном случае, "ltr" и "rtl" соответственно).

Свойства интерфейса HTMLElement
Свойство | Изменяемое | Модель | Описание
className | Да | DOM 1 | Атрибут class.
dir | Да | DOM 1 | Атрибут dir.
id | Да | DOM 1 | Атрибут id.
lang | Да | DOM 1 | Атрибут lang.
style | Да | DOM 2 | Атрибут style.
title | Да | DOM 1 | Атрибут title.

Свойство className

Синтаксис:  элемент.className
Изменяемое: да
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство className задает или возвращает значение атрибута class данного элемента. Пример: следующий сценарий выведет на экран строку note.

<P id="p1" class="note">Текст примечания.</P>
<SCRIPT>
var o = document.getElementById("p1");
alert(o.className);
</SCRIPT>

Свойство dir

Синтаксис:  элемент.dir
Изменяемое: да
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство dir задает или возвращает значение атрибута dir данного элемента. Пример: следующий сценарий выведет в Gecko строку Ltr, а в MSIE — строку ltr.

<P id="p1" dir="ltr">Текст примечания.</P>
<SCRIPT>
var o = document.getElementById("p1");
alert(o.dir);
</SCRIPT>

Свойство id

Синтаксис:  элемент.id
Изменяемое: да
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство id задает или возвращает значение атрибута id данного элемента. Пример: следующий сценарий выведет на экран строку p1.

<P id="p1">Текст примечания.</P>
<SCRIPT>
var o = document.getElementById("p1");
alert(o.id);
</SCRIPT>

Свойство lang

Синтаксис:  элемент.lang
Изменяемое: да
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство lang задает или возвращает значение атрибута lang данного элемента. Пример: следующий сценарий выведет на экран строку ru.

<P id="p1" lang="ru">Текст примечания.</P>
<SCRIPT>
var o = document.getElementById("p1");
alert(o.lang);
</SCRIPT>

Свойство style

Синтаксис:  элемент.style
Изменяемое: да
Поддержка:   Internet Explorer  Поддержано частично.
             Gecko  Поддержано частично.

Свойство style обеспечивает доступ к интерфейсу CSSStyleDeclaration, соответствующему стилям CSS данного элемента. Пример: следующий сценарий выведет на экран строку 8px.

<P id="p1" style="font-size: 8px">Текст примечания.</P>
<SCRIPT>
var o = document.getElementById("p1");
alert(o.style.fontSize);
</SCRIPT>

Свойство title

Синтаксис:  элемент.title
Изменяемое: да
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство title задает или возвращает значение атрибута title данного элемента. Пример: следующий сценарий выведет на экран строку Прим. 1.

<P id="p1" title="Прим. 1">Текст примечания.</P>
<SCRIPT>
var o = document.getElementById("p1");
alert(o.title);
</SCRIPT>


WDH: DHTML - Элементы HTML

Глава 4.7. Элементы HTML

Теперь мы готовы перейти к описанию интерфейсов отдельных элементов языка HTML. Все эти интерфейсы наследуют интерфейс HTMLElement и добавляют к нему собственные методы и свойства, специфичные для данного элемента. В большинстве случаев добавляется набор свойств, соответствующих атрибутам, предусмотренных в HTML для данного элемента. Исключение составляют только элементы форм и таблиц, которые имеют еще и собственные методы. Поэтому описания интерфейсов построены в виде кратких таблиц, которые содержат имена свойств интерфейса и имена соответствующих HTML-атрибутов (они не всегда совпадают из-за ограничений, навязанных синтаксисом языков программирования). Все свойства HTML-элементов доступны и для чтения, и для записи, если не оговорено противное.

Интерфейсы описываются в том же порядке, что и элементы в Части I. Обратите внимание, что в Части I мы не описывали морально устаревшие элементы и атрибуты HTML. Здесь же мы решили дать полный перечень интерфейсов DOM, включая морально устаревшие элементы и свойства. Информацию о последних можно найти в Приложении 10.

Важно понимать, что для создания описанных ниже интерфейсов не требуется каких-то специальных методов. В процессе синтаксического разбора HTML-документа ядро обозревателя строит его дерево объектов; при этом оно анализирует тег очередного элемента и в зависимости от него создает объект соответствующего типа. Например, операция document.createElement("TABLE") возвращает указатель на новый объект типа HTMLTableElement.

4.7.1. Структурные элементы HTML

4.7.1.1. Интерфейс HTMLHtmlElement

Интерфейс HTMLHtmlElement соответствует элементу HTML. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
version | DOMString | version (морально устаревший) | Да | Да

4.7.1.2. Интерфейс HTMLHeadElement

Интерфейс HTMLHeadElement соответствует элементу HEAD. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
profile | DOMString | profile | Да | Да

4.7.1.3. Интерфейс HTMLTitleElement

Интерфейс HTMLTitleElement соответствует элементу TITLE. Он имеет следующие свойства:

Свойство | Тип | Описание | MSHTML | Gecko
text | DOMString | Титул документа как текстовая строка. | Да | Да

4.7.1.4. Интерфейс HTMLMetaElement

Интерфейс HTMLMetaElement соответствует элементу META. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
content | DOMString | content | Да | Да
httpEquiv | DOMString | http-equiv | Да | Да
name | DOMString | name | Да | Да
scheme | DOMString | scheme | Да | Да

4.7.1.5. Интерфейс HTMLBaseElement

Интерфейс HTMLBaseElement соответствует элементу BASE. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
href | DOMString | href | Да | Да
target | DOMString | target | Да | Да

4.7.1.6. Интерфейс HTMLLinkElement

Интерфейс HTMLLinkElement соответствует элементу LINK. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
charset | DOMString | charset | Да | Да
disabled | логический | Запрещает или разрешает данную связь. Имеет смысл только для внешних таблиц стилей. | Да | Да
href | DOMString | href | Да | Да
hreflang | DOMString | hreflang | Игнорируется | Игнорируется
media | DOMString | media | Да | Да
rel | DOMString | rel | Да | Да
rev | DOMString | rev | Да | Да
sheet | StyleSheet | Указатель на таблицу стилей (неизменяемый). Имеет смысл только для внешних таблиц стилей. | Нет | Да
target | DOMString | target | Да | Да
type | DOMString | type | Да | Да

4.7.1.7. Интерфейс HTMLStyleElement

Интерфейс HTMLStyleElement соответствует элементу STYLE. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
disabled | логический | Запрещает или разрешает данную таблицу стилей. | Да | Да
media | DOMString | media | Да | Да
sheet | StyleSheet | Указатель на таблицу стилей (неизменяемый). | Нет | Да
type | DOMString | type | Да | Да

4.7.1.8. Интерфейс HTMLBodyElement

Интерфейс HTMLBodyElement соответствует элементу BODY. Этот элемент всегда присутствует в документе, даже если соответствующие теги опущены. Он имеет следующие свойства, которые являются морально устаревшими:

Свойство | Тип | Атрибут | MSHTML | Gecko
aLink | DOMString | alink | Да | Да
background | DOMString | alink | Да | Да
bgColor | DOMString | bgcolor | Да | Да
link | DOMString | link | Да | Да
text | DOMString | text | Да | Да
vLink | DOMString | vlink | Да | Да

4.7.2. Отображение текста

4.7.2.1. Интерфейс HTMLParagraphElement

Интерфейс HTMLParagraphElement соответствует элементу P. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align (морально устаревший) | Да | Да

4.7.2.2. Интерфейс HTMLBRElement

Интерфейс HTMLBRElement соответствует элементу BR. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
clear | DOMString | clear (морально устаревший) | Да | Да

4.7.2.3. Интерфейс HTMLPreElement

Интерфейс HTMLPreElement соответствует элементу PRE. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
width | целый | width (морально устаревший) | Игнорируется | Да

4.7.2.4. Интерфейс HTMLHeadingElement

Интерфейс HTMLHeadingElement соответствует элементам H1 — H6. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align (морально устаревший) | Да | Да

4.7.2.5. Интерфейс HTMLQuoteElement

Интерфейс HTMLQuoteElement соответствует элементам BLOCKQUOTE и Q. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
cite | DOMString | cite | Игнорируется | Игнорируется

4.7.2.6. Интерфейс HTMLModElement

Интерфейс HTMLModElement соответствует элементам INS и DEL. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
cite | DOMString | cite | Игнорируется | Игнорируется
dateTime | DOMString | datetime | Нет | Игнорируется

4.7.3. Списки

4.7.3.1. Интерфейс HTMLUListElement

Интерфейс HTMLUListElement соответствует элементу UL. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
compact | логический | compact (морально устаревший) | Игнорируется | Игнорируется
type | DOMString | type (морально устаревший) | Да | Да

4.7.3.2. Интерфейс HTMLOListElement

Интерфейс HTMLOListElement соответствует элементу OL. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
compact | логический | compact (морально устаревший) | Игнорируется | Игнорируется
start | целый | start (морально устаревший) | Да | Да
type | DOMString | type (морально устаревший) | Да | Да

4.7.3.3. Интерфейс HTMLLIElement

Интерфейс HTMLLIElement соответствует элементу LI. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
type | DOMString | type (морально устаревший) | Да | Да
value | целый | value (морально устаревший) | Да | Да

4.7.3.4. Интерфейс HTMLDListElement

Интерфейс HTMLDListElement соответствует элементу DL. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
compact | логический | compact (морально устаревший) | Игнорируется | Игнорируется

4.7.4. Таблицы

4.7.4.1. Интерфейс HTMLTableElement

Интерфейс HTMLTableElement соответствует элементу TABLE. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align (морально устаревший) | Да | Да
bgColor | DOMString | bgcolor (морально устаревший) | Да | Да
border | DOMString | border | Да | Да
caption | HTMLTableCaptionElement | Указатель на CAPTION таблицы или null. | Да | Да
cellPadding | DOMString | cellpadding | Да | Да
cellSpacing | DOMString | cellspacing | Да | Да
frame | DOMString | frame | Да | Да
rows | HTMLCollection | Коллекция всех строк таблицы в ее элементах THEAD, TFOOT и TBODY (неизменяемая). | Да | Да
rules | DOMString | rules | Да | Да
summary | DOMString | summary | Да | Да
tBodies | HTMLCollection | Коллекция всех элементов TBODY в таблице (неизменяемая). | Да | Да
tFoot | HTMLTableSectionElement | Указатель на TFOOT таблицы или null. | Да | Да
tHead | HTMLTableSectionElement | Указатель на THEAD таблицы или null. | Да | Да
width | DOMString | width | Да | Да

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

Метод | Результат | Описание | MSHTML | Gecko
createCaption() | HTMLElement | Создает новый элемент CAPTION и возвращает указатель на него. Если такой элемент в таблице уже был, то возвращается указатель на него. | Да | Да
createTFoot() | HTMLElement | Создает новый элемент TFOOT и возвращает указатель на него. Если такой элемент в таблице уже был, то возвращается указатель на него. | Да | Да
createTHead() | HTMLElement | Создает новый элемент THEAD и возвращает указатель на него. Если такой элемент в таблице уже был, то возвращается указатель на него. | Да | Да
deleteCaption() | Нет | Удаляет элемент CAPTION, если он есть в таблице. | Да | Да
deleteRow(index) | Нет | Удаляет строку таблицы с номером index. Строки нумеруются с нуля сквозным образом, независимо от их группировки. Возможно исключение INDEX_SIZE_ERR. | Да | Да
deleteTFoot() | Нет | Удаляет элемент TFOOT, если он есть в таблице. | Да | Да
deleteTHead() | Нет | Удаляет элемент THEAD, если он есть в таблице. | Да | Да
insertRow(index) | HTMLElement | Вставляет пустую строку в таблицу перед строкой с номером index в той же группе строк и возвращает указатель на нее. Строки нумеруются с нуля сквозным образом, независимо от их группировки. Если index равен числу строк таблицы, то новая строка добавляется в конец таблицы. Возможно исключение INDEX_SIZE_ERR. | Да | Да

4.7.4.2. Интерфейс HTMLTableCaptionElement

Интерфейс HTMLTableCaptionElement соответствует элементу CAPTION. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align (морально устаревший) | Да | Да

4.7.4.3. Интерфейс HTMLTableSectionElement

Интерфейс HTMLTableSectionElement соответствует элементам, управляющим группировкой строк: THEAD, TFOOT и TBODY. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align | Да | Да
ch | DOMString | char | Нет | Нет
chOff | DOMString | charoff | Нет | Нет
rows | HTMLCollection | Коллекция всех строк данной группы (неизменяемая). | Да | Да
vAlign | DOMString | valign | Да | Да

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

Метод | Результат | Описание | MSHTML | Gecko
deleteRow(index) | Нет | Удаляет строку таблицы с номером index. Строки нумеруются с нуля сквозным образом, независимо от их группировки. Возможно исключение INDEX_SIZE_ERR. | Да | Да
insertRow(index) | HTMLElement | Вставляет пустую строку в таблицу перед строкой с номером index в той же группе строк и возвращает указатель на нее. Строки нумеруются с нуля сквозным образом, независимо от их группировки. Если index равен числу строк таблицы, то новая строка добавляется в конец таблицы. Возможно исключение INDEX_SIZE_ERR. | Да | Да

4.7.4.4. Интерфейс HTMLTableColElement

Интерфейс HTMLTableColElement соответствует элементам, управляющим группировкой столбцов: COL и COLGROUP. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align | Да | Да
ch | DOMString | char | Нет | Нет
chOff | DOMString | charoff | Нет | Нет
span | DOMString | span | Да | Да
vAlign | DOMString | valign | Да | Да
width | DOMString | width | Да | Да

4.7.4.5. Интерфейс HTMLTableRowElement

Интерфейс HTMLTableRowElement соответствует элементу TR. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align | Да | Да
bgColor | DOMString | bgcolor (морально устаревший) | Да | Да
cells | HTMLCollection | Коллекция всех ячеек данной строки (неизменяемая). | Да | Да
ch | DOMString | char | Нет | Нет
chOff | DOMString | charoff | Нет | Нет
rowIndex | целый | Сквозной номер строки в таблице, считая с нуля без учета групп строк (неизменяемый). Это номер в порядке прохождения дерева документа, а не в порядке отображения таблицы. | Да | Да
sectionRowIndex | целый | Номер строки в текущей группе строк (THEAD, TFOOT или TBODY), считая с нуля. | Да | Да
vAlign | DOMString | valign | Да | Да

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

Метод | Результат | Описание | MSHTML | Gecko
deleteCell(index) | Нет | Удаляет ячейку данной строки с номером index, считая с нуля. Возможно исключение INDEX_SIZE_ERR. | Да | Да
insertCell(index) | HTMLElement | Вставляет пустую ячейку в данную строку перед ячейкой с номером index, считая с нуля, и возвращает указатель на нее. Если index равен числу ячеек в строке, то новая ячейка добавляется в конец строки. Возможно исключение INDEX_SIZE_ERR. | Да | Да

4.7.4.6. Интерфейс HTMLTableCellElement

Интерфейс HTMLTableCellElement соответствует элементам TH и TD. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
abbr | DOMString | abbr | Игнорируется | Игнорируется
align | DOMString | align | Да | Да
axis | DOMString | axis | Игнорируется | Игнорируется
bgColor | DOMString | bgcolor (морально устаревший) | Да | Да
cellIndex | целый | Сквозной номер ячейки в строке, считая с нуля (неизменяемый). Это номер в порядке прохождения дерева документа, а не в порядке отображения таблицы. | Да | Да
ch | DOMString | char | Нет | Нет
chOff | DOMString | charoff | Нет | Нет
colSpan | DOMString | colspan | Нет | Нет
headers | DOMString | headers | Игнорируется | Игнорируется
height | DOMString | height (морально устаревший) | Да | Да
noWrap | логический | nowrap (морально устаревший) | Да | Да
rowSpan | DOMString | rowspan | Нет | Нет
scope | DOMString | scope | Игнорируется | Игнорируется
vAlign | DOMString | valign | Да | Да
width | DOMString | width (морально устаревший) | Да | Да


WDH: DHTML - Элементы HTML (продолжение)

Глава 4.8. Элементы HTML (продолжение)

4.8.1. Гиперссылки, объекты и графические образы

4.8.1.1. Интерфейс HTMLAnchorElement

Интерфейс HTMLAnchorElement соответствует элементу A. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
accessKey | DOMString | accesskey | Да | Да
charset | DOMString | charset | Игнорируется | Игнорируется
coords | DOMString | coords | Игнорируется | Игнорируется
href | DOMString | href | Да | Да
hreflang | DOMString | hreflang | Игнорируется | Игнорируется
name | DOMString | name | Да | Да
rel | DOMString | rel | Да | Да
rev | DOMString | rev | Да | Да
shape | DOMString | shape | Игнорируется | Игнорируется
tabIndex | DOMString | tabindex | Да | Да
target | DOMString | target | Да | Да
type | DOMString | type | Игнорируется | Игнорируется

Кроме того, данный интерфейс поддерживает два метода, управляющие фокусом:

Метод | Результат | Описание | MSHTML | Gecko
blur() | Нет | Удаляет фокус с данного элемента. | Да | Да
focus() | Нет | Помещает фокус на данный элемент. | Да | Да

4.8.1.2. Интерфейс HTMLImageElement

Интерфейс HTMLImageElement соответствует элементу IMG. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align (морально устаревший) | Да | Да
alt | DOMString | alt | Да | Да
border | DOMString | border (морально устаревший) | Да | Да
height | DOMString | height | Да | Да
hspace | DOMString | hspace (морально устаревший) | Да | Да
isMap | логический | ismap | Да | Да
longDesc | DOMString | longdesc | Игнорируется | Игнорируется
lowSrc | DOMString | URI графического образа для экранов с низким разрешением. | lowsrc | lowSrc, lowsrc
name | DOMString | name | Да | Да
src | DOMString | src | Да | Да
useMap | DOMString | usemap | Да | Да
vspace | DOMString | vspace | Да | Да
width | DOMString | width | Да | Да

4.8.1.3. Интерфейс HTMLObjectElement

Интерфейс HTMLObjectElement соответствует элементу OBJECT. Его свойства описаны ниже. Стандарт объявляет их доступными для изменения, но оговаривает, что реальное поведение свойств определяется типом объекта и его окружением.

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align (морально устаревший) | Да | Да
archive | DOMString | archive | Игнорируется | Игнорируется
border | DOMString | border (морально устаревший) | Да | Да
code | DOMString | code (см. APPLET) | Да | Да
codeBase | DOMString | codebase | Да | Да
codeType | DOMString | codetype | Да | Да
contentDocument | Document | Указатель на документ, содержащий данный объект, или null (DOM 2, неизменяемый). | Нет | null
data | DOMString | data | Да | Да
declare | логический | declare | Нет | Да
form | HTMLFormElement | Указатель на элемент FORM, содержащий данный объект, или null (неизменяемый). | Да | Да
height | DOMString | height | Да | Да
hspace | DOMString | hspace (морально устаревший) | Да | Да
name | DOMString | name | Да | Да
standby | DOMString | standby | Да | Да
tabIndex | DOMString | tabindex | Да | Да
type | DOMString | type | Да | Да
useMap | DOMString | usemap | Нет | Да
vspace | DOMString | vspace | Да | Да
width | DOMString | width | Да | Да

4.8.1.4. Интерфейс HTMLParamElement

Интерфейс HTMLParamElement соответствует элементу PARAM. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
name | DOMString | name | Да | Да
type | DOMString | type | Нет | Да
value | DOMString | value | Да | Да
valueType | DOMString | valuetype | Нет | Да

4.8.1.5. Интерфейс HTMLMapElement

Интерфейс HTMLMapElement соответствует элементу MAP. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
areas | HTMLCollection | Коллекция элементов AREA, определенных для данной карты (неизменяемая). | Да | Да
name | DOMString | name | Да | Да

4.8.1.6. Интерфейс HTMLAreaElement

Интерфейс HTMLAreaElement соответствует элементу AREA. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
accessKey | DOMString | accesskey | Да | Да
alt | DOMString | alt | Да | Игнорируется
coords | DOMString | coords | Да | Да
href | DOMString | href | Да | Да
nohref | логический | nohref | Да | Да
shape | DOMString | shape | Да | Да
tabIndex | DOMString | tabindex | Да | Да
target | DOMString | target | Да | Да

4.8.2. Фреймы

4.8.2.1. Интерфейс HTMLFrameSetElement

Интерфейс HTMLFrameSetElement соответствует элементу FRAMESET. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
cols | DOMString | cols | Да | Да
rows | DOMString | rows | Да | Да

4.8.2.2. Интерфейс HTMLFrameElement

Интерфейс HTMLFrameElement соответствует элементу FRAME. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
contentDocument | Document | Указатель на документ, содержащийся в данном фрейме, или null (DOM 2, неизменяемый). | Нет | Нет
frameBorder | DOMString | frameborder | Да | Да
longDesc | DOMString | longdesc | Нет | Нет
marginHeight | DOMString | marginheight | Да | Да
marginWidth | DOMString | marginwidth | Да | Да
name | DOMString | name | Да | Да
noResize | логический | noresize | Да | Да
scrolling | DOMString | scrolling | Да | Да
src | DOMString | src | Да | Да

4.8.2.3. Интерфейс HTMLIFrameElement

Интерфейс HTMLIFrameElement соответствует элементу IFRAME. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align (морально устаревший) | Да | Да
contentDocument | Document | Указатель на документ, содержащийся в данном фрейме, или null (DOM 2, неизменяемый). | Нет | Нет
frameBorder | DOMString | frameborder | Да | Да
height | DOMString | height | Да | Да
longDesc | DOMString | longdesc | Нет | Нет
marginHeight | DOMString | marginheight | Да | Да
marginWidth | DOMString | marginwidth | Да | Да
name | DOMString | name | Да | Да
scrolling | DOMString | scrolling | Да | Да
src | DOMString | src | Да | Да
width | DOMString | width | Да | Да

4.8.3. Формы

4.8.3.1. Интерфейс HTMLFormElement

Интерфейс HTMLFormElement соответствует элементу FORM. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
acceptCharset | DOMString | accept-charset | Да | Да
action | DOMString | action | Да | Да
elements | HTMLCollection | Коллекция всех управляющих элементов данной формы (неизменяемая). | Да | Да
enctype | DOMString | enctype | encoding | enctype, encoding
length | целый | Количество управляющих элементов в данной форме (неизменяемое). | Да | Да
method | DOMString | method | Да | Да
name | DOMString | name | Да | Да
target | DOMString | target | Да | Да

Кроме того, данный интерфейс поддерживает два метода, управляющие пересылкой формы:

Метод | Результат | Описание | MSHTML | Gecko
reset() | Нет | Инициализирует форму (эквивалентно кнопке reset). | Да | Да
submit() | Нет | Пересылает форму (эквивалентно кнопке submit). | Да | Да

4.8.3.2. Интерфейс HTMLInputElement

Интерфейс HTMLInputElement соответствует элементу INPUT. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
accept | DOMString | accept | Игнорируется | Игнорируется
accessKey | DOMString | accesskey | Да | Да
align | DOMString | align (морально устаревший) | Да | Да
alt | DOMString | alt | Да | Да
checked | логический | Текущее значение checked (для флажков и переключателей). | Да | Да
defaultChecked | логический | Начальное значение checked (для флажков и переключателей). | Да | Да
defaultValue | DOMString | Начальное значение value (для ввода текста, пароля и выбора файлов). | Да | Да
disabled | логический | disabled | Да | Да
form | HTMLFormElement | Указатель на элемент FORM, содержащий данный элемент, или null (неизменяемый). | Да | Да
maxLength | целый | maxlength (для полей ввода текста и пароля) | Да | Да
readOnly | логический | readonly (для полей ввода текста и пароля) | Да | Да
size | DOMString | size | Да | Да
src | DOMString | src (для графических кнопок) | Да | Да
tabIndex | целый | tabindex | Да | Да
type | DOMString | type | Да | Да
useMap | DOMString | usemap | Да | Да
value | DOMString | Текущее значение value. | Да | Да

Кроме того, данный интерфейс поддерживает следующие методы:

Метод | Результат | Описание | MSHTML | Gecko
blur() | Нет | Удаляет фокус с данного элемента. | Да | Да
click() | Нет | Имитирует щелчок кнопки мыши (для кнопок, флажков и переключателей). | Да | Да
focus() | Нет | Помещает фокус на данный элемент. | Да | Да
select() | Нет | Выбирает содержимое текстового поля (для полей ввода текста, пароля и селекторов файлов). | Да | Да

4.8.3.3. Интерфейс HTMLButtonElement

Интерфейс HTMLButtonElement соответствует элементу BUTTON. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
accessKey | DOMString | accesskey | Да | Да
disabled | логический | disabled | Да | Да
form | HTMLFormElement | Указатель на элемент FORM, содержащий данный элемент, или null (неизменяемый). | Да | Да
name | DOMString | name | Да | Да
tabIndex | целый | tabindex | Да | Да
type | DOMString | type (неизменяемый) | Да | Да
value | DOMString | value | Да | Да

4.8.3.4. Интерфейс HTMLSelectElement

Интерфейс HTMLSelectElement соответствует элементу SELECT. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
disabled | логический | disabled | Да | Да
form | HTMLFormElement | Указатель на элемент FORM, содержащий данный элемент, или null (неизменяемый). | Да | Да
length | целый | Количество опций в данном элементе (неизменяемое). | Да | Да
multiple | логический | multiple | Да | Да
name | DOMString | name | Да | Да
options | HTMLCollection | Коллекция элементов OPTION, содержащихся в данном элементе (неизменяемая). | Да | Да
selectedIndex | целый | Порядковый номер выбранной опции, считая с нуля. Если выбранных опций нет, то -1; если их несколько, то номер первой из них. | Да | Да
size | DOMString | size | Да | Да
tabIndex | целый | tabindex | Да | Да
type | DOMString | type (неизменяемый) | Да | Да
value | DOMString | value | Да | Да

Кроме того, данный интерфейс поддерживает следующие методы:

Метод | Результат | Описание | MSHTML | Gecko
add(element, before) | Нет | Добавляет HTML-элемент element в коллекцию options перед HTML-элементом before. Если before равен null, то добавляет в конец коллекции. | Да | Да
blur() | Нет | Удаляет фокус с данного элемента. | Да | Да
focus() | Нет | Помещает фокус на данный элемент. | Да | Да
remove(index) | Нет | Удаляет HTML-элемент с номером index, считая с нуля, из коллекции options. Если такого элемента нет, то не делает ничего. | Да | Да

4.8.3.5. Интерфейс HTMLOptGroupElement

Интерфейс HTMLOptGroupElement соответствует элементу OPTGROUP. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
disabled | логический | disabled | Да | Да
label | DOMString | label | Да | Да

4.8.3.6. Интерфейс HTMLOptionElement

Интерфейс HTMLOptionElement соответствует элементу OPTION. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
defaultSelected | логический | Начальное значение selected. | Да | Да
disabled | логический | disabled | Да | Да
form | HTMLFormElement | Указатель на элемент FORM, содержащий данный элемент, или null (неизменяемый). | Да | Да
index | целый | Номер данного элемента в содержащем его элементе SELECT, считая с нуля (неизменяемый). | Да | Да
label | DOMString | label | Да | Да
selected | логический | Текущее значение selected. | Да | Да
text | DOMString | Текст, содержащийся в данном элементе (неизменяемый). | Да | Да
value | DOMString | value | Да | Да

4.8.3.7. Интерфейс HTMLTextAreaElement

Интерфейс HTMLTextAreaElement соответствует элементу TEXTAREA. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
accessKey | DOMString | accesskey | Да | Да
cols | целый | cols | Да | Да
defaultValue | DOMString | Начальное содержимое элемента. | Да | Да
disabled | логический | disabled | Да | Да
form | HTMLFormElement | Указатель на элемент FORM, содержащий данный элемент, или null (неизменяемый). | Да | Да
name | DOMString | name | Да | Да
readOnly | логический | readonly | Да | Да
rows | целый | rows | Да | Да
tabIndex | целый | tabindex | Да | Да
type | DOMString | Строка "textarea" (неизменяемая). | Да | Да
value | DOMString | Текущее содержимое элемента. | Да | Да

Кроме того, данный интерфейс поддерживает следующие методы:

Метод | Результат | Описание | MSHTML | Gecko
blur() | Нет | Удаляет фокус с данного элемента. | Да | Да
focus() | Нет | Помещает фокус на данный элемент. | Да | Да
select() | Нет | Выбирает содержимое текстового поля. | Да | Да

4.8.3.8. Интерфейс HTMLLabelElement

Интерфейс HTMLLabelElement соответствует элементу LABEL. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
accessKey | DOMString | accesskey | Да | Да
form | HTMLFormElement | Указатель на элемент FORM, содержащий данный элемент, или null (неизменяемый). | Да | Да
htmlFor | DOMString | for | Да | Да

4.8.3.9. Интерфейс HTMLFieldSetElement

Интерфейс HTMLFieldSetElement соответствует элементу FIELDSET. Он имеет единственное свойство:

Свойство | Тип | Атрибут | MSHTML | Gecko
form | HTMLFormElement | Указатель на элемент FORM, содержащий данный элемент, или null (неизменяемый). | Да | Да

4.8.3.10. Интерфейс HTMLLegendElement

Интерфейс HTMLLegendElement соответствует элементу LEGEND. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
accessKey | DOMString | accesskey | Да | Да
align | DOMString | align (морально устаревший) | Да | Да
form | HTMLFormElement | Указатель на элемент FORM, содержащий данный элемент, или null (неизменяемый). | Да | Да

4.8.4. Прочие элементы

4.8.4.1. Интерфейс HTMLScriptElement

Интерфейс HTMLScriptElement соответствует элементу SCRIPT. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
charset | DOMString | charset | Да | Да
defer | логический | defer | Да | Да
event | DOMString | Зарезервировано для будущего использования. | Да, атрибут event (неизменяемое) | Нет
htmlFor | DOMString | Зарезервировано для будущего использования. | Да, атрибут for (неизменяемое) | Нет
src | DOMString | src | Да | Да
text | DOMString | Текст сценария, содержащийся в данном элементе. | Да | Да
type | DOMString | type | Да | Да

4.8.4.2. Интерфейс HTMLDivElement

Интерфейс HTMLDivElement соответствует элементу DIV. Он имеет единственное свойство:

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align (морально устаревший) | Да | Да

4.8.4.3. Интерфейс HTMLHRElement

Интерфейс HTMLHRElement соответствует элементу HR. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align (морально устаревший) | Да | Да
noShade | логический | noshade (морально устаревший) | Да | Да
size | DOMString | size (морально устаревший) | Да | Да
width | DOMString | width (морально устаревший) | Да | Да

4.8.5. Морально устаревшие элементы

4.8.5.1. Интерфейс HTMLAppletElement

Интерфейс HTMLAppletElement соответствует элементу APPLET. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
align | DOMString | align (морально устаревший) | Да | Да
alt | DOMString | alt (морально устаревший) | Да | Да
archive | DOMString | archive (морально устаревший) | Игнорируется | Игнорируется
code | DOMString | code (морально устаревший) | Да | Да
codeBase | DOMString | codebase (морально устаревший) | Да | Да
height | DOMString | height (морально устаревший) | Да | Да
hspace | DOMString | hspace (морально устаревший) | Да | Да
name | DOMString | name (морально устаревший) | Да | Да
object | DOMString | object (морально устаревший) | Да | Да
vspace | DOMString | vspace (морально устаревший) | Да | Да
width | DOMString | width (морально устаревший) | Да | Да

4.8.5.2. Интерфейс HTMLBaseFontElement

Интерфейс HTMLBaseFontElement соответствует элементу BASEFONT. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
color | DOMString | color (морально устаревший) | Да | Да
face | DOMString | face (морально устаревший) | Да | Да
size | DOMString | size (морально устаревший) | Да | Да

4.8.5.3. Интерфейс HTMLDirectoryElement

Интерфейс HTMLDirectoryElement соответствует элементу DIR. Он имеет единственное свойство:

Свойство | Тип | Атрибут | MSHTML | Gecko
compact | логический | compact (морально устаревший) | Игнорируется | Игнорируется

4.8.5.4. Интерфейс HTMLFontElement

Интерфейс HTMLFontElement соответствует элементу FONT. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
color | DOMString | color (морально устаревший) | Да | Да
face | DOMString | face (морально устаревший) | Да | Да
size | DOMString | size (морально устаревший) | Да | Да

4.8.5.5. Интерфейс HTMLIsIndexElement

Интерфейс HTMLIsIndexElement соответствует элементу ISINDEX. Он имеет следующие свойства:

Свойство | Тип | Атрибут | MSHTML | Gecko
form | HTMLFormElement | Указатель на элемент FORM, содержащий данный элемент, или null (неизменяемый). | Да | Да
prompt | DOMString | prompt (морально устаревший) | Да | Да

4.8.5.6. Интерфейс HTMLMenuElement

Интерфейс HTMLMenuElement соответствует элементу MENU. Он имеет единственное свойство:

Свойство | Тип | Атрибут | MSHTML | Gecko
compact | логический | compact (морально устаревший) | Игнорируется | Игнорируется


WDH: DHTML - Динамические таблицы стилей

Глава 4.9. Динамические таблицы стилей

4.9.1. Включение таблиц стилей в документ

В DOM 2 добавлена поддержка динамических таблиц стилей произвольного типа, хотя на сегодняшний день единственным языком таблиц стилей является CSS. Как указано в п. 2.1.2, в HTML таблица стилей может быть либо внешней (и задаваться элементом LINK), либо внутренней (и задаваться элементом STYLE).

В XML таблицы стилей могут быть только внешними и задаются директивой xml-stylesheet, имеющей следующий вид:

Синтаксис: <?xml-stylesheet атрибуты?>
Атрибуты:  href = CDATA #REQUIRED (URI таблицы стилей)
           type = CDATA #REQUIRED (тип файла таблицы стилей)
           title = CDATA #IMPLIED (титул таблицы стилей)
           media = CDATA #IMPLIED (список устройства отображения)
           charset = CDATA #IMPLIED (кодировка таблицы стилей)
           alternate = (yes|no) "no"

Здесь атрибуты href, title, media и charset в точности
        соответствуют атрибутам HTML-элемента <LINK rel="StyleSheet">.
        Атрибут alternate="yes" означает, что данная директива имеет семантику элемента
        <LINK rel="Alternate StyleSheet">. Примеры:

<?xml-stylesheet href="mystyle.css" type="text/css" media="screen"?>
<?xml-stylesheet alternate="yes" href="mystyle.css" media="print" type="text/css"?>

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

Описанные в этой главе интерфейсы не являются обязательными для реализации DOM. Если реализация их поддерживает, то рекомендуется, чтобы ее метод DOMImplementation.hasFeature возвращал true при соответствующем запросе.

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

4.9.2. Списки устройств: интерфейс MediaList

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Интерфейс MediaList соответствует списку устройств отображения, к которым применима таблица стилей. Он представляет собой массив строк, содержащих имена устройств, и имеет следующие свойства и методы:

Свойства интерфейса MediaList
Свойство | Изменяемое | Модель | Описание
length | Нет | DOM 2 | Размер списка устройств.
mediaText | Да | DOM 2 | Текстовое представление списка устройств.
Методы интерфейса MediaList
Метод | Модель | Описание
appendMedium | DOM 2 | Добавляет новое устройство в конец списка.
deleteMedium | DOM 2 | Удаляет заданное устройство из списка.
item | DOM 2 | Возвращает элемент списка с заданным номером.

Свойство length

Синтаксис:  объект.length
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство length возвращает количество элементов в данном списке устройств.

Свойство mediaText

Синтаксис:  объект.mediaText
Изменяемое: да
Иcключения: SYNTAX_ERR, NO_MODIFICATION_ALLOWED_ERR (при записи)
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

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

document.styleSheets[0].media.mediaText = "screen, print";

Метод appendMedium

Синтаксис:  объект.appendMedium(newMedium)
Аргументы:  newMedium — выражение типа DOMString
Иcключения: INVALID_CHARACTER_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод appendMedium добавляет устройство newMedium в конец списка устройств. Если это устройство уже есть в списке, то оно будет сначала удалено из него, а затем добавлено. Пример:

document.styleSheets[0].media.appendMedium("print");

Метод deleteMedium

Синтаксис:  объект.deleteMedium(oldMedium)
Аргументы:  oldMedium — выражение типа DOMString
Иcключения: NOT_FOUND_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод deleteMedium удаляет устройство oldMedium из списка устройств. Если этого устройства нет в списке, то генерируется исключение. Пример:

document.styleSheets[0].media.deletedMedium("print");

Метод item

Синтаксис:  объект.item(index)
Аргументы:  index — числовое выражение
Результат:  DOMString или null
Иcключения: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод item возвращает элемент списка устройств с номер index. Допустимые значения индекса лежат в диапазоне от 0 до объект.length-1 включительно. Если index выходит за пределы этого диапазона, то возвращается null. Пример:

alert(document.styleSheets[0].media.item(1));

JavaScript позволяет задать обращение к элементам списка более компактным образом. Например, приведенный пример можно записать и так:

alert(document.styleSheets[0].media[1]);

4.9.3. Таблицы стилей: интерфейс StyleSheet

Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Интерфейс StyleSheet соответствует одной таблице стилей, подключаемой к XML- или HTML-документу. Он имеет следующие свойства:

Свойства интерфейса StyleSheet
Свойство | Изменяемое | Модель | Описание
disabled | Да | DOM 2 | Запрещена ли таблица.
href | Нет | DOM 2 | URL внешней таблицы стилей.
media | Нет | DOM 2 | Устройства отображения.
ownerNode | Нет | DOM 2 | Элемент-владелец таблицы.
parentStyleSheet | Нет | DOM 2 | Родительская таблица стилей.
title | Нет | DOM 2 | Титул таблицы.
type | Нет | DOM 2 | Язык таблицы стилей.

Свойство disabled

Синтаксис:  объект.disabled
Изменяемое: да
Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Свойство disabled возвращает true, если таблица запрещена, и false в противном случае. Запрещение таблицы стилей означает, что она не будет применяться к текущему документу. Точнее говоря, таблица стилей применяется к документу тогда и только тогда, когда она применима к текущему устройству отображения и ее свойство disabled равно false. Пример:

document.styleSheets[0].disabled = true;

Свойство href

Синтаксис:  объект.href
Изменяемое: нет
Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Свойство href возвращает URI файла таблицы стилей для внешних таблиц и null для внутренних таблиц. Если адрес таблицы был задан относительным URI, то MSHTML вернет относительный URI, а Gecko — полный URI. Например,

<LINK rel=stylesheet href="ie4.css">
...
alert(document.styleSheets[0].href);

выведет в Internet Explorer строку ie4.css, а в Gecko строку вида http://mysite.com/ie4.css.

Свойство media

Синтаксис:  объект.media
Изменяемое: нет
Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

Свойство media возвращает объект MediaList, содержащий список устройств отображения, к которым применима данная таблица стилей. Если атрибут media таблицы стилей не был задан, то список устройств пуст, что соответствует устройству "all" (все типы устройств). Пример:

alert(document.styleSheets[0].media.mediaText);

Internet Explorer не поддерживает объект MediaList, поэтому в нем данное свойство возвращает строку, содержащую список устройств через запятую, т. е. media здесь эквивалентно media.mediaText стандарта.

Свойство ownerNode

Синтаксис:  объект.ownerNode
Изменяемое: нет
Поддержка:   Internet Explorer  Только для HTML-документов под названием owningElement.
             Gecko  Соответствует стандарту.

Свойство ownerNode возвращает ссылку на объект Node, соответствующий узлу документа, ссылающемуся на данную таблицу стилей. Как указывалось выше, в HTML-документе таблица стилей задается либо элементом LINK, либо элементом STYLE; в XML-документе данное свойство должно указывать на узел типа ProcessingInstruction, содержащий директиву xml-stylesheet. Для таблиц стилей, подключенных к документу через другие таблицы стилей, это свойство равно null. Пример: в Gecko

alert(document.styleSheets[0].ownerNode.tagName);

в Internet Explorer:

alert(document.styleSheets[0].owningElement.tagName);

Свойство parentStyleSheet

Синтаксис:  объект.parentStyleSheet
Изменяемое: нет
Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Если язык таблицы стилей допускает включение одних таблиц стилей в другие (таков, в частности, CSS2), и данная таблица подключена к документу через другую таблицу стилей, то свойство parentStyleSheet возвращает ссылку на объект StyleSheet, соответствующий таблице стилей, в которую включена данная таблица. В остальных случаях это свойство равно null. Следующий пример выводит на экран URI таблицы стилей верхнего уровня, содержащую данную таблицу стилей в качестве вложенного потомка.

var ss = document.styleSheets[0];
while (ss.parentStyleSheet)
  ss = ss.parentStyleSheet;
alert(ss.href);

Свойство title

Синтаксис:  объект.title
Изменяемое: нет
Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Свойство title возвращает титул узла-владельца данной таблицы стилей, т. е. значение свойства ownerNode.title. Пример:

alert(document.styleSheets[0].title);

Свойство type

Синтаксис:  объект.type
Изменяемое: нет
Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Свойство type возвращает язык данной таблицы стилей, т. е. значение свойства ownerNode.type. Если втрибут type узла-владельца не задан, то MSHTML вернет пустую строку, а Gecko — строку "text/css", соответствующую языку таблиц стилей, принятому по умолчанию. Пример:

alert(document.styleSheets[0].type);

4.9.4. Списки таблиц стилей: интерфейс StyleSheetList

Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Интерфейс StyleSheetList реализует упорядоченные списки таблиц стилей. Он имеет единственное свойство length, возвращающее количество таблиц в списке, и единственный метод item, возвращающий элемент списка с заданным номером (элементы списка нумеруются, начиная с нуля).

Свойство length

Синтаксис:  список.length
Изменяемое: нет
Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Свойство length возвращает количество таблиц в данном списке. Допустимые индексы элементов списка лежат в диапазоне от 0 до length-1 включительно. Следующий пример выводит на экран количество таблиц стилей в документе:

alert(document.styleSheets.length);

Метод item

Синтаксис:  список.item(index)
Аргументы:  index — числовое выражение
Результат:  объект StyleSheet или null
Исключения: нет
Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Метод item возвращает элемент списка таблиц с заданным индексом в качестве результата. Если индекс выходит за пределы диапазона элементов списка, то возвращается null. Пример:

alert(document.styleSheets.item(0).href);

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

alert(document.styleSheets[0].href);

Internet Explorer поддерживает еще одну форму обращения к элементу списка, а именно:

alert(document.styleSheets(0).href);

Однако, эта форма является нестандартной, и ей лучше не пользоваться.

4.9.5. Таблицы стилей на языке CSS

Для практической реализации динамических стилей мы должны перейти от абстрактных интерфейсов, описанных выше, к их конкретной реализации применительно к языку CSS (точнее, CSS2). Такой конкретизацией интерфейса StyleSheet для CSS является интерфейс CSSStyleSheet, который обеспечивает доступ к коллекции правил, содержащихся в таблице стилей, и содержит методы, позволяющие изменять эту коллекцию. Но прежде, чем перейти к его описанию, мы должны описать интерфейсы, соответствующие отдельных правилам и директивам языка CSS. Все эти интерфейсы являются производными от базового интерфейса CSSRule, с которого мы и начнем рассмотрение.

Все объекты, связанные с CSS, являются "живыми" в том смысле, что изменение таблицы стилей влечет изменение всех соответствующих стилей.

4.9.6. Операторы CSS: интерфейс CSSRule

Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

Интерфейс CSSRule — это базовый абстрактный интерфейс для представления операторов языка CSS, включая и директивы, и правила этого языка. Он имеет следующие свойства:

Свойства интерфейса CSSRule
Свойство | Изменяемое | Модель | Описание
cssText | Да | DOM 2 | Текст оператора.
parentRule | Нет | DOM 2 | Директива, содержащая данный оператор.
parentStyleSheet | Нет | DOM 2 | Таблица стилей, содержащая данный оператор.
type | Нет | DOM 2 | Тип оператора.

Свойство cssText

Синтаксис:  объект.cssText
Изменяемое: да
Иcключения: SYNTAX_ERR, INVALID_MODIFICATION_ERR, HIERARCHY_REQUEST_ERR,
            NO_MODIFICATION_ALLOWED_ERR (при записи)
Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

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

alert(document.styleSheets[0].cssRules[0].cssText);

В Internet Explorer этот оператор должен выглядеть так:

alert(document.styleSheets[0].rules[0].style.cssText);

Свойство parentRule

Синтаксис:  объект.parentRule
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Если данный оператор вложен в другой оператор CSS (например, в директиву @media), то свойство parentRule возвращает объект CSSRule для оператора, содержащего данный. В противном случае возвращается null. Пример:

alert(document.styleSheets[0].cssRules[0].parentRule);

В объектной модели MSHTML директивы CSS недоступны, и ссылку на оператор, содержащий данный, получить невозможно.

Свойство parentStyleSheet

Синтаксис:  объект.parentStyleSheet
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство parentStyleSheet возвращает объект CSSStyleSheet, соответствующий таблице стилей, содержащее данный оператор. Пример:

alert(document.styleSheets[0].cssRules[0].parentStyleSheet);

В MSHTML правила CSS не содержат ссылки на свою таблицу стилей.

Свойство type

Синтаксис:  объект.type
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство type возвращает целое число, означающее тип данного оператора CSS в соответствии со следующей таблицей:

Таблица 4.5. Типы операторов CSS
Название | Значение | Интерфейс | Описание
UNKNOWN_RULE | 0 | CSSUnknownRule | Неизвестный оператор
STYLE_RULE | 1 | CSSStyleRule | Правило CSS
CHARSET_RULE | 2 | CSSCharsetRule | Директива @charset
IMPORT_RULE | 3 | CSSImportRule | Директива @import
MEDIA_RULE | 4 | CSSMediaRule | Директива @media
FONT_FACE_RULE | 5 | CSSFontFaceRule | Директива @font-face
PAGE_RULE | 6 | CSSPageRule | Директива @page

В объектной модели MSHTML доступны только правила CSS, но не директивы, поэтому данное свойство лишено смысла и не поддерживается.

4.9.7. Правила CSS: интерфейс CSSStyleRule

Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

Интерфейс CSSStyleRule — это интерфейс, производный от CSSRule и соответствующий одному правилу языка CSS. Напомним, что правило CSS состоит из селектора и блока деклараций. Поэтому данный интерфейс имеет два дополнительных свойства:

Свойства интерфейса CSSStyleRule
Свойство | Изменяемое | Модель | Описание
selectorText | Да | DOM 2 | Текст селектора.
style | Нет | DOM 2 | Блок деклараций.

Свойство selectorText

Синтаксис:  объект.selectorText
Изменяемое: да
Иcключения: SYNTAX_ERR, NO_MODIFICATION_ALLOWED_ERR (при записи)
Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

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

alert(document.styleSheets[0].cssRules[0].selectorText);

В Internet Explorer этот оператор должен выглядеть так:

alert(document.styleSheets[0].rules[0].selectorText);

Свойство style

Синтаксис:  объект.style
Изменяемое: нет
Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

Свойство style возвращает объект CSSStyleDeclaration, содержащий блок деклараций данного правила. Пример чтения значения отдельного свойства CSS:

alert(document.styleSheets[0].cssRules[0].style.fontFamily);

В Internet Explorer этот оператор должен выглядеть так:

alert(document.styleSheets[0].rules[0].style.fontFamily);

4.9.8. Директива @media: интерфейс CSSMediaRule

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс CSSMediaRule — это интерфейс, производный от CSSRule и соответствующий директиве @media. Он имеет следующие дополнительные свойства и методы:

Свойства интерфейса CSSMediaRule
Свойство | Изменяемое | Модель | Описание
cssRules | Нет | DOM 2 | Коллекция правил директивы.
media | Нет | DOM 2 | Коллекция устройств отображения.
Методы интерфейса CSSMediaRule
Метод | Модель | Описание
deleteRule | DOM 2 | Удаляет заданное правило.
insertRule | DOM 2 | Вставляет новое правило.

Свойство cssRules

Синтаксис:  объект.cssRules
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство cssRules возвращает объект CSSRuleList, содержащий список правил данной директивы. Пример:

alert(document.styleSheets[0].cssRules[0].cssRules.length);

Свойство media

Синтаксис:  объект.media
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство media возвращает объект MediaList, содержащий список устройств отображения данной директивы. Пример:

alert(document.styleSheets[0].cssRules[0].media.length);

Метод deleteRule

Синтаксис:  объект.deleteRule(index)
Аргументы:  index — числовое выражение
Исключения: INDEX_SIZE_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод deleteRule удаляет правило с номером index из коллекции cssRules. Индекс должен лежать в диапазоне от 0 до cssRules.length-1 включительно. Пример:

document.styleSheets[0].cssRules[0].deleteRule(0);

Метод insertRule

Синтаксис:  объект.insertRule(rule, index)
Аргументы:  rule — выражение типа DOMString
            index — числовое выражение
Исключения: HIERARCHY_REQUEST_ERR, INDEX_SIZE_ERR, NO_MODIFICATION_ALLOWED_ERR,
            SYNTAX_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод insertRule вставляет новое правило в коллекцию cssRules перед правилом с номером index. Текст правила, включая селектор и декларацию, задается аргументом rule. Индекс должен лежать в диапазоне от 0 до cssRules.length; если он равен cssRules.length, то новое правило добавляется в конец коллекции. Пример:

document.styleSheets[0].cssRules[0].insertRule("BODY { color: red }", 0);

4.9.9. Директива @font-face: интерфейс CSSFontFaceRule

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс CSSFontFaceRule — это интерфейс, производный от CSSRule и соответствующий директиве @font-face. Он имеет одно дополнительное свойство style.

Свойство style

Синтаксис:  объект.style
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство style возвращает объект CSSStyleDeclaration, содержащий блок деклараций данной директивы. Пример чтения значения отдельного дескриптора шрифта:

alert(document.styleSheets[0].cssRules[0].style.fontFamily);

4.9.10. Директива @page: интерфейс CSSPageRule

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс CSSPageRule — это интерфейс, производный от CSSRule и соответствующий директиве @page. Он имеет два дополнительных свойства selectorText и style, которые соответствуют одноименным свойствам интерфейса CSSStyleRule.

4.9.11. Директива @import: интерфейс CSSImportRule

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс CSSImportRule — это интерфейс, производный от CSSRule и соответствующий директиве @import. Он имеет следующие дополнительные свойства:

Свойства интерфейса CSSImportRule
Свойство | Изменяемое | Модель | Описание
href | Нет | DOM 2 | URI импортируемой таблицы стилей.
media | Нет | DOM 2 | Коллекция устройств отображения.
styleSheet | Нет | DOM 2 | Указатель на импортируемую таблицу стилей.

Свойство href

Синтаксис:  объект.href
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство href возвращает URI файла импортируемой таблицы стилей, например,

alert(document.styleSheets[0].cssRules[0].href);

Свойство media

Синтаксис:  объект.media
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство media возвращает объект MediaList, содержащий список устройств отображения данной директивы. Пример:

alert(document.styleSheets[0].cssRules[0].media.length);

Свойство styleSheet

Синтаксис:  объект.styleSheet
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство styleSheet возвращает объект CSSStyleSheet, соответствующий таблице стилей, импортируемой данной директивой. Если таблица стилей еще не загружена (или не будет загружена из-за того, что текущего устройства отображения нет в списке устройств директивы), то возвращается null. Пример:

alert(document.styleSheets[0].cssRules[0].styleSheet);

4.9.12. Директива @charset: интерфейс CSSCharsetRule

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс CSSCharsetRule — это интерфейс, производный от CSSRule и соответствующий директиве @charset. Он имеет одно дополнительное свойство encoding.

Свойство encoding

Синтаксис:  объект.encoding
Изменяемое: нет
Иcключения: SYNTAX_ERR, NO_MODIFICATION_ALLOWED_ERR (при записи)
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство encoding позволяет читать и устанавливать название кодировки символов. Важно понимать, что эта кодировка не влияет на текстовые данные объектов DOM, которые всегда хранятся в кодировке UTF-16. Поэтому данное свойство нужно только для правильной перекодировки исходных документов в Unicode при их загрузке и обратной перекодировки при записи документов. Пример:

document.styleSheets[0].cssRules[0].encoding = "windows-1251";

4.9.13. Неизвестный оператор: интерфейс CSSUnknownRule

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Стандарт требует, чтобы анализатор XML- и HTML-документов включал в коллекцию операторов все найденные в таблице стилей операторы, даже если они не могут быть распознаны анализатором. Для хранения таких неопознанных операторов введен интерфейс CSSUnknownRule, производный от CSSRule и не имеющий собственных свойств и методов.

4.9.14. Списки операторов CSS: интерфейс CSSRuleList

Поддержка:   Internet Explorer  Нестандартная, только для HTML-документов.
             Gecko  Соответствует стандарту.

Интерфейс CSSRuleList реализует упорядоченные списки операторов CSS. Он имеет единственное свойство length, возвращающее количество элементов в списке, и единственный метод item, возвращающий элемент списка с заданным номером (элементы списка нумеруются, начиная с нуля).

Свойство length

Синтаксис:  список.length
Изменяемое: нет
Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Свойство length возвращает количество операторов в данном списке. Допустимые индексы элементов списка лежат в диапазоне от 0 до length-1 включительно. Следующий пример выводит на экран количество операторов в первой таблице стилей документа:

alert(document.styleSheets[0].cssRules.length); // в Gecko
alert(document.styleSheets[0].rules.length);    // в Internet Explorer

Метод item

Синтаксис:  список.item(index)
Аргументы:  index — числовое выражение
Результат:  объект CSSRule или null
Исключения: нет
Поддержка:   Internet Explorer  Только для HTML-документов.
             Gecko  Соответствует стандарту.

Метод item возвращает элемент списка операторов с заданным индексом в качестве результата. Если индекс выходит за пределы диапазона элементов списка, то возвращается null. Пример:

alert(document.styleSheets[0].cssRules.item(0).cssText);

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

alert(document.styleSheets[0].cssRules[0].cssText);

Internet Explorer поддерживает еще одну форму обращения к элементу списка, а именно:

alert(document.styleSheets[0].rules(0).style.cssText);

Однако, эта форма является нестандартной, и ей лучше не пользоваться.

4.9.15. Таблицы стилей CSS: интерфейс CSSStyleSheet

Поддержка:   Internet Explorer  Нестандартная, только для HTML-документов.
             Gecko  Соответствует стандарту.

Интерфейс CSSStyleSheet соответствует одной таблице стилей на языке CSS. Он является производным от интерфейса StyleSheet и имеет следующие дополнительные свойства и методы:

Свойства интерфейса CSSStyleSheet
Свойство | Изменяемое | Модель | Описание
cssRules | Нет | DOM 2 | Коллекция операторов таблицы.
ownerRule | Нет | DOM 2 | Директива, которой импортирована данная таблица.
Методы интерфейса CSSStyleSheet
Метод | Модель | Описание
deleteRule | DOM 2 | Удаляет заданное правило из таблицы.
insertRule | DOM 2 | Вставляет новое правило в таблицу.

Свойство cssRules

Синтаксис:  объект.cssRules
Изменяемое: нет
Поддержка:   Internet Explorer  Под названием rules.
             Gecko  Соответствует стандарту.

Свойство cssRules возвращает объект CSSRuleList, содержащий список всех операторов данной таблицы стилей. Пример:

alert(document.styleSheets[0].cssRules[0].cssText);

В Internet Explorer это свойство называется rules и возвращает коллекцию всех правил таблицы, т. е. директивы в нее не включаются:

alert(document.styleSheets[0].rules[0].style.cssText);

Свойство ownerRule

Синтаксис:  объект.ownerRule
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Если данная таблица стилей импортирована директивой @import, то свойство ownerRule возвращает объект CSSImportRule, соответствующий этой директиве. В этом случае свойство таблицы ownerNode равно null. В остальных случаях данное свойство возвращает null. Пример:

var imported = document.styleSheets[0].ownerRule != null;
var external = document.styleSheets[0].ownerNode.tagName == "link";
var sstype = (imported ? "импортированная" : (external ? "внешняя" : "внутренняя"));
alert(sstype + " таблица");

Internet Explorer это свойство не поддерживает. Вместо него таблицы содержат нестандартное свойство imports, которое возвращает коллекцию всех таблиц, импортированных данной таблицей, и метод addImport(URL, index), добавляющий таблицу с заданным URL в эту коллекцию (аргумент index следует тем же правилам, что и в методе addRule).

Метод deleteRule

Синтаксис:  объект.deleteRule(index)
Аргументы:  index — числовое выражение
Исключения: INDEX_SIZE_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Под названием removeRule.
             Gecko  Соответствует стандарту.

Метод deleteRule удаляет правило с номером index из коллекции cssRules. Индекс должен лежать в диапазоне от 0 до cssRules.length-1 включительно. Пример:

document.styleSheets[0].deleteRule(0);

В Internet Explorer этот метод называется removeRule и аргумент index в нем может быть опущен; в этом случае удаляется первое правило коллекции:

document.styleSheets[0].removeRule();

Метод insertRule

Синтаксис:  объект.insertRule(rule, index)
Аргументы:  rule — выражение типа DOMString
            index — числовое выражение
Исключения: HIERARCHY_REQUEST_ERR, INDEX_SIZE_ERR, NO_MODIFICATION_ALLOWED_ERR,
            SYNTAX_ERR
Поддержка:   Internet Explorer  Под названием addRule.
             Gecko  Соответствует стандарту.

Метод insertRule вставляет новое правило в коллекцию cssRules перед правилом с номером index. Текст правила, включая селектор и декларацию, задается аргументом rule. Индекс должен лежать в диапазоне от 0 до cssRules.length; если он равен cssRules.length, то новое правило добавляется в конец коллекции. Пример:

document.styleSheets[0].insertRule("BODY { color: red }", 0);

В Internet Explorer этот метод называется addRule и имеет вид addRule(selector, style, index), где selector — текст селектора, style — текст декларации свойств, а index — позиция вставки нового правила. Если аргумент index опущен, то правило добавляется в конец коллекции. Пример:

document.styleSheets[0].addRule("BODY", "color: red", 0);


WDH: DHTML - Динамическое управление стилями

Глава 4.10. Динамическое управление стилями

4.10.1. Способы доступа к стилям

DOM 2 содержит специальный интерфейс CSSStyleDeclaration, который предназначен для описания блоков деклараций CSS. Этот интерфейс используется и для описания содержимого правил CSS, и для описания стилей отдельных элементов дерева документа. Он имеет чрезмерно усложненную, на наш взгляд, структуру и обеспечивает три разных способа доступа к отдельным свойствам CSS, а именно:

  1. чтение и запись свойств, при которых и название свойства, и его значение задаются текстовой строкой согласно правилам CSS;
  2. чтение и запись свойств, при которых название свойства, задается текстовой строкой согласно правилам CSS, а значение является объектом специального типа CSSValue;
  3. чтение и запись свойств, при которых свойство задается соответствующим атрибутом объекта CSSStyleDeclaration, а его значение задается текстовой строкой согласно правилам CSS.

Пусть, например, мы хотим сделать фон тела документа красным. Соответствующие операторы будут выглядеть так:

document.body.style.setProperty("background-color", "red", "");
document.body.style.backgroundColor = "red";

Первый оператор использует имя свойства CSS, а второй — соответствующее свойство объекта document.body.style. Для чтения цвета фона возможны три варианта:

var clr1 = document.body.style.getPropertyValue("background-color");
var clr2 = document.body.style.getPropertyCSSValue("background-color");
var clr3 = document.body.style.backgroundColor;

Здесь clr1 и clr3 получат тип String, а clr2 — тип CSSValue. DOM 2 объявил первые два способа обязательными, а третий (называемый интерфейсом CSS2Properties) — факультативным. Однако, разработчики обозревателей расставили приоритеты иначе: и MSHTML, и Gecko поддерживают именно третий интерфейс. MSHTML этим ограничивается, а Gecko поддерживает свойства и методы CSSStyleDeclaration, но пока не поддерживает CSSValue. Тем не менее мы приводим описание всех интерфейсов DOM, поскольку следующие версии обозревателей, скорее всего, обеспечат их реализацию.

4.10.2. Значение свойства CSS: интерфейс CSSValue

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс CSSValue соответствует значению одного свойства CSS. Он имеет два свойства:

Свойства интерфейса CSSValue
Свойство | Изменяемое | Модель | Описание
cssText | Да | DOM 2 | Текст значения.
cssValueType | Нет | DOM 2 | Тип значения.

Свойство cssText

Синтаксис:  объект.cssText
Изменяемое: да
Иcключения: SYNTAX_ERR, INVALID_MODIFICATION_ERR,
            NO_MODIFICATION_ALLOWED_ERR (при записи)
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство cssText позволяет читать и задавать значение свойства в виде строки DOMString.

Свойство cssValueType

Синтаксис:  объект.cssValueType
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство cssValueType возвращает целое число, означающее тип данного значения в соответствии со следующей таблицей:

Таблица 4.6. Типы значений свойств CSS
Название | Значение | Описание
CSS_INHERIT | 0 | Наследуемое значение. cssText равно "inherit".
CSS_PRIMITIVE_VALUE | 1 | Примитивное значение. См. интерфейс CSSPrimitiveValue.
CSS_VALUE_LIST | 2 | Список значений. См. интерфейс CSSValueList.
CSS_CUSTOM | 3 | Прочие значения.

4.10.3. Примитивное значение свойства: интерфейс CSSPrimitiveValue

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс CSSPrimitiveValue соответствует примитивному значению свойства CSS. Он является производным от CSSValue и имеет следующие дополнительные свойства и методы:

Свойства интерфейса CSSPrimitiveValue
Свойство | Изменяемое | Модель | Описание
primitiveType | Нет | DOM 2 | Тип примитивного значения.
Методы интерфейса CSSPrimitiveValue
Метод | Модель | Описание
getCounterValue | DOM 2 | Возвращает значение счетчика.
getFloatValue | DOM 2 | Возвращает числовое значение.
getRectValue | DOM 2 | Возвращает значение прямоугольника.
getRGBColorValue | DOM 2 | Возвращает RGB-значение цвета.
getStringValue | DOM 2 | Возвращает строковое значение.
setFloatValue | DOM 2 | Задает числовое значение.
setStringValue | DOM 2 | Задает строковое значение.

Свойство primitiveType

Синтаксис:  объект.primitiveType
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство primitiveType возвращает целое число, означающее тип данного примитивного значения в соответствии со следующей таблицей:

Таблица 4.7. Типы примитивных значений свойств CSS
Название | Значение | Описание
CSS_UNKNOWN | 0 | Неопознанное значение.
CSS_NUMBER | 1 | Число.
CSS_PERCENTAGE | 2 | Процентное значение.
CSS_EMS | 3 | Размер в em.
CSS_EXS | 4 | Размер в ex.
CSS_PX | 5 | Размер в пикселях (px).
CSS_CM | 6 | Размер в см.
CSS_MM | 7 | Размер в мм.
CSS_IN | 8 | Размер в дюймах.
CSS_PT | 9 | Размер в точках (pt).
CSS_PC | 10 | Размер в пиках (pc).
CSS_DEG | 11 | Угол в градусах.
CSS_RAD | 12 | Угол в радианах.
CSS_GRAD | 13 | Угол в градах.
CSS_MS | 14 | Время в мсек.
CSS_S | 15 | Время в сек.
CSS_HZ | 16 | Частота в Гц.
CSS_KHZ | 17 | Частота в кГц.
CSS_DIMENSION | 18 | Число с неизвестной единицей измерения.
CSS_STRING | 19 | Строка.
CSS_URI | 20 | URI.
CSS_IDENT | 21 | Идентификатор.
CSS_ATTR | 22 | Функция attr(x).
CSS_COUNTER | 23 | Счетчик.
CSS_RECT | 24 | Прямоугольник rect(top, right, bottom, left)
CSS_RGBCOLOR | 25 | Цвет.

Метод getCounterValue

Синтаксис:  объект.getCounterValue()
Результат:  значение типа Counter
Иcключения: INVALID_ACCESS_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод getCounterValue возвращает объект Counter, содержащий значение счетчика. Если primitiveType отличен от CSS_COUNTER, то генерируется исключение.

Метод getFloatValue

Синтаксис:  объект.getFloatValue(unitType)
Аргументы:  unitType — числовое выражение
Результат:  числовое значение
Иcключения: INVALID_ACCESS_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод getFloatValue возвращает числовое значение объекта, приведенное к единице измерения unitType, которая должна иметь одно из следующих значений: CSS_NUMBER, CSS_PERCENTAGE, CSS_EMS, CSS_EXS, CSS_PX, CSS_CM, CSS_MM, CSS_IN, CSS_PT, CSS_PC, CSS_DEG, CSS_RAD, CSS_GRAD, CSS_MS, CSS_S, CSS_HZ, CSS_KHZ, CSS_DIMENSION. Если значение не является числовым или не может быть преобразовано к заданной единице измерения, то генерируется исключение.

Метод getRectValue

Синтаксис:  объект.getRectValue()
Результат:  значение типа Rect
Иcключения: INVALID_ACCESS_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод getRectValue возвращает объект Rect, содержащий значение прямоугольника. Если primitiveType отличен от CSS_RECT, то генерируется исключение.

Метод getRGBColorValue

Синтаксис:  объект.getRGBColorValue()
Результат:  значение типа RGBColor
Иcключения: INVALID_ACCESS_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод getRGBColorValue возвращает объект RGBColor, содержащий значение цвета. Если primitiveType отличен от CSS_RGBCOLOR, то генерируется исключение.

Метод getStringValue

Синтаксис:  объект.getStringValue()
Результат:  значение типа DOMString
Иcключения: INVALID_ACCESS_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод getStringValue возвращает строковое значение объекта. primitiveType должен указывать на строковый тип значения (т. е. иметь одно из следующих значений: CSS_STRING, CSS_URI, CSS_IDENT или CSS_ATTR). В противном случае генерируется исключение.

Метод setFloatValue

Синтаксис:  объект.setFloatValue(unitType, value)
Аргументы:  unitType, value — числовые выражения
Иcключения: INVALID_ACCESS_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод setFloatValue задает новое числовое значение value с единицей измерения unitType, которая должна иметь одно из следующих значений: CSS_NUMBER, CSS_PERCENTAGE, CSS_EMS, CSS_EXS, CSS_PX, CSS_CM, CSS_MM, CSS_IN, CSS_PT, CSS_PC, CSS_DEG, CSS_RAD, CSS_GRAD, CSS_MS, CSS_S, CSS_HZ, CSS_KHZ, CSS_DIMENSION. Если данное свойство не может принимать значений такого типа или с такой единицей измерения, то генерируется исключение.

Метод setStringValue

Синтаксис:  объект.setStringValue(stringType, value)
Аргументы:  stringType — числовое выражение
            value — выражение типа DOMString
Иcключения: INVALID_ACCESS_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод setStringValue задает новое строковое значение value. Аргумент stringType должен иметь одно из следующих значений: CSS_STRING, CSS_URI, CSS_IDENT или CSS_ATTR. Если данное свойство не может принимать значений такого типа, то генерируется исключение.

4.10.4. Списки свойств: интерфейс CSSValueList

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс CSSValueList реализует упорядоченные списки свойств CSS. Он имеет единственное свойство length, возвращающее количество свойств в списке, и единственный метод item, возвращающий элемент списка с заданным номером (элементы списка нумеруются, начиная с нуля). Пустой список означает, что соответствующее свойство имеет значение none.

Свойство length

Синтаксис:  список.length
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство length возвращает количество элементов в данном списке. Допустимые индексы элементов списка лежат в диапазоне от 0 до length-1 включительно.

Метод item

Синтаксис:  список.item(index)
Аргументы:  index — числовое выражение
Результат:  объект CSSValue или null
Исключения: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод item возвращает элемент списка свойств с заданным индексом в качестве результата. Если индекс выходит за пределы диапазона элементов списка, то возвращается null.

4.10.5. Цвет: интерфейс RGBColor

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс RGBColor соответствует цветам CSS. Он имеет три свойства, возвращающих числовые значения RGB-составляющих данного цвета:

Свойства интерфейса RGBColor
Свойство | Изменяемое | Модель | Описание
blue | Нет | DOM 2 | Синий цвет.
green | Нет | DOM 2 | Зеленый цвет.
red | Нет | DOM 2 | Красный цвет.

Свойство blue

Синтаксис:  объект.blue
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство blue возвращает значение синего цвета типа CSSPrimitiveValue в диапазоне от 0 до 255 или от 0% до 100%.

Свойство green

Синтаксис:  объект.green
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство green возвращает значение зеленого цвета типа CSSPrimitiveValue в диапазоне от 0 до 255 или от 0% до 100%.

Свойство red

Синтаксис:  объект.red
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство red возвращает значение красного цвета типа CSSPrimitiveValue в диапазоне от 0 до 255 или от 0% до 100%.

4.10.6. Прямоугольник: интерфейс Rect

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс Rect соответствует прямоугольникам CSS. Он имеет четыре свойства, возвращающих координаты данного прямоугольника:

Свойства интерфейса Rect
Свойство | Изменяемое | Модель | Описание
bottom | Нет | DOM 2 | Нижняя координата.
left | Нет | DOM 2 | Левая координата.
right | Нет | DOM 2 | Правая координата.
top | Нет | DOM 2 | Верхняя координата.

Свойство bottom

Синтаксис:  объект.bottom
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство bottom возвращает нижнюю координату прямоугольника типа CSSPrimitiveValue.

Свойство left

Синтаксис:  объект.left
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство left возвращает левую координату прямоугольника типа CSSPrimitiveValue.

Свойство right

Синтаксис:  объект.right
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство right возвращает правую координату прямоугольника типа CSSPrimitiveValue.

Свойство top

Синтаксис:  объект.top
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство top возвращает верхнюю координату прямоугольника типа CSSPrimitiveValue.

4.10.7. Счетчик: интерфейс Counter

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс Counter соответствует счетчикам CSS. Он имеет следующие свойства:

Свойства интерфейса Counter
Свойство | Изменяемое | Модель | Описание
identifier | Нет | DOM 2 | Идентификатор счетчика.
listStyle | Нет | DOM 2 | Стиль счетчика.
separator | Нет | DOM 2 | Разделитель счетчиков.

Свойство identifier

Синтаксис:  объект.identifier
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство identifier возвращает идентификатор счетчика типа DOMString.

Свойство listStyle

Синтаксис:  объект.listStyle
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство listStyle возвращает стиль счетчика типа DOMString.

Свойство separator

Синтаксис:  объект.separator
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство separator возвращает разделитель типа DOMString, который используется между вложенными счетчиками.

4.10.8. Декларация стиля CSS: интерфейс CSSStyleDeclaration

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Поддерживается частично.

Интерфейс CSSStyleDeclaration предназначен для описания блоков деклараций CSS. Более подробно мы обсудили его в п. 4.10.1.

Свойства интерфейса CSSStyleDeclaration
Свойство | Изменяемое | Модель | Описание
cssText | Да | DOM 2 | Текст декларации стиля.
length | Нет | DOM 2 | Количество явно заданных свойств.
parentRule | Нет | DOM 2 | Правило CSS, содержащее данную декларацию.
Методы интерфейса CSSStyleDeclaration
Метод | Модель | Описание
getPropertyCSSValue | DOM 2 | Возвращает CSSValue, содержащее значение свойства.
getPropertyPriority | DOM 2 | Возвращает приоритет свойства.
getPropertyValue | DOM 2 | Возвращает строку, содержащую значение свойства.
item | DOM 2 | Возвращает имя свойства с заданным номером.
removeProperty | DOM 2 | Удаляет свойство.
setProperty | DOM 2 | Задает значение и приоритет свойства.

Свойство cssText

Синтаксис:  объект.cssText
Изменяемое: да
Иcключения: SYNTAX_ERR, NO_MODIFICATION_ALLOWED_ERR (при записи)
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Всегда пустая строка.

Свойство cssText соответствуют тексту декларации свойств в виде строки DOMString (без окружающих ее фигурных скобок). При задании этого свойства старые значения всех свойств CSS в декларации удаляются и заменяются на новые. Пример: сценарий

document.body.style.cssText = "font-size: 8px; font-family: Arial";
alert(document.body.style.cssText);

выведет в Internet Explorer строку FONT-SIZE: 8px; FONT-FAMILY: Arial, а в Gecko — пустую строку.

Свойство length

Синтаксис:  объект.length
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Поддерживается частично.

Свойство length возвращает количество свойств, явно заданных в данном блоке деклараций. Пример:

alert(document.styleSheets[0].cssRules[0].style.length);

Свойство parentRule

Синтаксис:  объект.parentRule
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Если данная декларация содержится в таблице стилей, то свойство parentRule возвращает объект CSSRule, содержащий ее. В противном случае возвращается null. Пример:

alert(document.styleSheets[0].cssRules[0].style.parentRule);

Метод getPropertyCSSValue

Синтаксис:  объект.getPropertyCSSValue(propertyName)
Аргументы:  propertyName — выражение типа DOMString
Результат:  значение типа CSSValue или null
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Всегда возвращает null.

Метод getPropertyCSSValue возвращает объект CSSValue, содержащий значение свойства propertyName. Если propertyName является сокращением, то возвращается null. Пример:

var rule = document.styleSheets[0].cssRules[0];
alert(rule.style.getPropertyCSSValue("font-size").cssText);

Метод getPropertyPriority

Синтаксис:  объект.getPropertyPriority(propertyName)
Аргументы:  propertyName — выражение типа DOMString
Результат:  значение типа DOMString
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод getPropertyPriority возвращает приоритет свойства propertyName. Его результатом может быть либо пустая строка, либо строка "!important", соответствующая атрибуту CSS !important. Пример:

var rule = document.styleSheets[0].cssRules[0];
alert(rule.style.getPropertyPriority("font-size"));

Метод getPropertyValue

Синтаксис:  объект.getPropertyValue(propertyName)
Аргументы:  propertyName — выражение типа DOMString
Результат:  значение типа DOMString
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод getPropertyValue возвращает строку, содержащую значение свойства propertyName. Пример:

var rule = document.styleSheets[0].cssRules[0];
alert(rule.style.getPropertyValue("font-size"));

Метод item

Синтаксис:  объект.item(index)
Аргументы:  index — числовое выражение
Результат:  значение типа DOMString
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод item возвращает строку, содержащую имя свойства с номером index. Пример:

alert(document.body.style.item(0));

Метод removeProperty

Синтаксис:  объект.removeProperty(propertyName)
Аргументы:  propertyName — выражение типа DOMString
Результат:  значение типа DOMString
Иcключения: NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод removeProperty удаляет свойство propertyName и возвращает его значение. Если свойство с этим именем не было явно задано в декларации, то возвращается пустая строка. Пример:

var rule = document.styleSheets[0].cssRules[0];
alert(rule.style.removeProperty("font-size"));

Метод setProperty

Синтаксис:  объект.setProperty(propertyName, value, priority)
Аргументы:  propertyName, value, priority — выражения типа DOMString
Результат:  значение типа DOMString
Иcключения: SYNTAX_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод setProperty задает значение и приоритет свойства propertyName. Значение свойства задается аргументом value, а приоритет — аргументом priority, который может быть либо строкой "!important", либо пустой строкой. Примеры:

document.body.style.setProperty("color", "red", "!important");
document.body.style.setProperty("background-color", "green", "");

4.10.9. Свойства CSS: интерфейс CSS2Properties

Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Интерфейс CSS2Properties является расширением интерфейса CSSStyleDeclaration, необязательным для реализации DOM. Тем не менее его поддерживают оба рассматриваемых нами обозревателя. Он обеспечивает чтение и запись свойств CSS через дополнительные свойства объекта CSSStyleDeclaration, имена которых соответствуют именам свойств CSS с поправкой на синтаксис языков программирования. Примеры его использования приведены в п. 4.10.1. Полный перечень свойств этого интерфейса и описание их поддержки обозревателями вы найдете в Приложении 16.

4.10.10. Специфицированные и вычисленные значения свойств

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

DOM 2 предусматривает возможность доступа к специфицированным и вычисленным значениям свойств. Для чтения и изменения специфицированных значений должен использоваться метод getOverrideStyle объекта Document, а для чтения вычисленных значений — метод getComputedStyle объекта AbstractView (т. е. в современных реализациях объекта window).

Метод getOverrideStyle

Синтаксис:  документ.getOverrideStyle(elt, pseudoElt)
Аргументы:  elt — выражение типа Element
            pseudoElt — выражение типа DOMString
Результат:  значение типа CSSStyleDeclaration
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Реализовано с ошибками.

Метод getOverrideStyle возвращает объект CSSStyleDeclaration, содержащий специфицированные значения свойств стилей элемента elt. Аргумент pseudoElt должен быть именем псевдоэлемента CSS или пустой строкой. Примеры:

var os = document.getOverrideStyle(document.body, "");
os.setProperty("background-color", "green", "");

Метод getComputedStyle

Синтаксис:  окно.getComputedStyle(elt, pseudoElt)
Аргументы:  elt — выражение типа Element
            pseudoElt — выражение типа DOMString
Результат:  значение типа CSSStyleDeclaration
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Реализовано с ошибками.

Метод getComputedStyle возвращает объект CSSStyleDeclaration, содержащий вычисленные значения свойств стилей элемента elt. Этот объект доступен только для чтения. Аргумент pseudoElt должен быть именем псевдоэлемента CSS или пустой строкой. Примеры:

var os = window.getComputedStyle(document.body, "");
alert(os.getProperty("background-color"));

В Internet Explorer доступ к специфицированным и вычисленным значениям свойств реализован иначе. Каждый HTML-элемент имеет помимо свойства style еще два свойства: runtimeStyle, содержащий его специфицированные свойства, и currentStyle, содержащий его вычисленные свойства. Оба эти свойства возвращают объект типа CSS2Properties. Примеры:

document.body.runtimeStyle.backgroundColor = "green";
alert(document.body.currentStyle.backgroundColor);


WDH: DHTML - Обработка событий в DOM

Глава 4.11. Обработка событий в DOM

4.11.1. Основные понятия

4.11.1.1. Генерация и распространение событий

В этой главе мы описываем модель обработки событий, принятую в DOM 2. Именно реакция на внешние события делает документы динамическими, поэтому методы и свойства, описанные в этой главе, служат клеем, соединяющим описанные ранее элементы DOM в единое и живое целое, реагирующее на различные события. Начнем с самого понятия событие. Все события в DOM 2 подразделяются на следующие:

  • Аппаратные события пользовательского интерфейса. Это события, вызванные взаимодействием пользователя с устройствами ввода-вывода (нажатие клавиши, движение мыши и т. п.)
  • Логические события пользовательского интерфейса. Это события, не связанные с внешними устройствами, например, получение от операционной системы сообщения о смене фокуса.
  • События, генерируемые изменением структуры документа, например, добавление нового элемента.

Модель событий DOM 2 пока реализована только в Gecko. Internet Explorer имеет свою модель генерации и обработки событий, которая описана в гл. 4.12.

WDH+ О различиях в обработке событий этими обозревателями см. WDH+: Прерывание скрипта.

Любое событие связано с конкретным узлом документа (цель события), доступным через интерфейс EventTarget, который указывается в свойстве target объекта Event, описывающего данное событие. Когда событие достигает своей цели, активизируются все обработчики событий данного узла, описываемые интерфейсом EventListener. При этом гарантируется, что все обработчики будут активизированы, но не оговаривается порядок, в котором это будет происходить. Если не произойдет перехвата или просачивания события, то процесс генерации события завершится, когда все обработчики будут активизированы. Этот процесс называется распространением события (event propagation). Если происходит перехват события или его просачивание, то процесс обработки события изменяется, как описано ниже.

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

4.11.1.2. Перехват события

Перехват события (event capture) состоит в следующем. Обработчик события любого предка цели может перехватить событие прежде, чем оно достигнет своей цели. Процесс перехвата действует сверху вниз от корня дерева документа, т. е. от объекта Document. В момент генерации события фиксируется цепочка его существующих обработчиков от корня дерева до узла-цели; если во время обработки события какие-то обработчики будут удалены или добавлены, то это не окажет влияния на процесс обработки данного события.

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

Если перехватывающий обработчик хочет прекратить дальнейшую обработку события, то он должен вызвать метод stopPropagation объекта Event. Тем самым он прекратит передачу события по цепочке узлов вниз. Однако, обработчики событий в узлах того же уровня иерархии все равно будут активизированы.

4.11.1.3. Просачивание события

Просачивание события (event bubbling) — это процесс, который происходит в направлении, противоположном перехвату. Он состоит в том, что после активизации обработчиков события узла-цели происходит активизация обработчиков этого события у элементов, являющихся предками этого узла вверх по дереву документа вплоть до его корня. Обработчики событий, зарегистрированные для перехвата событий, при этом не активизируются. В момент генерации события фиксируется цепочка его существующих обработчиков от узла-цели до корня дерева; если во время обработки события какие-то обработчики будут удалены или добавлены, то это не окажет влияния на процесс просачивания данного события.

Любой обработчик может прекратить дальнейшее просачивание события вызовом метода stopPropagation объекта Event. Тем самым он прекратит передачу события по цепочке узлов вверх. Однако, обработчики событий в этом узле будут активизированы.

Является событие просачивающимся или нет, определяется свойством bubbles его интерфейса Event.

4.11.1.4. Отмена события

Некоторые события являются отменяемыми (cancelable). Для таких событий обычно предусмотрена типовая обработка. Примером может служить щелчок мышью на гиперссылке, где действием по умолчанию является загрузка ресурса, на который указывает гиперссылка. Перед выполнением типовой обработки реализация DOM должна вызвать обработчики данного события, если таковые зарегистрированы. Обработчики имеют возможность либо отменить типовую обработку события, либо разрешить ее. В примере с гиперссылкой отмена события означает, что загрузка ресурса не произойдет.

Является событие отменяемым или нет, определяется свойством cancelable его интерфейса Event. Отмена типовой обработки события производится вызовом метода preventDefault этого интерфейса.

4.11.1.5. Исключения: интерфейс EventException

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

Название | Значение | Описание | Модель
UNSPECIFIED_EVENT_TYPE_ERR | 0 | Тип события не задан или пуст. | DOM 2

4.11.2. Регистрация обработчиков событий: интерфейс EventTarget

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Интерфейс EventTarget реализуется всеми узлами документа, которые поддерживают обработку событий. Иными словами, его методы являются дополнительными методами объектов Node.

Методы интерфейса EventTarget
Метод | Модель | Описание
addEventListener | DOM 2 | Регистрирует обработчик события.
dispatchEvent | DOM 2 | Генерирует заданное событие.
removeEventListener | DOM 2 | Удаляет обработчик события.

Метод addEventListener

Синтаксис:  узел.addEventListener(type, listener, useCapture)
Аргументы:  type — выражение типа DOMString
            listener — выражение типа EventListener
            useCapture — логическое выражение
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод addEventListener регистрирует новый обработчик listener события type для данного узла. Если аргумент useCapture равен true, то этот обработчик будет перехватывать событие type. Если новый обработчик регистрируется во время обработки события, то он будет активизироваться только следующими событиями. Повторная регистрация уже существующего обработчика для данного события игнорируется. Следующий пример перехватывает все щелчки мыши на Веб-странице и выводит тег HTML-элемента, на котором мы щелкнули.

function mouseClick(event) {
  var tag = event.target.tagName ? event.target.tagName :
    event.target.parentNode.tagName;
  alert(tag);
}

document.addEventListener("click", mouseClick, true);

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

Метод dispatchEvent

Синтаксис:  узел.dispatchEvent(evt)
Аргументы:  evt — выражение типа Event
Исключения: UNSPECIFIED_EVENT_TYPE_ERR
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод dispatchEvent генерирует событие evt. Обработка события, созданного этим методом, происходит так же, как обработка событий, сгенерированных исполняющей системой. Целью события является узел, из которого вызван данный метод. Пример:

var evt = new Event;
evt.initEvent("click", true, true);
document.body.dispatchEvent(evt);

Метод removeEventListener

Синтаксис:  узел.removeEventListener(type, listener, useCapture)
Аргументы:  type — выражение типа DOMString
            listener — выражение типа EventListener
            useCapture — логическое выражение
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод removeEventListener удаляет обработчик события для данного узла. Аргументы listener, type и useCapture имеют тот же смысл, что в методе addEventListener. Если обработчик удаляется во время обработки события, то он уже не будет активизирован текущим событием. Попытка удалить обработчик с параметрами, не соответствующими ни одному из зарегистрированных обработчиков игнорируется. Пример:

document.removeEventListener("click", mouseClick, true);

4.11.3. Обработчики событий: интерфейс EventListener

Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

Интерфейс EventListener соответствует обработчикам событий в DOM. Обработчик событий — это подпрограмма, которая вызывается всякий раз, когда происходит событие, для которого зарегистрирован данный обработчик. Активизация обработчика вызывается внутренним методом handleEvent:

Метод handleEvent

Синтаксис:  обработчик.handleEvent(evt)
Аргументы:  evt — выражение типа Event
Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

Метод handleEvent вызывается в процессе обработки события evt. Пример обработчика события приведен в описании метода addEventListener.

4.11.4. Обработчики событий HTML 4.0

В HTML 4.0 обработчики событий задаются как атрибуты соответствующих элементов, например:

<BODY onclick="mouseClick()">

При таком подходе задание нового обработчика события заменяет его старый обработчик. DOM допускает регистрацию нескольких обработчиков для одного события, поэтому в нем произошел отказ от задания обработчиков в атрибутах. Однако, в целях совместимости все действующие реализации DOM поддерживают форму регистрации обработчиков событий в синтаксисе HTML. Она считается совпадающей с заданием обработчика методом addEventListener с аргументом useCapture, равным false. Например, приведенное выше задание обработчика событий эквивалентно оператору

document.body.addEventListener("click", mouseClick, false);

DOM не предусматривает доступа к контексту события для обработчиков прерываний, заданных через атрибуты элементов. Однако, в Gecko в момент вызова обработчика события создается объект event, соответствующий интерфейсу Event для данного события. Пример:

function checkKey(evt) {
  var key = evt.which;  // код нажатой клавиши
  ...
}

<BODY onkeydown="checkKey(event)">

Перечень событий HTML приведен в п. 4.11.10.

4.11.5. События: интерфейс Event

Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

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

Свойства интерфейса Event
Свойство | Изменяемое | Модель | Описание
bubbles | Нет | DOM 2 | Просачивается ли данное событие.
cancelable | Нет | DOM 2 | Отменяемо ли данное событие.
currentTarget | Нет | DOM 2 | Узел, чьи обработчики событий сейчас активизируются.
eventPhase | Нет | DOM 2 | Текущая фаза обработки события.
target | Нет | DOM 2 | Узел, являющийся целью события.
timeStamp | Нет | DOM 2 | Время генерации события.
type | Нет | DOM 2 | Имя события.
Методы интерфейса Event
Метод | Модель | Описание
initEvent | DOM 2 | Инициализирует событие.
preventDefault | DOM 2 | Отменяет обработку события по умолчанию.
stopPropagation | DOM 2 | Прекращает дальнейшее распространение события.

Свойство bubbles

Синтаксис:  событие.bubbles
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство bubbles возвращает true, если данное событие является просачивающимся, и false в противном случае.

Свойство cancelable

Синтаксис:  событие.cancelable
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство cancelable возвращает true, если данное событие является отменяемым, и false в противном случае.

Свойство currentTarget

Синтаксис:  событие.currentTarget
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство currentTarget возвращает объект EventTarget, соответствующий узлу, чьи обработчики событий сейчас активизируются. Это свойство особенно полезно при перехвате и просачивании событий.

Свойство eventPhase

Синтаксис:  событие.eventPhase
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство eventPhase возвращает текущую фазу обработки события, которая задается целым числом в соответствии со следующей таблицей:

Название | Значение | Описание
CAPTURING_PHASE | 1 | Фаза обработки перехвата события.
AT_TARGET | 2 | Фаза активизации перехватчиков события узла.
BUBBLING_PHASE | 3 | Фаза обработки просачивания события.

Свойство target

Синтаксис:  событие.target
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство target возвращает объект EventTarget, соответствующий узлу, для которого это событие было сгенерировано.

Свойство timeStamp

Синтаксис:  событие.timeStamp
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство timeStamp возвращает объект DOMTimeStamp, соответствующий времени генерации данного события. Для некоторых операционных систем и типов событий это значение может быть недоступно; в таких случаях данное свойство должно возвращать 0.

Свойство type

Синтаксис:  событие.type
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство type возвращает название данного события в формате DOMString. Это название должно быть именем языка XML, не зависящим от регистра, но и MSHTML, и Gecko возвращают название события строчными буквами, например: "click", "keydown", "resize".

Метод initEvent

Синтаксис:  узел.initEvent(eventType, canBubble, isCancelable)
Аргументы:  eventType — выражение типа DOMString
            canBubble, isCancelable — логические выражения
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод initEvent используется для инициализации параметров события, созданного методом createEvent. Он должен вызываться до того, как данное событие будет сгенерировано методом dispatchEvent, и изменяет только те параметры события, которые задаются его аргументами. Аргумент eventType задает название данного события в формате DOMString; это название должно быть именем языка XML. Аргументы canBubble и isCancelable указывают соответственно, является ли данное событие просачивающимся и отменяемым.

Метод preventDefault

Синтаксис:  узел.preventDefault()
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Метод preventDefault сообщает системе, что нужно отменить обработку данного события, принятую по умолчанию. Если событие не является отменяемым, то вызов этого метода игнорируется. Этот метод может быть вызван в любой фазе обработки события.

Метод stopPropagation

Синтаксис:  узел.stopPropagation()
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

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

4.11.6. События пользовательского интерфейса: интерфейс UIEvent

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Интерфейс UIEvent является производным от интерфейса Event и содержит дополнительную информацию о событиях пользовательского интерфейса.

Свойства интерфейса UIEvent
Свойство | Изменяемое | Модель | Описание
detail | Нет | DOM 2 | Дополнительные сведения о событии.
view | Нет | DOM 2 | Окно отображения документа.
Методы интерфейса UIEvent
Метод | Модель | Описание
initUIEvent | DOM 2 | Инициализирует событие.

Свойство detail

Синтаксис:  событие.detail
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство detail возвращает число, содержащее дополнительные сведения о данном событии. Его значение зависит от типа события, как описано ниже.

Свойство view

Синтаксис:  событие.view
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство view возвращает указатель на объект AbstractView, соответствующий окну отображения документа, в котором сгенерировано данное событие.

Метод initUIEvent

Синтаксис:  узел.initUIEvent(eventType, canBubble, isCancelable, view, detail)
Аргументы:  eventType — выражение типа DOMString
            canBubble, isCancelable — логические выражения
            view — выражение типа AbstractView
            detail — числовое выражение
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод initUIEvent используется для инициализации параметров события пользовательского интерфейса, созданного методом createEvent. Он должен вызываться до того, как данное событие будет сгенерировано методом dispatchEvent, и изменяет только те параметры события, которые задаются его аргументами. Аргумент eventType задает название данного события в формате DOMString; это название должно быть именем языка XML. Аргументы canBubble и isCancelable указывают соответственно, является ли данное событие просачивающимся и отменяемым. Аргумент view задает окно отображения документа, а аргумент detail — дополнительные сведения о событии.

Типы событий пользовательского интерфейса

DOM 2 определяет три типа событий пользовательского интерфейса (которые пока обозревателями не поддерживаются):

DOMFocusIn
Это событие генерируется, когда объект получает фокус (например, при наведении на него курсора мыши или при попадании на него последовательными нажатиями клавиши Tab). Оно аналогично событию focus в HTML, но применимо к любым объектам, способным получать фокус, а не только к управляющим элементам форм.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
DOMFocusOut
Это событие генерируется, когда объект теряет фокус (например, при удалении с него курсора мыши или при уходе с него нажатием клавиши Tab). Оно аналогично событию blur в HTML, но применимо к любым объектам, способным получать фокус, а не только к управляющим элементам форм.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
DOMActivate
Это событие генерируется при активизации элемента (например, щелчком мыши или нажатием клавиши). Способ активизации указывается в свойстве detail: 1 означает обычную активизацию (одинарный щелчок мыши или нажатие клавиши Enter), 2 означает гиперактивизацию (двойной щелчок мыши или нажатие Shift+Enter).
  • bubbles: true;
  • cancelable: true;
  • контекст: detail.

4.11.7. События мыши: интерфейс MouseEvent

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Интерфейс MouseEvent является производным от интерфейса UIEvent и содержит дополнительную информацию о событиях, генерируемых мышью.

Свойства интерфейса MouseEvent
Свойство | Изменяемое | Модель | Описание
altKey | Нет | DOM 2 | Состояние клавиши Alt.
button | Нет | DOM 2 | Номер кнопки мыши, изменившей состояние.
clientX | Нет | DOM 2 | Горизонтальная координата события в клиентской области.
clientY | Нет | DOM 2 | Вертикальная координата события в клиентской области.
ctrlKey | Нет | DOM 2 | Состояние клавиши Ctrl.
metaKey | Нет | DOM 2 | Состояние клавиши Meta.
relatedTarget | Нет | DOM 2 | Вторичная цель события.
screenX | Нет | DOM 2 | Горизонтальная координата события на экране.
screenY | Нет | DOM 2 | Вертикальная координата события на экране.
shiftKey | Нет | DOM 2 | Состояние клавиши Shift.
Методы интерфейса MouseEvent
Метод | Модель | Описание
initMouseEvent | DOM 2 | Инициализирует событие.

Свойство altKey

Синтаксис:  событие.altKey
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство altKey возвращает true, если в момент генерации события была нажата клавиша Alt, и false в противном случае.

Свойство button

Синтаксис:  событие.button
Изменяемое: нет
Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

Свойство button возвращает номер кнопки мыши, нажатие или отпускание которой вызвало генерацию события. При этом 0 означает левую кнопку, 1 — среднюю кнопку, 2 — правую кнопку. Если мышь сконфигурирована для левой руки, то значения этого свойства присваиваются в обратном порядке.

Свойство clientX

Синтаксис:  событие.clientX
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство clientX возвращает число, равное горизонтальной координате точки, в которой произошла генерация события, относительно клиентской области обозревателя.

Свойство clientY

Синтаксис:  событие.clientY
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство clientY возвращает число, равное вертикальной координате точки, в которой произошла генерация события, относительно клиентской области обозревателя.

Свойство ctrlKey

Синтаксис:  событие.ctrlKey
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство ctrlKey возвращает true, если в момент генерации события была нажата клавиша Ctrl, и false в противном случае.

Свойство metaKey

Синтаксис:  событие.metaKey
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство metaKey возвращает true, если в момент генерации события была нажата клавиша Meta, и false в противном случае.

Свойство relatedTarget

Синтаксис:  событие.relatedTarget
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство relatedTarget возвращает вторичный объект EventTarget, связанный с данным событием. В настоящее время этот атрибут используется в событии mouseover для указания узла, который курсор мыши покинул, и в событии mouseout для указания узла, на который курсор мыши попал.

Свойство screenX

Синтаксис:  событие.screenX
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство screenX возвращает число, равное горизонтальной координате точки, в которой произошла генерация события, относительно экрана.

Свойство screenY

Синтаксис:  событие.screenY
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство screenY возвращает число, равное вертикальной координате точки, в которой произошла генерация события, относительно экрана.

Свойство shiftKey

Синтаксис:  событие.shiftKey
Изменяемое: нет
Поддержка:   Internet Explorer  Соответствует стандарту.
             Gecko  Соответствует стандарту.

Свойство shiftKey возвращает true, если в момент генерации события была нажата клавиша Shift, и false в противном случае.

Метод initMouseEvent

Синтаксис:  узел.initMouseEvent(eventType, canBubble, isCancelable, view, detail,
                                screenX, screenY, clientX, clientY, ctrlKey, altKey,
                                shiftKey, metaKey, button, relatedTarget)
Аргументы:  eventType — выражение типа DOMString
            canBubble, isCancelable — логические выражения
            view — выражение типа AbstractView
            detail, screenX, screenY, clientX, clientY, button — числовые выражения
            ctrlKey, altKey, shiftKey, metaKey — логические выражения
            relatedTarget — выражение типа EventTarget
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод initMouseEvent используется для инициализации параметров события мыши, созданного методом createEvent. Он должен вызываться до того, как данное событие будет сгенерировано методом dispatchEvent, и изменяет только те параметры события, которые задаются его аргументами. Аргумент eventType задает название данного события в формате DOMString; это название должно быть именем языка XML. Аргументы canBubble и isCancelable указывают соответственно, является ли данное событие просачивающимся и отменяемым. Аргумент view задает окно отображения документа, аргумент detail — количество щелчков мыши, а остальные аргументы задают значения одноименных свойств события.

Типы событий мыши

DOM 2 определяет следующие типы событий мыши:

click
Это событие генерируется при щелчке мышью на элементе. Щелчок определяется как нажатие и отпускание кнопки мыши на одной и той же точке экрана. Соответствующая последовательность генерируемых событий: mousedown, mouseup, click. При двойном или множественном щелчке в одной точке количество щелчков заносится в свойство события detail. Это событие применимо к большинству элементов.
  • bubbles: true;
  • cancelable: true;
  • контекст: screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, button, detail.
mousedown
Это событие генерируется при нажатии кнопки мыши на элементе. Это событие применимо к большинству элементов.
  • bubbles: true;
  • cancelable: true;
  • контекст: screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, button, detail.
mouseup
Это событие генерируется при отпускании кнопки мыши на элементе. Это событие применимо к большинству элементов.
  • bubbles: true;
  • cancelable: true;
  • контекст: screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, button, detail.
mouseover
Это событие генерируется при попадании курсора мыши на элемент. Это событие применимо к большинству элементов.
  • bubbles: true;
  • cancelable: true;
  • контекст: screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, relatedTarget (элемент, который курсор мыши покинул).
mouseout
Это событие генерируется при покидании курсором мыши элемента. Это событие применимо к большинству элементов.
  • bubbles: true;
  • cancelable: true;
  • контекст: screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey, relatedTarget (элемент, на который курсор мыши попал).
mousemove
Это событие генерируется при движении курсора мыши по элементу. Это событие применимо к большинству элементов.
  • bubbles: true;
  • cancelable: false;
  • контекст: screenX, screenY, clientX, clientY, altKey, ctrlKey, shiftKey, metaKey.

4.11.8. События клавиатуры: интерфейс KeyEvent

Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Нестандартная.

Интерфейс KeyEvent является производным от интерфейса UIEvent и содержит дополнительную информацию о событиях, генерируемых клавиатурой. DOM 2 не содержит спецификации этого интерфейса, она будет включена в DOM 3. Поэтому здесь мы приводим описание реализации интерфейса KeyEvent в Gecko (см. "Key Events in SeaMonkey").

Свойства интерфейса KeyEvent
Свойство | Изменяемое | Модель | Описание
altKey | Нет | DOM 2 | Состояние клавиши Alt.
charCode | Нет | DOM 2 | Код Unicode клавиши.
ctrlKey | Нет | DOM 2 | Состояние клавиши Ctrl.
keyCode | Нет | DOM 2 | Виртуальный код клавиши.
metaKey | Нет | DOM 2 | Состояние клавиши Meta.
shiftKey | Нет | DOM 2 | Состояние клавиши Shift.

Свойство charCode

Синтаксис:  событие.charCode
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Соответствует стандарту.

Свойство charCode действительно только для события keypress. Если нажатая клавиша соответствует символу Unicode, то данное свойство возвращает код этого символа. Если же клавиша является служебной или событие отлично от keypress, то возвращается 0.

Свойство keyCode

Синтаксис:  событие.keyCode
Изменяемое: нет
Поддержка:   Internet Explorer  Нестандартная.
             Gecko  Соответствует стандарту.

Свойство keyCode возвращает виртуальный код клавищи, вызвавшей событие, или 0, если charCode не равно нулю. Список виртуальных кодов клавиш содержится в Таблице П18.1.

Типы событий клавиатуры

Клавиатура всегда генерирует три отдельных события: keydown (нажатие клавиши), keypress (удержание нажатой клавиши) и keyup (отпускание клавиши). Длительное нажатие клавиши приводит к тому, что событие keypress генерируется многократно.

keydown
Генерируется при нажатии клавиши. Виртуальный код клавиши заносится в keyCode, charCode обнуляется. Это событие применимо к большинству элементов.
  • bubbles: true;
  • cancelable: true;
  • контекст: altKey, ctrlKey, shiftKey, metaKey, keyCode.
keypress
Генерируется при удержании нажатой клавиши. Свойства keyCode и charCode формируются как описано выше. Это событие применимо к большинству элементов.
  • bubbles: true;
  • cancelable: true;
  • контекст: altKey, ctrlKey, shiftKey, metaKey, keyCode, charCode.
keyup
Генерируется при отпускании клавиши. Виртуальный код клавиши заносится в keyCode, charCode обнуляется. Это событие применимо к большинству элементов.
  • bubbles: true;
  • cancelable: true;
  • контекст: altKey, ctrlKey, shiftKey, metaKey, keyCode.

4.11.9. События изменения документа: интерфейс MutationEvent

Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Интерфейс MutationEvent является производным от интерфейса Event и содержит дополнительную информацию о событиях, порожденных изменением структуры документа.

Свойства интерфейса MutationEvent
Свойство | Изменяемое | Модель | Описание
attrChange | Нет | DOM 2 | Тип изменения атрибута.
attrName | Нет | DOM 2 | Название изменившегося атрибута.
newValue | Нет | DOM 2 | Новое значение атрибута или текста.
prevValue | Нет | DOM 2 | Старое значение атрибута или текста.
relatedNode | Нет | DOM 2 | Вторичный узел, связанный с событием.
Методы интерфейса MutationEvent
Метод | Модель | Описание
initMutationEvent | DOM 2 | Инициализирует событие.

Свойство attrChange

Синтаксис:  событие.attrChange
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство attrChange возвращает тип изменения атрибута для события DOMAttrModified. Тип изменения атрибута задается целым числом в соответствии со следующей таблицей:

Название | Значение | Описание
MODIFICATION | 1 | Изменено значение атрибута.
ADDITION | 2 | Добавлен новый атрибут.
REMOVAL | 3 | Удален атрибут.

Свойство attrName

Синтаксис:  событие.attrName
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство attrName возвращает строку, содержащую название изменившегося атрибута для события DOMAttrModified.

Свойство newValue

Синтаксис:  событие.newValue
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство newValue возвращает строку, содержащую новое значение узла Attr для события DOMAttrModified или новое значение узла CharacterData для события DOMCharacterDataModified.

Свойство prevValue

Синтаксис:  событие.prevValue
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Свойство prevValue возвращает строку, содержащую предыдущее значение узла Attr для события DOMAttrModified или предыдущее значение узла CharacterData для события DOMCharacterDataModified.

Свойство relatedNode

Синтаксис:  событие.relatedNode
Изменяемое: нет
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

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

Метод initMutationEvent

Синтаксис:  узел.initMutationEvent(eventType, canBubble, isCancelable, relatedNode,
                                   prevValue, newValue, attrName, attrChange)
Аргументы:  eventType, prevValue, newValue, attrName — выражения типа DOMString
            canBubble, isCancelable — логические выражения
            relatedNode — выражение типа Node
            attrChange — числовое выражение
Поддержка:   Internet Explorer  Не поддерживается.
             Gecko  Не поддерживается.

Метод initMutationEvent используется для инициализации параметров события изменения документа, созданного методом createEvent. Он должен вызываться до того, как данное событие будет сгенерировано методом dispatchEvent, и изменяет только те параметры события, которые задаются его аргументами. Аргумент eventType задает название данного события в формате DOMString; это название должно быть именем языка XML. Аргументы canBubble и isCancelable указывают соответственно, является ли данное событие просачивающимся и отменяемым. Остальные аргументы задают значения одноименных свойств события.

Типы событий изменения документа

DOM 2 определяет следующие типы событий изменения документа (которые обозревателями пока не поддерживаются):

DOMSubtreeModified
Это событие носит общий характер и может использоваться вместо конкретных событий, описанных далее. В зависимости от реализации оно может генерироваться либо после каждой модификации документа, либо после группы взаимосвязанных изменений. Целью этого события является наименьший общий предок узлов, подвергшихся модификации.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
DOMNodeInserted
Это событие генерируется после добавления нового узла в дерево документа. Его целью является новый узел.
  • bubbles: true;
  • cancelable: false;
  • контекст: relatedNode указывает на отца нового узла.
DOMNodeInsertedIntoDocument
Это событие генерируется после добавления нового узла в дерево документа либо непосредственной вставкой, либо вставкой поддерева, содержащего данный узел. При непосредственном добавлении узла перед этим событием генерируется DOMNodeInserted. Целью является новый узел.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
DOMNodeRemoved
Это событие генерируется перед удалением узла из дерева документа. Его целью является удаляемый узел.
  • bubbles: true;
  • cancelable: false;
  • контекст: relatedNode указывает на отца удаляемого узла.
DOMNodeRemovedFromDocument
Это событие генерируется перед удалением узла из дерева документа либо непосредственным удалением, либо удалением поддерева, содержащего данный узел. При непосредственном удалении узла перед этим событием генерируется DOMNodeRemoved. Целью является удаляемый узел.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
DOMAttrModified
Это событие генерируется при изменении атрибутов узла. Его целью является Node, чьи атрибуты изменились; relatedNode указывает на сооветствующий объект Attr.
  • bubbles: true;
  • cancelable: false;
  • контекст: relatedNode, prevValue, newValue, attrName, attrChange.
DOMCharacterDataModified
Это событие генерируется при изменении текстового содержимого узла. Его целью является изменившийся объект CharacterData.
  • bubbles: true;
  • cancelable: false;
  • контекст: prevValue, newValue.

4.11.10. События HTML

DOM 2 поддерживает следующие события HTML 4.0:

load
Это событие генерируется по завершении загрузки документа, всех фреймов в FRAMESET или элемента OBJECT.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
unload
Это событие генерируется по завершении выгрузки документа из окна или фрейма. Оно применимо к элементам BODY и FRAMESET.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
abort
Это событие происходит, если загрузка страницы была прервана до завершения загрузки графического образа. Оно применимо к элементу OBJECT.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
error
Это событие происходит, если произошла ошибка при загрузке графического образа или при выполнении сценария. Оно применимо к элементам OBJECT, BODY и FRAMESET.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
select
Это событие происходит, когда пользователь выделяет текст в текстовом поле. Оно применимо к элементам INPUT и TEXTAREA.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
change
Это событие происходит, когда управляющий элемент формы теряет фокус и его значение изменилось после получения им фокуса. Оно применимо к элементам INPUT, SELECT и TEXTAREA.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
submit
Это событие происходит при пересылке формы. Оно применимо только к элементу FORM.
  • bubbles: true;
  • cancelable: true;
  • контекст: нет.
reset
Это событие происходит при инициализации формы. Оно применимо только к элементу FORM.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
focus
Это событие происходит, когда управляющий элемент формы получает фокус. Оно применимо к элементам INPUT, SELECT, TEXTAREA, BUTTON и LABEL.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
blur
Это событие происходит, когда управляющий элемент формы теряет фокус. Оно применимо к элементам INPUT, SELECT, TEXTAREA, BUTTON и LABEL.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
resize
Это событие происходит при изменении размеров окна обозревателя.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
scroll
Это событие происходит при прокрутке окна обозревателя.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.


WDH: DHTML - Обработка событий в Internet Explorer

Документ в процессе разработки!

Глава 4.12. Обработка событий в Internet Explorer

4.12.1. Общее описание

4.12.1.1. Основные различия между DOM и Internet Explorer

В этой главе мы описываем модель обработки событий, принятую в Internet Explorer (далее IE). Она отличается от модели обработки событий в DOM, поэтому начнем с краткого обзора различий между этими двумя моделями.

  1. Просачивание событий и отмена типовой обработки события в IE имеют тот же смысл, что в DOM, но реализованы другими свойствами и методами. Механизм перехвата событий реализован только для событий, генерируемых мышью (см. setCapture и releaseCapture).
  2. Интерфейс EventTarget узлами документа в IE не поддерживается. Вместо него есть нестандартные методы attachEvent, detachEvent и fireEvent.
  3. В IE поддерживается нестандартный синтаксис создания обработчиков событий с помощью атрибутов for и event в теге SCRIPT, описанный ниже.
  4. Если в DOM объект event передается обработчику события как аргумент вызова (и, соответственно, недоступен вне тела этого обработчика), то в IE объект event является свойством объекта window, которое инициализируется всякий раз, когда генерируется событие. Поэтому этот объект является глобальным и указывать его в списке аргументов обработчика событий не обязательно. Кроме того, объекты event в DOM и IE различны по набору своих свойств и методов (см. п. 4.12.3).
  5. Набор событий, генерируемых в IE, отличается от набора, предусмотренного в DOM (см. п. 4.12.4).

Теперь рассмотрим перечисленные различия подробно.

4.12.1.2. Жизненный цикл события

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

  • Выполняется действие пользователя или иное условие, порождающее событие.
  • Создается объект window.event, в который заносятся свойства сгенерированного события.
  • Объектная модель документа оповещается о том, что произошло новое событие. Для этого вызывается обработчик данного события того элемента дерева документа, в котором это событие произошло.
  • Обработчик выполняет указанные в нем действия и завершает работу. После этого событие просачивается в обработчик событий его отца в дереве документа и т. д. до тех пор, пока не будет достигнут объект window или пока какой-нибудь из обработчиков в этой цепочке не прервет просачивание.
  • Если событие имеет типовую обработку и она не была отменена предшествующими обработчиками, то выполняется типовая обработка события.

4.12.1.3. Статическое создание обработчиков событий

IE предусматривает два статических способа создания обработчиков событий. Во-первых, мы можем использовать стандартный синтаксис HTML 4.0 с использованием атрибутов on…, например:

<IMG src="sample.gif" onclick="mouseClick()">

В атрибуте on… мы можем указать любое выражение JavaScript, например:

<BUTTON onclick="javascript: alert('Молодец!')">Нажми меня</BUTTON>

Во-вторых, IE поддерживает расширенный синтаксис элемента SCRIPT с использованием следующих нестандартных атрибутов:

Атрибуты:  event = CDATA (тип событий)
           for = IDREF (идентификатор элемента)

Здесь атрибут for задает идентификатор HTML-элемента, к которому будет присоединен данный обработчик, а атрибут event задает тип событий, которые он должен обрабатывать. В следующем примере создается обработчик щелчка мыши на графическом образе с идентификатором myImage:

<SCRIPT for="myImage" event="onclick">
  . . .
</SCRIPT>
  . . .
<IMG id="myImage" src="sample.gif">

Различие между этими способами создания обработчиков событий состоит в моменте их активизации в процессе загрузки документа. Обработчик событий, созданный первым способом, начинает обрабатывать возникающие события, как только будет создан элемент, в котором он описан атрибутом on…; обработчик событий, созданный вторым способом, начинает работать только после загрузки всего документа. Поскольку в процессе загрузки документа могут генерироваться различные события, такая схема предоставляет нам большую гибкость, чем стандартная модель DOM.

4.12.1.4. Динамическое создание обработчиков событий

Для динамического создания обработчиков событий также есть два способа. Во-первых, мы можем присоединить обработчик события к элементу через его DOM-атрибут on…, например:

<IMG id="myImage" src="sample.gif">
  . . .
<SCRIPT>
  document.getElementById("myImage").onclick = "mouseClick()";
</SCRIPT>

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

4.12.1.5. Область действия обработчиков событий

IE предусматривает различное поведение обработчиков событий в зависимости от того, связаны они с управляющими элементами формы или нет. Если да, то поведение определяется местоположением сценария — внутри или вне элемента FORM. При этом возможны следующие варианты.

  1. Элемент, генерирующий события, расположен вне формы. В этом случае его обработчик событий также должен располагаться вне формы; в противном случае он игнорируется.
  2. Элемент, генерирующий события, расположен внутри формы. Если он имеет уникальный для всего документа идентификатор, то его обработчик событий может располагаться в любом месте документа. В противном случае он должен располагаться внутри той же формы.

4.12.2. Дополнительные методы интерфейса HTMLElement

Вместо стандартного интерфейса EventTarget элементы HTML в IE имеют следующие нестандартные методы:

Нестандартные методы интерфейса HTMLElement
Метод | Описание
attachEvent | Регистрирует обработчик событий заданного типа.
detachEvent | Удаляет заданный обработчик событий заданного типа.
fireEvent | Генерирует заданное событие.
releaseCapture | Отключает перехват событий мыши.
setCapture | Включает перехват событий мыши.

Метод attachEvent

Синтаксис:  элемент.attachEvent(type, function)
Аргументы:  type — выражение типа DOMString
            function — указатель на функцию
Результат:  логическое значение

Метод attachEvent регистрирует новый обработчик function события type для данного элемента. Он возвращает true, если регистрация прошла успешно, и false в противном случае. Если новый обработчик регистрируется во время обработки события, то он будет активизироваться только следующими событиями. Если для события зарегистрированы несколько обработчиков, то они вызваются в произвольном порядке. В следующем примере создается обработчик нажатия клавиши, который сработает только один раз.

<BODY onload="document.getElementById('btn').attachEvent('onclick', hurrah)">
<SCRIPT>
function hurrah() {
  alert('Молодец!');
  event.srcElement.detachEvent('onclick', hurrah);
}
</SCRIPT>
<BUTTON id="btn">Нажми меня</BUTTON>

Метод detachEvent

Синтаксис:  элемент.detachEvent(type, function)
Аргументы:  type — выражение типа DOMString
            function — указатель на функцию

Метод detachEvent дерегистрирует обработчик function события type для данного элемента, который был ранее зарегистрирован методом attachEvent.

Метод fireEvent

Синтаксис:  элемент.fireEvent(type, evt?)
Аргументы:  type — выражение типа DOMString
            evt — выражение типа event
Результат:  логическое значение

Метод fireEvent генерирует событие type для данного элемента. Необязательный аргумент evt должен содержать указатель на объект типа event, содержащий описание генерируемого события. Метод возвращает true, если генерация события прошла успешно, и false в противном случае.

Независимо от содержимого аргумента evt четыре его параметра всегда инициализируются следующими значениями:

cancelBubble | false
returnValue | true
srcElement | элемент, чей метод fireEvent вызван
type | тип события, заданный в вызове fireEvent

Пример генерации события (переменная evt здесь на самом деле не нужна и приведена только для того, чтобы показать, как создаются объекты типа event):

<BODY onload="init()">
<SCRIPT>
function init() {
  document.body.attachEvent('onclick', hurrah);
  var evt = document.createEventObject();
  document.body.fireEvent('onclick', evt);
}
function hurrah() { alert('Молодец!'); }
</SCRIPT>

Метод releaseCapture

Синтаксис:  элемент.releaseCapture()

Метод releaseCapture отключает перехват событий мыши, включенный методом setCapture.

Метод setCapture

Синтаксис:  элемент.setCapture(flag?)
Аргументы:  flag — логическое выражение

Метод setCapture включает перехват всех событий, генерируемых мышью. Если его аргумент flag равен true (принято по умолчанию), то данный элемент будет перехватывать все события мыши в пределах всего документа. Если аргумент равен false, то данный элемент будет перехватывать только события мыши от содержащихся внутри него элементов. Включение перехвата событий мыши запрещает выбор текста и перетаскивание (drag-and-drop) в окне обозревателя. Пример:

<BODY onload="document.getElementById('capturer').setCapture()">
<DIV id="capturer" onclick="alert('Молодец!')"></DIV>
<BUTTON>Щелчок на этой кнопке перехватывается элементом DIV.</BUTTON>

4.12.3. События: объект event

Всякий раз, когда генерируется событие, в свойство event объекта window заносятся параметры, описывающие это событие. Кроме того, мы можем создавать свои объекты этого типа вызовом нестандартного метода document.createEventObject(), присваивать их свойствам нужные значения, а затем генерировать события методом fireEvent. Объекты данного типа не имеют методов, но обладают следующими свойствами.

Свойства объектов event
Свойство | Изменяемое | Описание
altKey | Да | Состояние клавиши Alt.
altLeft | Да | Состояние левой клавиши Alt.
bookmarks | Нет | Коллекция закладок ADO, связанных со строками цели события.
boundElements | Нет | Коллекция элементов, связанных с набором данных.
button | Да | Номер кнопки мыши, изменившей состояние.
cancelBubble | Да | Просачивается ли данное событие.
clientX | Да | Горизонтальная координата события в клиентской области.
clientY | Да | Вертикальная координата события в клиентской области.
contentOverflow | Нет | Признак переполнения содержания документа для события onlayoutcomplete.
ctrlKey | Да | Состояние клавиши Ctrl.
ctrlLeft | Да | Состояние левой клавиши Ctrl.
dataFld | Да | Столбец данных для события oncellchange.
dataTransfer | Нет | Объект, управляющий перетаскиванием данных.
fromElement | Да | Элемент, который курсор мыши покинул, для событий onmouseover и onmouseout.
keyCode | Да | Виртуальный код клавиши.
nextPage | Нет | Позиция следующей страницы в шаблоне печати.
offsetX | Да | Горизонтальная позиция курсора мыши относительно цели события.
offsetY | Да | Вертикальная позиция курсора мыши относительно цели события.
propertyName | Да | Имя изменившегося свойства цели события для события onpropertychange.
qualifier | Да | Имя элемента данных в источнике данных.
reason | Да | Результат обмена данными с источником данных.
recordset | Да | Указатель на текущую набор записей источника данных.
repeat | Да | Признак нажатия клавиши для события onkeydown.
returnValue | Да | Код завершения обработчика событий.
screenX | Да | Горизонтальная координата курсора мыши на экране.
screenY | Да | Вертикальная координата курсора мыши на экране.
shiftKey | Да | Состояние клавиши Shift.
shiftLeft | Да | Состояние левой клавиши Shift.
srcElement | Да | Элемент, являющийся целью события.
srcFilter | Да | Фильтр, вызвавший событие onfilterchange.
srcUrn | Да | Имя реакции, сгенерировашей событие.
toElement | Да | Элемент, на который курсор мыши попал, для событий onmouseover и onmouseout.
type | Да | Имя события.
x | Да | Горизонтальная позиция курсора мыши относительно отца цели события.
y | Да | Вертикальная позиция курсора мыши относительно отца цели события.

Свойство altKey

Синтаксис:  событие.altKey
Изменяемое: да

Свойство altKey возвращает true, если в момент генерации события была нажата клавиша Alt, и false в противном случае.

Свойство altLeft

Синтаксис:  событие.altLeft
Изменяемое: да

Свойство altKey возвращает true, если в момент генерации события была нажата левая клавиша Alt, и false в противном случае. Это свойство поддерживается только в Windows NT 4.0 и Windows 2000. Если документ не имеет фокуса, то всегда возвращается false.

Свойство bookmarks

Синтаксис:  событие.bookmarks
Изменяемое: нет

Свойство bookmarks возвращает коллекцию закладок ADO, связанных со строками, которые изменяются данным событием. Оно формируется только событиями, связанными с изменением данных.

Свойство boundElements

Синтаксис:  событие.boundElements
Изменяемое: нет

Свойство boundElements возвращает коллекцию всех элементов страницы, связанных с набором данных. Оно формируется только событиями, связанными с изменением данных.

Свойство button

Синтаксис:  событие.button
Изменяемое: нет

Свойство button возвращает номер нажатой кнопки мыши. При этом 0 означает, что ни одна кнопка не нажата, 1 означает левую кнопку, 2 — среднюю кнопку, 4 — правую кнопку. Если нажаты две или три кнопки одновременно, то соответствующие значения суммируются.

Свойство cancelBubble

Синтаксис:  событие.cancelBubble
Изменяемое: да

Свойство cancelBubble по умолчанию равно false. Установка его в true прекращает просачивание данного события. Иными словами, обработчик события предка данного элемента в иерархии документа не будет вызван. В следующем примере щелчок мышью на картинке вызовет вывод на экран имени графического файла (в обработчике события элемента BODY). Однако, щелчок при нажатой клавише Shift никаких действий не вызывает, поскольку обработчик события элемента IMG в этом случае запрещает распространение события вверх.

<SCRIPT>
function checkCancel() {
  if (event.shiftKey)
    event.cancelBubble = true;
}
function showSrc() {
  if (event.srcElement.tagName == "IMG")
    alert(event.srcElement.src);
}
</SCRIPT>
<BODY onclick="showSrc()">
<IMG onclick="checkCancel()" src="sample.gif">

Свойство clientX

Синтаксис:  событие.clientX
Изменяемое: да

Свойство clientX возвращает горизонтальную позицию курсора мыши относительно клиентской области обозревателя в пикселях.

Свойство clientY

Синтаксис:  событие.clientY
Изменяемое: да

Свойство clientY возвращает вертикальную позицию курсора мыши относительно клиентской области обозревателя в пикселях.

Свойство contentOverflow

Синтаксис:  событие.contentOverflow
Изменяемое: да

Это свойство имеет смысл только для события onlayoutcomplete в шаблонах печати. Оно равно false, если все содержимое документа сгенерировано для печати, и true в противном случае.

Свойство ctrlKey

Синтаксис:  событие.ctrlKey
Изменяемое: да

Свойство ctrlKey возвращает true, если в момент генерации события была нажата клавиша Ctrl, и false в противном случае.

Свойство ctrlLeft

Синтаксис:  событие.ctrlLeft
Изменяемое: да

Свойство ctrlKey возвращает true, если в момент генерации события была нажата левая клавиша Ctrl, и false в противном случае. Это свойство поддерживается только в Windows NT 4.0 и Windows 2000. Если документ не имеет фокуса, то всегда возвращается false.

Свойство dataFld

Синтаксис:  событие.dataFld
Изменяемое: да

Это свойство имеет смысл только для события oncellchange. Его значением является строка, принимающая или задающая столбец данных в текущем наборе записей.

Свойство dataTransfer

Синтаксис:  событие.dataTransfer
Изменяемое: да

Значением этого свойства является объект, который обеспечивает доступ к форматам системного буфера сохранения (clipboard) при операциях перетаскивания (drag-and-drop). Он имеет два свойства, доступных для чтения и записи:

Свойство Описание
dropEffect Тип операции перетаскивания и тип выводимого на экран курсора:
"copy" | Копирование.
"link" | Связывание.
"move" | Перемещение.
"none" | Курсор не задан (по умолчанию)
effectAllowed Указывает, какие операции переноса данных разрешены:
"copy" | Копирование.
"link" | Связывание.
"move" | Перемещение.
"copyLink" | Копирование или связывание.
"copyMove" | Копирование или перемещение.
"linkMove" | Связывание илм перемещение.
"all" | Все разрешены.
"none" | Все запрещены.
"uninitialized" | Не задано (по умолчанию).

Кроме того, данный объект имеет три метода (см. список форматов буфера сохранения в описании объекта clipboardData):

Метод | Описание
clearData(формат?) | Удаляет заданный формат из буфера сохранения. Если формат не задан, то удаляются все форматы.
getData(формат) | Извлекает данные из буфера сохранения заданного формата, который может иметь значение "Text" или "URL", и возвращает их в виде строки.
setData(формат, данные) | Помещает в буфер сохранения строку данные в заданном формате, который может иметь значение "Text" или "URL". Возвращает true в случае успеха и false в противном случае.

Пример перетаскивания объекта с использованием dataTransfer:

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<SCRIPT>
// Сообщаем источнику, что объект нужно передать как URL.
function initDrag() {
  event.dataTransfer.setData("URL", src.href);
}

// Сообщаем приемнику, что объект нужно принять как URL.
function finishDrag() {
  dst.innerText = event.dataTransfer.getData("URL");
}
</SCRIPT>
</HEAD>
<BODY>
<A id=src href="about:текст_ссылки" onclick="return(false)"
   ondragstart="initDrag()">Тестовая ссылка</A>
<P id=dst ondragenter="finishDrag()">Бросьте ссылку сюда</P>
</BODY>
</HTML>

Свойство fromElement

Синтаксис:  событие.fromElement
Изменяемое: да

Это свойство имеет смысл только для событий onmouseover и onmouseout. Его значением является указатель на объект, который покинул курсор мыши в момент генерации события. Следующий пример выводит сообщение при попадании курсора мыши на заданный абзац.

<SCRIPT>
function testMouse(obj) {
  if (!obj.contains(event.fromElement)) alert("Приехали!");
}
</SCRIPT>
<P onmouseover="testMouse(this)">Наведите мышку.</P>

Свойство keyCode

Синтаксис:  событие.keyCode
Изменяемое: да

Это свойство имеет смысл только для событий onkeydown, onkeyup и onkeypress. Его значением является виртуальный код клавиши, нажатие или отпускание которой вызвало данное событие. Для остальных событий это свойство равно нулю.

Свойство nextPage

Синтаксис:  событие.nextPage
Изменяемое: нет

Это свойство имеет смысл только для шаблонов печати. Оно может принимать три значения: "left" (левая страница при двусторонней печати), "right" (правая страница при двусторонней печати) и "" (директива @page не задана).

Свойство offsetX

Синтаксис:  событие.offsetX
Изменяемое: да

Свойство offsetX возвращает горизонтальную позицию курсора мыши относительно цели события в пикселях.

Свойство offsetY

Синтаксис:  событие.offsetY
Изменяемое: да

Свойство offsetY возвращает вертикальную позицию курсора мыши относительно цели события в пикселях.

Свойство propertyName

Синтаксис:  событие.propertyName
Изменяемое: да

Свойство propertyName имеет смысл только для события onpropertychange. В этом случае оно содержит имя свойства, изменение которого породило данное событие. Пример:

<INPUT type="button" id="btn"
  value="Щелкните, чтобы изменить свойство VALUE этой кнопки."
  onclick='btn.value = "Новое значение VALUE этой кнопки."'
  onpropertychange='alert("Значение свойства " + event.propertyName + " изменено.")'>

Свойство qualifier

Синтаксис:  событие.qualifier
Изменяемое: да

Свойство qualifier возвращает имя элемента данных в источнике данных, указанное в атрибуте datasrc элемента, связанного с источником данных. Оно формируется только событиями, связанными с передачей данных.

Свойство reason

Синтаксис:  событие.reason
Изменяемое: да

Свойство reason возвращает код результата обмена даными с источником данных: 0 - обмен завершился успешно, 1 - обмен был прерван, 2 - обмен завершился из-за ошибки. Оно формируется только событиями, связанными с передачей данных.

Свойство recordset

Синтаксис:  событие.recordset
Изменяемое: да

Свойство recordset задает или возвращает объект, который является текущим набором записей в источнике данных. Оно формируется только событиями, связанными с передачей данных.

Свойство repeat

Синтаксис:  событие.repeat
Изменяемое: да

Это свойство имеет смысл только для события onkeydown. Оно равно true до тех пор, пока пользователь держит клавишу нажатой, и сбрасывается в false при отпускании клавиши.

Свойство returnValue

Синтаксис:  событие.returnValue
Изменяемое: да

Свойство returnValue по умолчанию равно true. Сброс его в false запрещает типовую обработку данного события, принятую по умолчанию. В следующем примере щелчок мыши на ссылке выводит адрес этой ссылки вместо перехода по ней (действие, принятое по умолчанию).

<SCRIPT>
function showLink() {
  if (event.srcElement.tagName == "A") {
    event.returnValue = false;
    alert(event.srcElement.href);
  }
}
</SCRIPT>
<A onclick="showLink()" href="http://wdh.suncloud.ru/">WDH</A>

Свойство screenX

Синтаксис:  событие.screenX
Изменяемое: да

Свойство screenX возвращает горизонтальную позицию курсора мыши относительно экрана.

Свойство screenY

Синтаксис:  событие.screenY
Изменяемое: да

Свойство screenY возвращает вертикальную позицию курсора мыши относительно экрана.

Свойство shiftKey

Синтаксис:  событие.shiftKey
Изменяемое: да

Свойство shiftKey возвращает true, если в момент генерации события была нажата клавиша Shift, и false в противном случае.

Свойство shiftLeft

Синтаксис:  событие.shiftLeft
Изменяемое: да

Свойство shiftKey возвращает true, если в момент генерации события была нажата левая клавиша Shift, и false в противном случае. Это свойство поддерживается только в Windows NT 4.0 и Windows 2000. Если документ не имеет фокуса, то всегда возвращается false.

Свойство srcElement

Синтаксис:  событие.srcElement
Изменяемое: да

Свойство srcElement возвращает или задает цель события, т. е. указатель на элемент, сгенерировавший данное событие. В следующем примере щелчок мыши на любом элементе приведет к выводу на экран имени тега этого элемента:

<BODY onclick="alert(event.srcElement.tagName)">
  . . .
</BODY>

Свойство srcFilter

Синтаксис:  событие.srcFilter
Изменяемое: да

Свойство srcFilter возвращает или задает указатель на фильтр, сгенерировавший данное событие. Оно имеет смысл только для события onfilterchange.

Свойство srcUrn

Синтаксис:  событие.srcUrn
Изменяемое: да

Свойство srcUrn возвращает или задает имя ресурса (URN) для реакции (behavior), сгенерировавший данное событие. Оно не равно null только в том случае, когда цель события имеет присоединенную реакцию, эта реакция имеет URN и именно она породила данное событие.

Свойство toElement

Синтаксис:  событие.toElement
Изменяемое: да

Это свойство имеет смысл только для событий onmouseover и onmouseout. Его значением является указатель на объект, на который попал курсор мыши в момент генерации события. Следующий пример выводит сообщение при попадании курсора мыши на заданный абзац.

<SCRIPT>
function testMouse(obj) {
  if (obj.contains(event.toElement)) alert("Приехали!");
}
</SCRIPT>
<P onmouseover="testMouse(this)">Наведите мышку.</P>

Свойство type

Синтаксис:  событие.type
Изменяемое: да

Свойство type возвращает или задает тип данного события. Тип события — это имя события без префикса on, например для события onclick эта строка равна "click".

Свойство x

Синтаксис:  событие.x
Изменяемое: да

Свойство x возвращает горизонтальную позицию курсора мыши относительно отца цели события в пикселях. Если мышь находилась за пределами окна в момент генерации события, то это свойство равно -1. Если цель события абсолютно позиционирована и не является потомком абсолютно позиционированного элемента или событие сгенерировано мышью, то возвращается позиция курсора мыши относительно элемента BODY.

Свойство y

Синтаксис:  событие.y
Изменяемое: да

Свойство y возвращает вертикальную позицию курсора мыши относительно отца цели события в пикселях. Если мышь находилась за пределами окна в момент генерации события, то это свойство равно -1. Если цель события абсолютно позиционирована и не является потомком абсолютно позиционированного элемента или событие сгенерировано мышью, то возвращается позиция курсора мыши относительно элемента BODY.

4.12.4. Классификация событий

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

4.12.4.1. События пользовательского интерфейса

activate
Это событие генерируется, когда элемент становится активным, т. е. получает фокус.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
beforedeactivate
Это событие генерируется перед тем, как элемент перестанет быть активным, т. е. потеряет фокус.
  • bubbles: true;
  • cancelable: true;
  • контекст: нет.
beforeeditfocus
Это событие генерируется перед началом редактирования элемента. Оно возможно только для тех элементов, которые могут иметь нестандартный атрибут contentEditable, равный "true".
  • bubbles: true;
  • cancelable: true;
  • по умолчанию: переводит объект в режим редактирования;
  • контекст: нет.
controlselect
Это событие генерируется перед тем как будет выбран элемент, допускающий изменение размеров. Оно возможно только для тех элементов, которые могут иметь нестандартный атрибут contentEditable, равный "true".
  • bubbles: true;
  • cancelable: true;
  • по умолчанию: появляются стрелки изменения размеров объекта;
  • контекст: нет.
deactivate
Это событие генерируется, когда элемент перестает быть активным, т. е. теряет фокус.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
resizeend
Это событие происходит при завершении изменения размеров объекта.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
resizestart
Это событие происходит при начале изменения размеров объекта.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.

4.12.4.2. События мыши

click
Это событие генерируется при щелчке левой кнопкой мыши на элементе.
  • bubbles: true;
  • cancelable: true;
  • по умолчанию: зависит от цели события;
  • контекст: screenX, screenY, clientX, clientY, offsetX, offsetY, x, y, altKey, ctrlKey, shiftKey, button.
contextmenu
Это событие генерируется при щелчке правой кнопкой мыши в клиентской области экрана.
  • bubbles: true;
  • cancelable: true;
  • по умолчанию: выводит на экран контекстно-зависимое меню;
  • контекст: screenX, screenY, clientX, clientY, offsetX, offsetY, x, y, altKey, ctrlKey, shiftKey, button.
dblclick
Это событие генерируется при двойном щелчке левой кнопкой мыши на элементе.
  • bubbles: true;
  • cancelable: true;
  • по умолчанию: зависит от цели события;
  • контекст: screenX, screenY, clientX, clientY, offsetX, offsetY, x, y, altKey, ctrlKey, shiftKey, button.
mousedown
Это событие генерируется при нажатии кнопки мыши на элементе.
  • bubbles: true;
  • cancelable: true;
  • контекст: screenX, screenY, clientX, clientY, offsetX, offsetY, x, y, altKey, ctrlKey, shiftKey, button.
mouseenter
Это событие генерируется при попадании курсора мыши на элемент.
  • bubbles: false;
  • cancelable: false;
  • контекст: screenX, screenY, clientX, clientY, offsetX, offsetY, x, y, altKey, ctrlKey, shiftKey, button, fromElement, toElement.
mouseleave
Это событие генерируется при покидании курсором мыши элемента.
  • bubbles: false;
  • cancelable: false;
  • контекст: screenX, screenY, clientX, clientY, offsetX, offsetY, x, y, altKey, ctrlKey, shiftKey, button, fromElement, toElement.
mousemove
Это событие генерируется при движении курсора мыши по элементу.
  • bubbles: true;
  • cancelable: false;
  • контекст: screenX, screenY, clientX, clientY, offsetX, offsetY, x, y, altKey, ctrlKey, shiftKey, button.
mouseout
Это событие генерируется при покидании курсором мыши элемента.
  • bubbles: true;
  • cancelable: false;
  • контекст: screenX, screenY, clientX, clientY, offsetX, offsetY, x, y, altKey, ctrlKey, shiftKey, button, fromElement, toElement.
mouseover
Это событие генерируется при попадании курсора мыши на элемент.
  • bubbles: true;
  • cancelable: false;
  • контекст: screenX, screenY, clientX, clientY, offsetX, offsetY, x, y, altKey, ctrlKey, shiftKey, button, fromElement, toElement.
mouseup
Это событие генерируется при отпускании кнопки мыши на элементе.
  • bubbles: true;
  • cancelable: true;
  • контекст: screenX, screenY, clientX, clientY, offsetX, offsetY, x, y, altKey, ctrlKey, shiftKey, button.

4.12.4.3. События клавиатуры

help
Генерируется при нажатии клавиши F1.
  • bubbles: true;
  • cancelable: true;
  • по умолчанию: вызывается справка обозревателя;
  • контекст: altKey, ctrlKey, shiftKey.
keydown
Генерируется при нажатии клавиши.
  • bubbles: true;
  • cancelable: true;
  • контекст: altKey, ctrlKey, shiftKey, keyCode, repeat.
keypress
Генерируется при удержании нажатой клавиши.
  • bubbles: true;
  • cancelable: true;
  • контекст: altKey, ctrlKey, shiftKey, keyCode.
keyup
Генерируется при отпускании клавиши.
  • bubbles: true;
  • cancelable: true;
  • контекст: altKey, ctrlKey, shiftKey, keyCode.

4.12.4.4. События изменения документа

filterchange
Это событие генерируется, когда визуальный фильтр изменяет состояние или заканчивает заданное преобразование.
  • bubbles: false;
  • cancelable: false;
  • контекст: srcFilter.
losecapture
Это событие генерируется, когда элемент прекращает перехват событий мыши.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
propertychange
Это событие генерируется, когда изменяется атрибут или свойство CSS элемента.
  • bubbles: false;
  • cancelable: false;
  • контекст: propertyName.
readystatechange
Это событие генерируется при изменении состояния готовности элемента. Новое состояние готовности хранится в свойстве элемента readyState, принимающем значения "uninitialized" (объект неинициализирован), "loading" (идет загрузка объекта), "loaded" (объект загрузил свои данные), "interactive" (объект готов к взаимодействию с пользователем) и "complete" (объект полностью инициализирован).
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.

4.12.4.5. События HTML

abort
Это событие происходит, если загрузка страницы была прервана до завершения загрузки графического образа.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
beforeunload
Это событие генерируется перед началом выгрузки документа.
  • bubbles: false;
  • cancelable: true;
  • контекст: нет.
blur
Это событие происходит, когда элемент теряет фокус.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
change
Это событие происходит в момент потери элементом фокуса, если его значение изменилось.
  • bubbles: false;
  • cancelable: true;
  • контекст: нет.
error
Это событие происходит, если произошла ошибка при загрузке графического файла, объекта, таблицы стилей или при выполнении сценария.
  • bubbles: false;
  • cancelable: true;
  • контекст: нет.
focus
Это событие происходит, когда элемент получает фокус.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
load
Это событие генерируется по завершении загрузки графического файла, объекта, фрейма, сценария или всего документа.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
reset
Это событие происходит при инициализации формы. Оно применимо только к элементу FORM.
  • bubbles: false;
  • cancelable: true;
  • контекст: нет.
resize
Это событие происходит при изменении размеров объекта.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
scroll
Это событие происходит при прокрутке окна обозревателя.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
select
Это событие происходит, когда пользователь выделяет что-либо на экране обозревателя.
  • bubbles: false;
  • cancelable: true;
  • контекст: нет.
stop
Это событие происходит, когда пользователь нажимает кнопку Stop или покидает Веб-страницу.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
submit
Это событие происходит при пересылке формы. Оно применимо только к элементу FORM.
  • bubbles: false;
  • cancelable: true;
  • контекст: нет.
unload
Это событие генерируется перед выгрузкой документа из окна или фрейма.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.

4.12.4.6. События элемента MARQUEE

Internet Explorer поддерживает нестандартный элемент MARQUEE (бегущая строка текста). С этим элементом связаны три события, которые могут генерироваться только им.

bounce
Это событие генерируется, если бегущая строка достигла края экрана и ей задан атрибут behavior = "alternate" (бежать в обратную сторону).
  • bubbles: false;
  • cancelable: true;
  • по умолчанию: строка начинает бежать в обратную сторону;
  • контекст: нет.
finish
Это событие генерируется при завершении цикла вывода бегущей строки.
  • bubbles: false;
  • cancelable: true;
  • по умолчанию: вывод бегущей строки заканчивается;
  • контекст: нет.
start
Это событие генерируется перед началом каждого цикла вывода бегущей строки.
  • bubbles: false;
  • cancelable: false;
  • по умолчанию: начинается новый цикл вывода бегущей строки;
  • контекст: нет.

4.12.4.7. События буфера сохранения

Перечисленные ниже события генерируются при обмене данными между документом и системным буфером сохранения. Пример работы с буфером сохранения см. в описании объекта window.clipboardData.

beforecopy
Это событие генерируется источником данным перед копированием выбранного фрагмента в системный буфер сохранения.
  • bubbles: true;
  • cancelable: true;
  • контекст: нет.
beforecut
Это событие генерируется источником данным перед вырезкой выбранного фрагмента в системный буфер сохранения.
  • bubbles: true;
  • cancelable: true;
  • контекст: нет.
beforepaste
Это событие генерируется приемником данным перед вставкой в него содержимого системного буфера сохранения.
  • bubbles: true;
  • cancelable: true;
  • контекст: нет.
copy
Это событие генерируется источником данным при копировании выбранного фрагмента в системный буфер сохранения.
  • bubbles: true;
  • cancelable: true;
  • по умолчанию: копирует выбранный фрагмент;
  • контекст: нет.
cut
Это событие генерируется источником данным при вырезке выбранного фрагмента в системный буфер сохранения.
  • bubbles: true;
  • cancelable: true;
  • по умолчанию: вырезает выбранный фрагмент;
  • контекст: нет.
paste
Это событие генерируется приемником данным при вставке в него содержимого системного буфера сохранения.
  • bubbles: true;
  • cancelable: true;
  • по умолчанию: вставляет выбранный фрагмент;
  • контекст: нет.
selectionchange
Это событие генерируется при любом изменении объекта document.selection, т. е. выбранного фрагмента документа.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
selectstart
Это событие генерируется в момент начала выделения фрагмента документа, причем тем объектом, на котором началось выделение.
  • bubbles: true;
  • cancelable: true;
  • по умолчанию: высвечивает выделение фрагмента;
  • контекст: нет.

4.12.4.8. События перетаскивания

Перечисленные ниже события генерируются при перетаскивании (drag-and-drop) объектов.

drag
Это событие непрерывно генерируется объектом в процессе его перетаскивания.
  • bubbles: true;
  • cancelable: true;
  • контекст: нет.
dragend
Это событие генерируется объектом при завершении его перетаскивания, т. е. в тот момент, когда пользователь отпускает нажатую кнопку мыши. Оно генерируется после событий dragleave, сгенерированного приемником перетаскивания.
  • bubbles: true;
  • cancelable: true;
  • контекст: нет.
dragenter
Это событие генерируется всякий раз, когда перетаскиваемый объект попадает на такой объект, куда его можно перетащить. При этом источником события является потенциальный приемник перетаскиваемого объекта.

  • bubbles: true;
  • cancelable: true;
  • контекст: нет.
dragleave
Это событие генерируется всякий раз, когда перетаскиваемый объект уходит с объекта, на который его можно перетащить. При этом источником события является потенциальный приемник перетаскиваемого объекта.

  • bubbles: true;
  • cancelable: true;
  • контекст: нет.
dragover
Это событие непрерывно генерируется потенциальным приемником перетаскиваемого объекта в процессе перетаскивания последнего по приемнику.
  • bubbles: true;
  • cancelable: true;
  • контекст: нет.
dragstart
Это событие генерируется объектом в момент начала его перетаскивания. IE позволяет перетаскивать графические образы и предварительно выбранные текстовые фрагменты.
  • bubbles: true;
  • cancelable: true;
  • контекст: нет.
drop
Это событие генерируется приемником при завершении перетаскивания на него объекта, т. е. в тот момент, когда пользователь отпускает нажатую кнопку мыши. Оно генерируется перед событиями dragleave и dragend.
  • bubbles: true;
  • cancelable: true;
  • контекст: нет.

4.12.4.9. События печати

afterprint
Это событие генерируется окном обозревателя после печати или предварительного просмотра ассоциированного с ним документа. Обычно оно используется в сочетании с событием beforeprint: обработчик beforeprint вносит в документ изменения перед его печатью или просмотром, а обработчик afterprint восстанавливает исходное состояние документа.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
beforeprint
Это событие генерируется окном обозревателя перед началом печати или предварительного просмотра ассоциированного с ним документа.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
layoutcomplete
Это событие генерируется при завершении формирования очередной страницы документа для печати.
  • bubbles: true;
  • cancelable: true;
  • контекст: contentOverflow.

4.12.4.10. События передачи данных

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

afterupdate
Это событие генерируется элементом, связанным с внешним источником данных, после успешного обновления данных в этом источнике.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
beforeupdate
Это событие генерируется элементом, связанным с внешним источником данных, перед обновлением данных в этом источнике.
  • bubbles: true;
  • cancelable: true;
  • контекст: нет.
cellchange
Это событие генерируется при изменении данных во внешнем источнике.
  • bubbles: true;
  • cancelable: false;
  • контекст: dataFld.
dataavailable
Это событие периодически генерируется в процессе асинхронной загрузки данных из внешнего источника.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
datasetchanged
Это событие генерируется при изменении набора данных, представленных внешним источником.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
datasetcomplete
Это событие генерируется по завершении приема данных из внешнего источника.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
errorupdate
Это событие генерируется элементом, связанным с внешним источником данных, при ошибке обновления данных в этом источнике.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
rowenter
Это событие генерируется при изменении текущей строки во внешнем источнике данных в тот момент, когда объект закончил прием новых данных.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
rowexit
Это событие генерируется перед изменении текущей строки объекта внешним источником данных.
  • bubbles: false;
  • cancelable: true;
  • контекст: нет.
rowsdelete
Это событие генерируется перед началом удаления строк из набора данных.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.
rowsinserted
Это событие генерируется сразу после вставки новых строк в набор данных.
  • bubbles: true;
  • cancelable: false;
  • контекст: нет.


WDH: DHTML - Отображение документов в DOM и Gecko

Документ в процессе разработки!

Глава 4.13. Отображение документов в DOM и Gecko

4.13.1. Отображение документов в DOM и обозревателях

DOM 2 не содержит детальной спецификации интерфейсов, связанных с отображением документов, такие спецификации появятся в DOM 3. Он определяет интерфейс AbstractView, предназначенный для установления связи между документом и его отображением, но не описывает его свойств и поведения.

Интерфейс AbstractView является базовым для всех отображений документа (окон, фреймов и т. п.). Он имеет единственное свойство document, возвращающее указатель на объект Document, соответствующий отображаемому документу. Интерфейс Document, в свою очередь, может иметь свойство defaultView типа AbstractView, указывающее на окно отображения документа.

Для практической реализации обозревателей такой спецификации явно недостаточно, поэтому разработчики пока пользуются собственными (нестандартными) спецификациями интерфейса для окон обозревателя. Соответствующий объект традиционно называется window.

Объект window соответствует окну обозревателя. Он позволяет нам получить доступ к документу, загруженному в данное окно, к событиям, которые происходят в окне, и к различным свойствам обозревателя. Этот объект является глобальным объектом клиентской среды JavaScript, поэтому для доступа к его свойствам и методам префикс window. не нужен. Однако, для читаемости кода он может использоваться; помните, что он всегда указывает на текущее окно.

Обычно, объект window создается самим обозревателем при открытии HTML-документа. Если документ не содержит фреймов, то ему соответствует единственный объект window. Если же документ содержит фреймы, то создается один объект window для главного документа и по одному объекту window для каждого из фреймов, которые являются детьми главного окна. При закрытии главного окна его дети закрываются автоматически.

К сожалению, объект window реализован в Internet Explorer и Gecko по-разному. По этой причине мы решили дать для них отдельные описания. Окна Gecko описаны в этой главе, а окна Internet Explorer в следующей.

4.13.2. Окна Gecko: объект window

Объект window в Gecko представляет собой сочетание классического окна Netscape 4.x с некоторыми возможностями окон Internet Explorer. Приведенное здесь описание основано на Gecko DOM window Reference Внешняя ссылка. Полная спецификация интерфейсов Gecko еще далека от завершения, поэтому некоторые свойства помечены ниже как недокументированные.

Свойства объекта window
Свойство | Изменяемое | Описание
_content | Нет | Возвращает указатель на содержание окна.
appCore | Да | Недокументированное свойство.
closed | Нет | Проверяет, закрыто ли заданное окно.
Components | Нет | Коллекция компонентов, установленных в обозревателе.
controllers | Нет | Коллекция объектов типа XUL Controllers.
crypto | Нет | Объект, обеспечивающий доступ к методам шифрования.
defaultStatus | Да | Сообщение по умолчанию в строке состояния обозревателя.
directories | Нет | Объект barProp, соответствующий панели каталогов обозревателя.
document | Нет | Объект document, указывающий на HTML-документ, открытый в заданном окне.
frames | Нет | Коллекция всех объектов window, определенных документом в данном окне.
history | Нет | Объект history, обеспечивающий доступ к истории просмотра узлов.
innerHeight | Да | Размер клиентской области окна по вертикали.
innerWidth | Да | Размер клиентской области окна по горизонтали.
length | Нет | Количество фреймов в данном окне.
location | Да | Объект location, содержащий URI документа в данном окне.
locationbar | Нет | Объект barProp, соответствующий адресной строке обозревателя.
menubar | Нет | Объект barProp, соответствующий меню обозревателя.
name | Нет | Имя фрейма или окна.
navigator | Нет | Объект navigator, содержащий информацию обо обозревателе.
opener | Да | Ссылка на окно, создавшее данное окно.
outerHeight | Да | Полный размер окна по вертикали.
outerWidth | Да | Полный размер окна по горизонтали.
pageXOffset | Да | Текущая позиция страницы по горизонтали относительно верхнего левого угла окна.
pageYOffset | Да | Текущая позиция страницы по вертикали относительно верхнего левого угла окна.
parent | Нет | Доступ к отцу данного окна.
personalbar | Нет | Объект barProp, соответствующий строке ссылок обозревателя.
pkcs11 | Нет | Ссылка на объект pkcs11.
prompter | Да | Ссылка на окно, созданное методом prompt.
screen | Нет | Объект screen, содержащий сведения о клиентской области отображения.
screenX | Да | Расстояние от левой границы экрана до левой границы окна обозревателя.
screenY | Да | Расстояние от верхней границы экрана до верхней границы окна обозревателя.
scrollbars | Нет | Объект barProp, соответствующий полосам прокрутки окна обозревателя.
scrollX | Нет | Прокрутка документа по горизонтали.
scrollY | Нет | Прокрутка документа по вертикали.
self | Да | Ссылка на текущее окно.
sidebar | Нет | Ссылка на боковую панель обозревателя.
status | Да | Текст сообщения в строке состояния обозревателя.
statusbar | Да | Объект barProp, соответствующий строке состояния обозревателя.
title | Да | Заголовок окна.
toolbar | Да | Объект barProp, соответствующий панели кнопок обозревателя.
top | Нет | Возвращает ссылку на первое окно в иерархии объектов window.
window | Нет | Ссылка на текущее окно.
Методы объекта window
Метод | Описание
alert | Создает диалоговое окно сообщения.
back | Осуществляет возврат на один шаг по истории просмотра узлов для всех фреймов верхнего окна.
blur | Заставляет объект потерять фокус и генерирует событие onblur.
captureEvents | Включает перехват всех событий заданного типа.
clearInterval | Сбрасывает интервал, заданный методом setInterval.
clearTimeout | Сбрасывает таймаут, заданный методом setTimeout.
close | Закрывает текущее окно обозревателя.
confirm | Создает диалоговое окно подтверждения.
disableExternalCapture | Запрещает окну с фреймами перехватывать события на страницах, загруженных с других серверов.
dump | Выводит заданный текст в консоль JavaScript.
enableExternalCapture | Разрешает окну с фреймами перехватывать события на страницах, загруженных с других серверов.
escape | Преобразует строку в шестнадцатеричную кодировку.
focus | Заставляет объект получить фокус и генерирует событие onfocus.
forward | Осуществляет переход на один шаг вперед по истории просмотра узлов для всех фреймов верхнего окна.
GetAttention | Вызывает мигание иконки обозревателя.
getSelection | Возвращает выбранный фрагмент экрана.
home | Загружает домашнюю страницу пользователя.
moveBy | Сдвигает окно на заданную величину.
moveTo | Сдвигает окно в заданную позицию.
open | Создает новое окно.
print | Печатает документ, открытый в заданном окне.
prompt | Создает диалоговое окно для ввода пользователем строки.
releaseEvents | Отключает перехват событий заданного типа.
resizeBy | Изменяет размеры окна на заданную величину.
resizeTo | Задает новые размеры окна.
routeEvent | Пропускает перехваченное событие вниз по иерархии объектов.
scroll | Прокручивает окно до заданной позиции.
scrollBy | Прокручивает окно на заданную величину.
scrollByLines | Прокручивает окно на заданное число строк.
scrollByPages | Прокручивает окно на заданное число страниц.
scrollTo | Прокручивает окно до заданной позиции.
setCursor | Изменяет форму курсора.
setInterval | Задает периодическое вычисление выражения всякий раз, когда истечет данный интервал.
setTimeout | Задает вычисление выражения, когда истечет данный таймаут.
sizeToContent | Изменяет размер окна соответственно его содержимому.
stop | Останавливает загрузку в окно.
unescape | Преобразует шестнадцатеричную кодировку в строку.
updateCommands | Недокументировано.
События объекта window
Событие | Описание
onabort | Генерируется при прерывании загрузки страницы.
onblur | Генерируется, когда окно теряет фокус.
onchange | Генерируется при изменении значения элемента формы в окне.
onclick | Генерируется при щелчке кнопкой мыши.
onclose | Генерируется при закрытии окна.
ondragdrop | Генерируется при перетаскивании внешнего объекта в окно.
onerror | Генерируется при возникновении ошибки в процессе загрузки документа.
onfocus | Генерируется, когда окно получает фокус.
onkeydown | Генерируется при нажатии клавиши.
onkeypress | Генерируется при удержании нажатой клавиши.
onkeyup | Генерируется при отпускании клавиши.
onload | Генерируется сразу после загрузки документа.
onmousedown | Генерируется при нажатии кнопки мыши.
onmousemove | Генерируется при движении курсора мыши по элементу в окне.
onmouseout | Генерируется при покидании курсором мыши элемента в окне.
onmouseover | Генерируется при попадании курсора мыши на элемент в окне.
onmouseup | Генерируется при отпускании кнопки мыши.
onpaint | Генерируется при отображении содержимого окна.
onreset | Генерируется при инициализации формы в окне.
onresize | Генерируется перед изменением размеров окна.
onscroll | Генерируется при прокрутке содержимого окна.
onselect | Генерируется, когда пользователь выделяет текст в текстовом поле.
onsubmit | Генерируется при пересылке формы в окне.
onunload | Генерируется перед завершением выгрузки документа.

Свойство _content

Синтаксис:  window._content
Изменяемое: нет

Значением свойства _content является указатель на фрейм или иной объект в окне, помеченный атрибутом type="content-primary". Если такого элемента нет, то возращается указатель на само окно window. Пример: следующий фрагмент HTML-документа выведет на экран текст blur.htm:

<BODY onload="alert(window._content.location.href)">
<IFRAME type="content-primary" src="blur.htm"></IFRAME>
. . .

Свойство appCore

Синтаксис:  window.appCore
Изменяемое: нет

Недокументированное свойство, возвращает объект с интерфейсом nsIBrowserInstance. О "прикладном ядре" см. Application Services/Application Core Внешняя ссылка.

Свойство closed

Синтаксис:  window.closed
Изменяемое: нет

Значением свойства closed является true, если окно window закрыто, и false, если нет. Пример:

if (!parent.closed)
  parent.close();

Свойство Components

Синтаксис:  window.Components
Изменяемое: нет

Значением свойства Components является коллекция всех компонентов, установленных в обозревателе. Пока недокументировано.

Свойство controllers

Синтаксис:  window.controllers
Изменяемое: нет

Значением свойства controllers является коллекция объектов типа XUL Controllers. Пока недокументировано.

Свойство crypto

Синтаксис:  window.crypto
Изменяемое: нет

Значением этого свойства является указатель на объект crypto, обеспечивающий шифрование данных. Пока недокументировано.

Свойство defaultStatus

Синтаксис:  window.defaultStatus
Изменяемое: да

Свойство defaultStatus возвращает или устанавливает текст сообщения, выводимый по умолчанию в строке состояния, которая расположена в нижней части окна обозревателя. Не следует путать его со свойством status, которое содержит текст, выводимый в строке состояния при возникновении определенных событий. Пример:

var d = new Date();
defaultStatus = "Сегодня: " + d.toLocaleDateString();

Свойство directories

Синтаксис:  window.directories
Изменяемое: нет

Значением этого свойства является указатель на объект barProp, соответствующий панели каталогов обозревателя. Этот объект имеет единственное свойство visible, доступное для чтения и записи и указывающее на состояние панели (true, если панель видна, и false, если она скрыта). Для изменения этого свойства необходима привилегия UniversalBrowserWrite. Пример:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
window.directories.visible = true;

Свойство document

Синтаксис:  window.document
Изменяемое: нет

Свойство document возвращает указатель на HTML-документ, открытый в данном окне. Пример: alert(window.document.title).

Свойство frames

Синтаксис:  window.frames
Изменяемое: нет

Свойство frames возвращает коллекцию всех объектов window, определенных документом, ассоциированным с данным окном. Иными словами:

  • Если тело документа заключено в элемент BODY, то коллекция содержит по одному окну для каждого элемента IFRAME в документе.
  • Если тело документа заключено в элемент FRAMESET, то коллекция содержит по одному окну для каждого элемента FRAME в документе.

Порядок окон в коллекции определяется порядком элементов FRAME/IFRAME в тексте документа. Пример:

var frm = window.parent.frames;
for (var i = 0; i < frm.length; i++)
    alert(frm[i].name);

Свойство history

Синтаксис:  window.history
Изменяемое: нет

Значением свойства history является объект, содержащий информацию об узлах, посещенных пользователем в данном окне (история просмотра).

Этот объект имеет четыре свойства, доступных только для чтения:

Свойство | Описание
current | URI текущего документа. Требует привилегии UniversalBrowserRead.
length | Количество объектов в коллекции
next | URI следующего документа в истории. Требует привилегии UniversalBrowserRead.
previous | URI предыдущего документа в истории. Требует привилегии UniversalBrowserRead.

и следующие методы:

Метод | Описание
back(число?) | Эквивалентен нажатию кнопки обозревателя Back заданное число раз. Если число опущено, то загружается предыдущий узел, т. е. back() эквивалентно go(-1). Попытка выхода за пределы истории игнорируется, и пользователь остается на текущей странице.
forward(число?) | Эквивалентен нажатию кнопки обозревателя Forward заданное число раз. Если число опущено, то загружается следующий узел, т. е. forward() эквивалентно go(1). Попытка выхода за пределы истории игнорируется, и пользователь остается на текущей странице.
go(позиция) | Загружает узел, заданный аргументом позиция. Если позиция — это число, то она задает положение узла в истории относительно текущей страницы. Если позиция — это строка, то она должна задавать полный или частичный URI уэла, содержащегося в истории. Если заданный узел не найден или сделана попытка выхода за пределы истории, то пользователь остается на текущей странице.

Пример чтения URI предыдущего документа в истории просмотра:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
alert(window.history.previous);

Свойство innerHeight

Синтаксис:  window.innerHeight
Изменяемое: да

Значением свойства innerHeight является высота клиентской области окна обозревателя. Пример: window.innerHeight = 400. Ср. со свойством outerHeight.

Свойство innerWidth

Синтаксис:  window.innerWidth
Изменяемое: да

Значением свойства innerWidth является ширина клиентской области окна обозревателя. Пример: window.innerWidth = 700. Ср. со свойством outerWidth.

Свойство length

Синтаксис:  window.length
Изменяемое: нет

Это свойство возвращает количество фреймов в данном окне, т. е. количество содержащихся в нем элементов FRAME и IFRAME.

Свойство location

Синтаксис:  window.location
Изменяемое: нет

Это свойство возвращает указатель на объект location, содержащий информацию об URI документа, открытого в данном окне. Напомним, что в общем виде URI имеет вид:

протокол://хост:порт/путь#закладка?запрос

Объект location содержит названные фрагменты URI как свойства, доступные для чтения и записи:

Свойство | Описание
hash | Закладка, т. е. часть URI, следующая за символом "#" (включая его).
host | Если port не равно null, то эта строка имеет вид hostname:port, в противном случае совпадает с hostname.
hostname | Имя хоста и домена или IP-адрес.
href | Полный URI документа.
pathname | Имя файла или пути.
port | Номер порта, указанный в URI документа.
protocol | Протокол, указанный в URI документа.
search | Запрос, т. е. часть URI, следующая за символом "?" (включая его).

Кроме того, данный объект имеет два метода:

Метод | Описание
reload(flag?) | Перезагружает текущий документ. Аргумент указывает способ перезагрузки: true — перезагрузка с сервера, false — перезагрузка из кэш-памяти. Если аргумент опущен, то он принимается равным false.
replace(URI) | Заменяет текущий документ на документ с заданным URI. При этом текущий документ удаляется из истории просмотра.

Мы можем обращаться к объекту location и как к строке, например window.location = "http://mywww.com/newpage.htm" приведет к загрузке документа с заданным URI. Такое обращение эквивалентно чтению или записи свойства location.href.

Свойство locationbar

Синтаксис:  window.locationbar
Изменяемое: нет

Значением этого свойства является указатель на объект barProp, соответствующий адресной строке обозревателя. Этот объект имеет единственное свойство visible, доступное для чтения и записи и указывающее на состояние панели (true, если адресная строка видна, и false, если она скрыта). Для изменения этого свойства необходима привилегия UniversalBrowserWrite. Пример:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
window.locationbar.visible = true;

Свойство menubar

Синтаксис:  window.menubar
Изменяемое: нет

Значением этого свойства является указатель на объект barProp, соответствующий меню обозревателя. Этот объект имеет единственное свойство visible, доступное для чтения и записи и указывающее на состояние панели (true, если меню видно, и false, если оно скрыто). Для изменения этого свойства необходима привилегия UniversalBrowserWrite. Пример:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
window.menubar.visible = true;

Свойство name

Синтаксис:  window.name
Изменяемое: нет

Это свойство позволяет считывать и устанавливать имя окна или фрейма. Его значение задается в формате имени фрейма HTML. Во избежание двусмысленности это свойство всегда следует использовать с префиксом window. Примеры:

window.name = "Window1";		// задание имени окна
parent.frames[0].name = "LetfFrame";	// задание имени фрейма
window.open("file.htm", "_blank");	// открытие документа в новом окне

Свойство navigator

Синтаксис:  window.navigator
Изменяемое: нет

Значением свойства navigator является объект, содержащий информацию об обозревателе. Он имеет следующие свойства, доступные только для чтения:

Свойство | Описание
appCodeName | Кодовое имя обозревателя. Всегда равно "Mozilla".
appName | Название обозревателя. Всегда равно "Netscape".
appVersion Версия обозревателя и имя платформы, например,
"5.0 (Windows; en-US)".
language | Язык пользовательского интерфейса обозревателя (см. Таблицу П8.1).
cookieEnabled | true, если куки на стороне клиента разрешены, и false, если запрещены.
mimeTypes Возвращает коллекцию объектов типа MimeType, соответствующих типам MIME, поддерживаемых обозревателем. Каждый такой объект имеет следующие свойства:
description | Описание типа, например "Acrobat (*.pdf)".
enabledPlugin | Указатель на соответствующий объект Plugin.
suffixes | Расширения имен файлов этого типа, например "pdf".
type | Тип MIME, например "application/pdf".
oscpu Операционная система клиента:
"HP-UX" | HP Unix
"MacPPC" | Macintosh/PowerPC
"Mac68k" | Macintosh/68000
"SunOS" | Solaris
"Win95" | Windows 95
"Win98" | Windows 98
"WinNT" | Windows NT/2000
platform Платформа клиента:
"HP-UX" | HP Unix
"MacPPC" | Macintosh/PowerPC
"Mac68k" | Macintosh/68000
"SunOS" | Solaris
"Win16" | 16-разрядная Windows
"Win32" | 32-разрядная Windows
plugins Коллекция всех объектов Plugin, установленных в обозревателе. Объект Plugin описывает подключаемый модуль, который отображает файлы определенных типов. Он является массивом, содержащим по одному элементу для каждого поддерживаемого им типа. Он имеет следующие свойства:
description | Описание модуля, например "Netscape Navigator Plug-in for Acrobat.".
filename | Полный путь доступа к файлу модуля на диске.
length | Количество поддерживаемых типов MIME.
name | Название модуля, например "Adobe Acrobat".

Кроме того, данная коллекция имеет метод refresh(flag), который обновляет массив установленных подгружаемых модулей. Если flag равно true, то все открытые документы будут перезагружены с учетом вновь установленных модулей.
product | Название продукта. Всегда равно "Gecko".
productSub | Номер сборки продукта, например "20001222".
securityPolicy | Политика безопасности, недокументировано.
userAgent Информация об обозревателе в формате поля User-Agent заголовка запроса HTTP (см. Таблицу П5.2), например,
"Mozilla/5.0 (Windows; U; Win98; en-US; rv:0.9.2) Gecko/20010725 Netscape6/6.1".
vendor | Название поставщика, например "Netscape6".
vendorSub | Номер версии поставщика, например "6.1".

Кроме того, данный объект имеет следующие методы:

Метод | Описание
javaEnabled() | Возвращает true, если Java-аплеты в обозревателе разрешены, и false в противном случае.
preference(name, value?) Если аргумент value не задан, возвращает текущую настройку обозревателя с именем name (для этого требуется привилегия UniversalPreferencesRead). Если аргумент value задан, то настройка с именем name получает значение value и это значение возвращается в качестве результата (для этого требуется привилегия UniversalPreferencesWrite). Имена некоторых настроек (полный перечень в сценариях подкаталога DEFAULTS\PREF каталога, в котором установлены Netscape 6 или Mozilla):
"autoupdate.enabled" | true = разрешить SmartUpdate, false = запретить
"browser.enable_style_sheets" | true = разрешить таблицы стилей, false = запретить
"general.always_load_images" | true = автоматически загружать графические образы, false = нет
"javascript.enabled" | true = разрешить JavaScript, false = запретить
"network.cookie.cookieBehavior" | 0 = разрешить все куки, 1 = разрешить только куки, посылаемые на тот же сервер, 2 = запретить куки
"network.cookie.warnAboutCookies" | true = предупреждать об обрашении к куки, false = нет
"security.enable_java" | true = разрешить Java-аплеты, false = запретить
taintEnabled() | Возвращает true, если в обозревателе разрешена защита данных (data tainting), и false в противном случае.

Свойство opener

Синтаксис:  window.opener
Изменяемое: да

Это свойство возвращает ссылку на объект window, создавший данное окно; если окно было открыто обозревателем, а не методом open, то его значение null. Мы можем присвоить этому свойству ссылку на любое окно.

Свойство outerHeight

Синтаксис:  window.outerHeight
Изменяемое: да

Значением свойства outerHeight является высота окна обозревателя. Пример: window.outerHeight = window.screen.availHeight. Ср. со свойством innerHeight.

Свойство outerWidth

Синтаксис:  window.outerWidth
Изменяемое: да

Значением свойства outerWidth является ширина окна обозревателя. Пример: window.outerWidth = window.screen.availWidth. Ср. со свойством innerWidth.

Свойство pageXOffset

Синтаксис:  window.pageXOffset
Изменяемое: да

Значением свойства pageXOffset является положение страницы по горизонтали в пикселях относительно верхнего левого угла клиентской области окна. Это свойство позволяет узнать текущее положение страницы, прокручиваемой горизонтально, перед вызовом метода scrollTo или scrollBy.

Свойство pageYOffset

Синтаксис:  window.pageYOffset
Изменяемое: да

Значением свойства pageYOffset является положение страницы по вертикали в пикселях относительно верхнего левого угла клиентской области окна. Это свойство позволяет узнать текущее положение страницы, прокручиваемой вертикально, перед вызовом метода scrollTo или scrollBy.

Свойство parent

Синтаксис:  window.parent
Изменяемое: нет

Это свойство возвращает ссылку на объект window, соответствующий отцу данного окна. Иными словами, для окна, созданного элементом FRAME, оно возвращает ссылку на окно, содержащее соответствующий элемент FRAMESET, а для остальных окон ссылку на самого себя (ср. свойство top). Пример: alert(parent.location).

Свойство personalbar

Синтаксис:  window.personalbar
Изменяемое: нет

Значением этого свойства является указатель на объект barProp, соответствующий панели личных ссылок обозревателя. Этот объект имеет единственное свойство visible, доступное для чтения и записи и указывающее на состояние панели (true, если она видна, и false, если она скрыта). Для изменения этого свойства необходима привилегия UniversalBrowserWrite. Пример:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
window.personalbar.visible = true;

Свойство pkcs11

Синтаксис:  window.pkcs11
Изменяемое: нет

Это свойство возвращает ссылку на объект pkcs11, который используется для установки драйверов и других программ, использующих протокол PKCS (Public-Key Cryptography Standard) #11. Этот стандарт разработан в RSA Laboratories для управления криптографическим шифрованием передаваемых данных. Подробнее см. Спецификацию PKCS #11 Внешняя ссылка и файл nsIDOMPkcs11.idl в исходных текстах Mozilla.

Свойство prompter

Синтаксис:  window.prompter
Изменяемое: нет

Это свойство возвращает ссылку на объект window, созданный методом prompt или null, если такого окна нет.

Свойство screen

Синтаксис:  window.screen
Изменяемое: нет

Значением свойства screen является объект, содержащий информацию об экране клиента. Он имеет следующие свойства:

Свойство | Изменяемое | Описание
availHeight | Нет | Высота рабочей области экрана в пикселях (исключая высоту панели задач). Для экрана 600x800 обычно равна от 570 до 600.
availLeft | Нет | Первый доступный слева пиксель экрана (availLeft + availWidth = width).
availTop | Нет | Первый доступный сверху пиксель экрана (availTop + availHeight = height).
availWidth | Нет | Ширина рабочей области экрана в пикселях (исключая ширину панели задач). Для экрана 600x800 обычно равна от 730 до 800.
colorDepth | Нет | Если используется цветовая палитра, то это свойство возвращает ее глубину в битах на пиксель. В противном случае совпадает с pixelDepth.
height | Нет | Высота экрана в пикселях. Например, для экрана 600x800 равна 600.
left | Да | Расстояние в пикселях от левого края клиентской области окна обозревателя до левого края экрана.
pixelDepth | Нет | Число битов на пиксель при отображении цветов. Типичные значения: 8 (256 цветов), 16 (High Color), 24 (True Color).
top | Да | Расстояние в пикселях от верхнего края клиентской области окна обозревателя до верхнего края экрана.
width | Нет | Ширина экрана в пикселях. Например, для экрана 600x800 равна 800.

Следующий пример

alert("Экран: "+screen.width+" x "+screen.height+" x "+screen.colorDepth +" бита");

выведет окно сообщения с текстом вида Экран: 800 x 600 x 24 бита.

Свойство screenX

Синтаксис:  window.screenX
Изменяемое: да

Значением свойства screenX является расстояние в пикселях от левой границы экрана до левой границы окна обозревателя. Для изменения этого свойства необходима привилегия UniversalBrowserWrite. Пример:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
window.screenX = 20;

Свойство screenY

Синтаксис:  window.screenY
Изменяемое: да

Значением свойства screenY является расстояние в пикселях от верхней границы экрана до верхней границы окна обозревателя. Для изменения этого свойства необходима привилегия UniversalBrowserWrite. Пример:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
window.screenY = 10;

Свойство scrollbars

Синтаксис:  window.scrollbars
Изменяемое: нет

Значением этого свойства является указатель на объект barProp, соответствующий полосам прокрутки обозревателя. Этот объект имеет единственное свойство visible, доступное для чтения и записи и указывающее на состояние панели (true, если полосы прокрутки видны, и false, если они скрыты). Для изменения этого свойства необходима привилегия UniversalBrowserWrite. Пример:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
window.scrollbars.visible = true;

Свойство scrollX

Синтаксис:  window.scrollX
Изменяемое: нет

Значением свойства scrollX является количество пикселей, на которое документ прокручен по горизонтали. Следующий пример прокручивает документ к его началу, если он был прокручен по горизонтали:

if (window.scrollX) scroll(0, 0);

Свойство scrollY

Синтаксис:  window.scrollY
Изменяемое: нет

Значением свойства scrollY является количество пикселей, на которое документ прокручен по вертикали. Следующий пример прокручивает документ к его началу, если он был прокручен по вертикали:

if (window.scrollY) scroll(0, 0);

Свойство self

Синтаксис:  window.self
Изменяемое: нет

Это свойство возвращает ссылку на текущий объект window, т. е. на самого себя.

Свойство sidebar

Синтаксис:  window.sidebar
Изменяемое: нет

Значением этого свойства является указатель на недокументированный объект с интерфейсом nsISidebar, соответствующий боковой панели обозревателя (его описание в Gecko DOM window Reference не соответствует действительности). Мы обнаружили, что этот объект лишен свойств, но имеет четыре метода:

Метод | Описание
addPanel(panel) | Недокументировано.
addSearchEngine(engineURI, iconURI, engineName, categoryName) | Запрашивает подтверждение на доавление к боковой панели поисковой системы. Аргументы: engineURI — URI поисковой системы, iconURI — URI ее иконки, engineName — имя, которое будет присвоено поисковой системе, categoryName — название категории поиска.
QueryInterface(interfaceName) | Недокументировано.
setWindow(windowFrame) | Недокументировано.

Этот объект еще находится в стадии разработки, поэтому подробно мы опишем его позже. Пример добавления поисковой системы к боковой панели:

window.sidebar.addSearchEngine("http://www.mozilla.org/projects/search/mozilla.src",
  "http://www.mozilla.org/projects/search/mozilla.gif", "mozilla.org", "Web");

Свойство status

Синтаксис:  window.status
Изменяемое: да

Свойство status возвращает или устанавливает текст сообщения, выводимый в строке состояния, которая расположена в нижней части окна обозревателя. Не следует путать его со свойством defaultStatus, которое содержит текст, выводимый в строке состояния по умолчанию. Пример:

<BODY onload="window.status='Страница загружена!'">

Свойство statusbar

Синтаксис:  window.statusbar
Изменяемое: нет

Значением этого свойства является указатель на объект barProp, соответствующий строке состояния обозревателя. Этот объект имеет единственное свойство visible, доступное для чтения и записи и указывающее на состояние панели (true, если строка состояния видна, и false, если она скрыта). Для изменения этого свойства необходима привилегия UniversalBrowserWrite. Пример:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
window.statusbar.visible = true;

Свойство title

Синтаксис:  window.title
Изменяемое: да

Это свойство возвращает или задает заголовок окна. Если заголовок окна не был ранее задан, то оно возвращает undef. Текст заголовка хранится в данном свойстве, но нигде не отображается. Пример:

window.title = "Мое окно";
alert(window.title);

Свойство toolbar

Синтаксис:  window.toolbar
Изменяемое: нет

Значением этого свойства является указатель на объект barProp, соответствующий панели кнопок обозревателя. Этот объект имеет единственное свойство visible, доступное для чтения и записи и указывающее на состояние панели (true, если она видна, и false, если она скрыта). Для изменения этого свойства необходима привилегия UniversalBrowserWrite. Пример:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
window.toolbar.visible = true;

Свойство top

Синтаксис:  window.top
Изменяемое: нет

Это свойство возвращает ссылку на первое окно в иерархии объектов window, т. е. на объект, у которого свойство parent равно самому объекту.

Свойство window

Синтаксис:  window.window
Изменяемое: нет

Это свойство возвращает ссылку на текущий объект window, т. е. на самого себя (синоним свойства self).

Метод alert

Синтаксис: window.alert(текст?)
Аргументы: текст — строковое значение

Метод alert создает диалоговое окно сообщения и, если текст задан, выводит его в это окно. Например, оператор alert("Здравствуйте!") выведет на экран следующее окно:

Пример отображения окна сообщения

Метод back

Синтаксис: window.back()

Метод back эквивалентен нажатию кнопки обозревателя Back (Назад). Он возвращает нас на один шаг в истории просмотра самого верхнего окна в иерархии окон, в отличие от метода history.back(), который делает шаг назад в истории просмотра текущего окна или фрейма.

Метод blur

Синтаксис: window.blur()

Метод blur заставляет окно потерять фокус и генерирует событие onblur. Это программный эквивалент удалению пользователем фокуса с текущего окна.

Метод captureEvents

Синтаксис: window.captureEvents(Event.тип)
Аргументы: тип — тип события

Метод captureEvents включает перехват заданным окном всех событий заданного типа. Тип события задается одним из следующих ключевых слов, набранных в любом регистре:

abort | error | mousedown | reset
blur | focus | mousemove | resize
change | keydown | mouseout | select
click | keypress | mouseover | submit
dblclick | keyup | mouseup | unload
dragdrop | load | move |

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

<HTML>
<HEAD>
<SCRIPT>
function reg() {
  window.captureEvents(Event.CLICK);
  window.onclick = new Function("alert('hit')");
}
</SCRIPT>
</HEAD>
<BODY onload="reg()">
<BUTTON>Test</BUTTON>
</BODY>
</HTML>

Мы можем задать в вызове этого метода сразу несколько типов событий, разделяя их символом "|", например:

window.captureEvents(Event.KEYPRESS | Event.KEYDOWN | Event.KEYUP);

Метод clearInterval

Синтаксис: window.clearInterval(таймер)
Аргументы: таймер — целое значение

Этот метод останавливает таймер, созданный методом setInterval. См. подробности и пример в описании этого метода.

Метод clearTimeout

Синтаксис: window.clearTimeout(таймер)
Аргументы: таймер — целое значение

Этот метод останавливает таймер, созданный методом setTimeout. См. подробности и пример в описании этого метода.

Метод close

Синтаксис: window.close()

Метод close закрывает заданное окно обозревателя. Если окно было создано программно, то оно просто закрывается. Если же окно было создано обозревателем, то перед его закрытием выводится диалоговое окно, запрашивающее подтверждение действия. Если, однако, в истории просмотра окна только один документ (текущий), то окно закрывается без запроса подтверждения. Такое решение было принято для поддержки временных окон, которые открывают другие окна, а затем закрываются. Для того, чтобы закрывать любое окно без подтверждения, необходима привилегия UniversalBrowserWrite. Пример:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
self.close();

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

Метод confirm

Синтаксис: window.confirm(текст?)
Аргументы: текст — строковое значение
Результат: логическое значение

Метод confirm создает диалоговое окно подтверждения и, если текст задан, выводит его в это окно. Он возвращает true, если пользователь нажал кнопку OK, и false, если пользователь нажал кнопку Cancel. Например, оператор confirm("Отформатировать системный диск?") выведет на экран следующее окно:

Пример отображения окна подтверждения

Метод disableExternalCapture

Синтаксис: window.disableExternalCapture()

Этот метод запрещает перехват внешних событий, разрешенных методом enableExternalCapture. См. подробности в описании этого метода.

Метод dump

Синтаксис: window.dump(текст)
Аргументы: текст — строковое значение

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

Метод enableExternalCapture

Синтаксис: window.enableExternalCapture()

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

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
enableExternalCapture();
captureEvents(Event.CLICK);

Метод escape

Синтаксис: window.escape(строка)
Аргументы: строка — любое строковое выражение
Результат: новый строковый объект

Метод escape преобразует входную строку в шестнадцатеричную кодировку. При этом все символы, не являющиеся символами базовой латиницы, заменяются на их шестнадцатеричные escape-коды %xx в текущей кодировке операционной системы. Например, оператор document.write(escape("Строка")) выведет в русской версии Windows на экран обозревателя строку %D1%F2%F0%EE%EA%E0. Обратное преобразование строки производится методом unescape.

Обратите внимание, что этот метод перекрывает метод escape глобального объекта JavaScript, который кодирует символы шестнадцатеричными кодами Unicode.

Метод focus

Синтаксис: window.focus()

Метод focus заставляет окно получить фокус и генерирует событие onfocus. Учтите, что окно не может получить фокус, пока документ не будет полностью в него загружен.

Метод forward

Синтаксис: window.forward()

Метод forward эквивалентен нажатию кнопки обозревателя Forward (Вперед). Он переводит нас на один шаг вперед в истории просмотра самого верхнего окна в иерархии окон, в отличие от метода history.forward(), который делает шаг вперед в истории просмотра текущего окна или фрейма.

Метод GetAttention

Синтаксис: window.GetAttention()

Метод GetAttention вызвает мигание иконки обозревателя до тех пор, пока он не будет активизирован. В Windows и Linux мигает иконка в панели задач, в MacOS — в правом верхнем углу системной панели. Пример:

setTimeout("window.GetAttention()", 3000);

Метод getSelection

Синтаксис:  window.getSelection()

Этот метод возвращает указатель на недокументированный объект с интерфейсом nsISelection, соответствующий выделенному пользователем фрагменту документа. Если выбранный фрагмент является текстом, то возвращаемый объект автоматически преобразуется в строку. Пример:

alert(window.getSelection());

Метод home

Синтаксис: window.home()

Метод home загружает в окно домашнюю страницу пользователя, указанную в настройках обозревателя. Его вызов эквивалентен нажатию кнопки обозревателя Home (Домой).

Метод moveBy

Синтаксис: window.moveBy(x, y)
Аргументы: x, y — целые значения

Этот метод перемещает окно на x пикселей по горизонтали и y пикселей по вертикали. Пример: moveBy(10, -5).

Метод moveTo

Синтаксис: window.moveTo(x, y)
Аргументы: x, y — целые значения

Этот метод перемещает окно в положение, при котором его верхний левый угол отстоит от левого верхнего угла экрана на x пикселей по горизонтали и y пикселей по вертикали. Следующий пример задает размеры окна и центрирует его на экране:

var w = 200, h = 200;
resizeTo(w, h);
moveTo((screen.width-w)/2, (screen.height-h)/2);

Метод open

Синтаксис: window.open(uri, имя [, свойства?])
Аргументы: uri, имя, свойства — строковые значения
Результат: объект window

Метод open создает новое окно обозревателя и возвращает ссылку на него. Аргумент uri задает URI открываемого документа, аргумент имя — имя фрейма для нового окна, которое может использоваться в атрибуте target элементов A и FORM. Необязательный аргумент свойства представляет собой список свойств нового окна, разделенных запятыми. В нем мы можем задать следующие свойства:

Свойство | Описание
copyhistory | Копировать историю просмотра текущего окна.
dependent | Создать окно, зависимое от родительского окна. Зависимые окна закрываются при закрытии родительского окна и не показываются в панели задач Windows.
directories | Показывать панель каталогов обозревателя.
height | Высота окна в пикселях.
location | Показывать адресную строку обозревателя.
menubar | Показывать меню обозревателя.
resizable | Пользователь может изменять размеры окна.
screenX | Расстояние в пикселях от левого края экрана по горизонтали.
screenY | Расстояние в пикселях от верхнего края экрана по вертикали.
scrollbars | Показывать полосы прокрутки окна.
status | Показывать строку состояния обозревателя.
toolbar | Показывать панель кнопок обозревателя.
width | Ширина окна в пикселях.

Свойствам width, height, screenX и screenY должны быть присвоены числовые значения. Остальные свойства являются логическими; им можно присваивать значения yes или no (или, что то же самое, 1 или 0). Включение в список только имени свойства равносильно присвоению ему значения yes. Пример:

var newWin = window.open("test.htm", "win2", "toolbar,status=no,width=200,height=200");

Метод print

Синтаксис: window.print()

Метод print выводит содержимое данного окна или фрейма на печать.

Метод prompt

Синтаксис: window.prompt([текст?], [значение?])
Аргументы: текст, значение — строковые значения
Результат: строковое или целое значение

Метод prompt создает диалоговое окно, состоящее из строки сообщения и поля ввода. Если текст задан, он выводится в качестве сообщения. Значение задает начальное значение поля ввода;если оно опущено, то равно undefined, и поле ввода пусто. Например, оператор prompt("Введите ваше имя", "") выведет на экран следующее окно:

Пример отображения окна ввода

Если пользователь нажмет кнопку Cancel, то этот метод вернет значение null; если будет нажата кнопка OK, то метод вернет строковое или целое значение, введенное пользователем в поле ввода.

Метод releaseEvents

Синтаксис: window.releaseEvents(Event.тип)
Аргументы: тип — тип события

Метод releaseEvents отменяет перехват событий заданного типа, включенный методом captureEvents. См. подробности в описании этого метода. Пример:

window.releaseEvents(Event.KEYPRESS | Event.KEYDOWN | Event.KEYUP);

Метод resizeBy

Синтаксис: window.resizeBy(x, y)
Аргументы: x, y — целые значения

Этот метод изменяет размеры окна на x пикселей по горизонтали и y пикселей по вертикали. Пример: resizeBy(10, -5).

Метод resizeTo

Синтаксис: window.resizeTo(x, y)
Аргументы: x, y — целые значения

Этот метод задает новые размеры окна, равными x пикселей по горизонтали и y пикселей по вертикали. Пример см. в описании метода moveTo.

Метод routeEvent

Синтаксис: window.routeEvent(evt)
Аргументы: evt — объект типа Event
Результат: логическое значение

Этот метод пропускает перехваченное событие evt вниз по иерархии объектов. При этом событие передается следующему в иерархии за window объекту, у которого включен перехват данного типа событий. Подробно о механизме перехвата событий см. п. 4.11.1.2.

Метод scroll

Синтаксис: window.scroll(x, y)
Аргументы: x, y — целые значения

Это устаревший синоним метода scrollTo.

Метод scrollBy

Синтаксис: window.scrollBy(x, y)
Аргументы: x, y — целые значения

Этот метод прокручивает документ в окне на x пикселей по горизонтали и y пикселей по вертикали относительно текущей позиции документа в окне. Прокрутка производится только в том случае, когда новая позиция в окне не видна. Пример: scrollBy(10, -5).

Метод scrollByLines

Синтаксис: window.scrollByLines(n)
Аргументы: n — целое значение

Этот метод прокручивает документ в окне на n строк относительно текущей позиции документа в окне. Прокрутка производится только в том случае, когда новая позиция в окне не видна. Пример: scrollByLines(10).

Метод scrollByPages

Синтаксис: window.scrollByPages(n)
Аргументы: n — целое значение

Этот метод прокручивает документ в окне на n страниц относительно текущей позиции документа в окне. Прокрутка производится только в том случае, когда новая позиция в окне не видна. Пример: scrollByPages(-1).

Метод scrollTo

Синтаксис: window.scrollTo(x, y)
Аргументы: x, y — целые значения

Этот метод прокручивает документ в окне так, чтобы верхний левый угол окна отстоял от начала документа на x пикселей по горизонтали и y пикселей по вертикали. Прокрутка производится только в том случае, когда новая позиция в окне не видна. Пример: scrollTo(0, 20).

Метод setCursor

Синтаксис: window.setCursor(форма)
Аргументы: форма — строковое значение

Этот метод изменяет форму экранного курсора. Аргумент форма может принимать следующие значения:

"auto" | Форма курсора определяется обозревателем в зависимости от содержимого элемента.
"crosshair" | Перекрестье.
"default" | Курсор операционной системы по умолчанию. В Windows это стрелка.
"help" | Вопросительный знак, указывающий, что для данного элемента можно получить справку.
"move" | Скрещенные стрелки, указывающие на то, что что-то должно переместиться.
"pointer" | Кисть руки, указывающая на гиперссылку.
"*-resize" | Стрелка, указывающая на сдвигаемую границу; * задает направление сдвига (n = север, s = юг, w = запад, e = восток, nw =северо-запад и т. п.).
"text" | Указатель на редактируемый текст в форме буквы I.
"wait" | Песочные часы, указывающие на то, что программа занята, и пользователь должен подождать.

Пример: setCursor("nw-resize").

Метод setInterval

Синтаксис: window.setInterval(выражение, интервал)
           window.setInterval(функция, интервал, арг1?, …, аргN?)
Аргументы: выражение — строковое значение
           функция — имя функции
           арг1, …, аргN — значения аргументов функции
           интервал — числовое значение
Результат: целое значение

Этот метод запускает выполнение определенного действия каждый раз, когда истечет интервал, заданный в миллисекундах. Действие задается либо строкой, содержащей выражение JavaScript, либо именем функции с необязательным набором аргументов. Метод возвращает целое значение (идентификатор таймера), которое может быть передано методу clearInterval для остановки данного таймера, т. е. прекращения периодического выполнения данного действия. Заданное действие будет выполняться до вызова clearInterval или до закрытия данного окна.

Следующий пример использует метод setInterval для вывода текущего времени в строке состояния обозревателя каждую секунду:

<HTML>
<HEAD>
<SCRIPT>
var timerID = null;

function stopclock() {
  if (timerID)
    clearInterval(timerID);
  timerID = null;
}
function startclock() {
  stopclock();
  timerID = setInterval(showtime, 1000); // или setInterval("showtime()", 1000)
}
function showtime() {
  window.status = (new Date()).toLocaleTimeString();
}
</SCRIPT>
</HEAD>
<BODY onload="startclock()">
</BODY>
</HTML>

Метод setTimeout

Синтаксис: window.setTimeout(выражение, интервал)
           window.setTimeout(функция, интервал, арг1?, …, аргN?)
Аргументы: выражение — строковое значение
           функция — имя функции
           арг1, …, аргN — значения аргументов функции
           интервал — числовое значение
Результат: целое значение

Этот метод вызывает разовое выполнение определенного действия, когда истечет интервал, заданный в миллисекундах. Действие задается либо строкой, содержащей выражение JavaScript, либо именем функции с необязательным набором аргументов. Метод возвращает целое значение (идентификатор таймера), которое может быть передано методу clearTimeout для остановки данного таймера, т. е. для отмены выполнения заданного действия. Действие будет выполнено по истечении заданного интервала времени, если до этого не будет вызван метод clearTimeout или закрыто данное окно.

Следующий пример использует метод setTimeout для вывода текущего времени в строке состояния обозревателя каждую секунду:

<HTML>
<HEAD>
<SCRIPT>
var timerID = null;

function stopclock() {
  if (timerID)
    clearInterval(timerID);
  timerID = null;
}
function startclock() {
  stopclock();
  showtime();
}
function showtime() {
  window.status = (new Date()).toLocaleTimeString();
  timerID = setTimeout(showtime, 1000); // или setTimeout("showtime()", 1000)
}
</SCRIPT>
</HEAD>
<BODY onload="startclock()">
</BODY>
</HTML>

Метод sizeToContent

Синтаксис: window.sizeToContent()

Метод sizeToContent изменяет размеры окна, так чтобы они соответствовали его содержимому.

Метод stop

Синтаксис: window.stop()

Метод stop прекращает загрузку текущего документа. Его вызов равносилен нажатию кнопки Stop (Остановить) на панели обозревателя.

Метод unescape

Синтаксис: window.unescape(строка)
Аргументы: строка — любое строковое выражение
Результат: новый строковый объект

Метод unescape преобразует строку из шестнадцатеричной кодировки текстовую. Формат исходной строки описан в методе escape. Например, в русской версии Windows оператор document.write(unescape("%D1%F2%F0%EE%EA%E0")) выведет на экран обозревателя текст Строка.

Обратите внимание, что этот метод перекрывает метод unescape глобального объекта JavaScript, который декодирует шестнадцатеричные коды Unicode.

Метод updateCommands

Синтаксис: window.updateCommands()

Этот метод пока не документирован.

Нестандартные события окна

close
Это событие генерируется перед закрытием окна.
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.
dragdrop
Это событие генерируется, когда пользователь перетаскивает в окно обозревателя внешний объект, например, файл.
  • bubbles: true;
  • cancelable: true;
  • контекст: data (массив строк, содержащих URI перетащенных в окно объектов).
paint
Это событие генерируется при каждой перерисовке окна (первый раз после onload, а затем всякий раз, когда требуется перерисовка окна).
  • bubbles: false;
  • cancelable: false;
  • контекст: нет.


WDH: DHTML - Отображение документов в Internet Explorer

Глава 4.14. Отображение документов в Internet Explorer

4.14.1. Окна Internet Explorer: объект window

Объект window в Internet Explorer выполняет те же функции, что и в Gecko. Однако, здесь мы можем программно открывать новые окна (и, следовательно, создавать новые объекты window) с помощью методов open, showModalDialog и showModelessDialog.

Свойства объекта window
Свойство | Изменяемое | Описание
clientInformation | Нет | Объект clientInformation, содержащий информацию обо обозревателе.
clipboardData | Нет | Объект clipboardData, обеспечивающий доступ к системному буферу сохранения.
closed | Нет | Проверяет, закрыто ли заданное окно.
defaultStatus | Да | Сообщение по умолчанию в строке состояния обозревателя.
dialogArguments | Нет | Аргументы модального диалога.
dialogHeight | Да | Высота окна модального диалога.
dialogLeft | Да | Левая координата окна модального диалога.
dialogTop | Да | Верхняя координата окна модального диалога.
dialogWidth | Да | Ширина окна модального диалога.
document | Нет | Объект document, указывающий на HTML-документ, открытый в заданном окне.
event | Нет | Объект event, указывающий на параметры текущего события.
external | Нет | Объект external, обеспечивающий доступ к внешним компонентам обозревателя.
frameElement | Нет | Указатель на FRAME или IFRAME, содержащий данное окно.
frames | Нет | Коллекция всех объектов window, определенных документом в данном окне.
history | Нет | Объект history, обеспечивающий доступ к истории просмотра узлов.
Image | Да | Недокументированный объект.
length | Нет | Количество фреймов в данном окне.
location | Нет | Объект location, содержащий URI документа в данном окне.
name | Нет | Имя фрейма или окна.
navigator | Нет | Объект navigator, содержащий информацию обо обозревателе.
offscreenBuffering | Да | Управляет фоновой буферизацией отображения.
opener | Да | Ссылка на окно, создавшее данное окно.
Option | Да | Недокументированный объект.
parent | Нет | Доступ к отцу данного окна.
returnValue | Да | Результат выполнения модального диалога.
screen | Нет | Объект screen, содержащий сведения о клиентской области отображения.
screenLeft | Нет | Левая координата клиентской области отображения.
screenTop | Нет | Верхняя координата клиентской области отображения.
self | Нет | Ссылка на текущее окно.
status | Да | Текст сообщения в строке состояния обозревателя.
top | Нет | Возвращает ссылку на первое окно в иерархии объектов window.
window | Нет | Ссылка на текущее окно.
Методы объекта window
Метод | Описание
alert | Создает диалоговое окно сообщения.
attachEvent | Присоединяет заданную функцию к заданному событию.
blur | Заставляет окно потерять фокус и генерирует событие onblur.
clearInterval | Сбрасывает интервал, заданный методом setInterval.
clearTimeout | Сбрасывает таймаут, заданный методом setTimeout.
close | Закрывает текущее окно обозревателя.
confirm | Создает диалоговое окно подтверждения.
createPopup | Создает всплывающее окно.
detachEvent | Отсоединяет заданную функцию от заданного события.
execScript | Выполняет заданный сценарий.
focus | Заставляет окно получить фокус и генерирует событие onfocus.
moveBy | Сдвигает окно на заданную величину.
moveTo | Сдвигает окно в заданную позицию.
navigate | Загружает ресурс с заданным URI в текущее окно.
open | Создает новое окно.
print | Печатает документ, открытый в заданном окне.
prompt | Создает диалоговое окно для ввода пользователем строки.
resizeBy | Изменяет размеры окна на заданную величину.
resizeTo | Задает новые размеры окна.
scroll | Прокручивает окно до заданной позиции.
scrollBy | Прокручивает окно на заданную величину.
scrollTo | Прокручивает окно до заданной позиции.
setActive | Делает окно текущим, не помещая на него фокус.
setInterval | Задает периодическое вычисление выражения всякий раз, когда истечет данный интервал.
setTimeout | Задает вычисление выражения, когда истечет данный таймаут.
showHelp | Открывает файл справки в формате HTML Help.
showModalDialog | Создает окно модального диалога.
showModelessDialog | Создает окно немодального диалога.
События объекта window
Событие | Описание
onactivate | Генерируется, когда окно становится активным.
onafterprint | Генерируется сразу после печати документа, содержащегося в окне.
onbeforedeactivate | Генерируется перед тем, как окно перестанет быть активным.
onbeforeprint | Генерируется перед печатью документа, содержащегося в окне.
onbeforeunload | Генерируется перед выгрузкой документа.
onblur | Генерируется, когда окно теряет фокус.
oncontrolselect | Генерируется перед тем, как в окне будет выбран элемент, допускающий изменение размеров.
ondeactivate | Генерируется, когда окно перестает быть активным.
onerror | Генерируется при возникновении ошибки в процессе загрузки документа.
onfocus | Генерируется, когда окно получает фокус.
onhelp | Генерируется при нажатии пользователем клавиши F1 в активном окне обозревателя.
onload | Генерируется сразу после загрузки документа.
onresize | Генерируется перед изменением размеров окна.
onresizeend | Генерируется при завершении изменения размеров объекта.
onresizestart | Генерируется при начале изменения размеров объекта..
onscroll | Генерируется при прокрутке содержимого окна.
onunload | Генерируется перед завершением выгрузки документа.

Свойство clientInformation

Синтаксис:  window.clientInformation
Изменяемое: нет

Значением свойства clientInformation является объект, содержащий информацию об обозревателе. Он имеет следующие свойства, доступные только для чтения:

Свойство | Описание
appCodeName | Кодовое имя обозревателя. Всегда равно "Mozilla".
appMinorVersion | Младшая цифра версии обозревателя. В MSIE 5.x равна 0.
appName | Название обозревателя. Всегда равно "Microsoft Internet Explorer".
appVersion Версия обозревателя и имя платформы, например,
"4.0 (compatible; MSIE 5.5; Windows 98)".
browserLanguage | Язык пользовательского интерфейса обозревателя (см. Таблицу П8.1).
cookieEnabled | true, если куки на стороне клиента разрешены, и false, если запрещены.
cpuClass Тип процессора клиента:
"x86" | Intel
"68K" | Motorola 680x0
"Alpha" | DEC Alpha
"PPC" | Motorola PowerPC
"Other" | прочие
mimeTypes | Свойство введено для совместимости с Netscape, возвращающего коллекцию объектов типа MimeType. Пока не реализовано и возвращает коллекцию из нуля элементов.
onLine | true, если обозреватель не находится в автономном режиме, и false в противном случае.
opsProfile | Недокументированный синоним свойства userProfile.
platform Операционная система клиента:
"HP-UX" | HP Unix
"MacPPC" | Macintosh/PowerPC
"Mac68X" | Macintosh/680x0
"SunOS" | Solaris
"Win16" | 16-разрядная Windows
"Win32" | 32-разрядная Windows
"WinCE" | Windows CE
plugins | Коллекция всех объектов EMBED в документе.
systemLanguage | Язык пользовательского интерфейса операционной системы (см. Таблицу П8.1).
userAgent Информация об обозревателе в формате поля User-Agent заголовка запроса HTTP (см. Таблицу П5.2), например,
"Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)".
userLanguage | Текущий язык пользователя (см. Таблицу П8.1).
userProfile | Доступ к объекту userProfile, который будет описан в WDH+.

Кроме того, данный объект имеет два метода:

Метод | Описание
javaEnabled() | Возвращает true, если Java-аплеты в обозревателе разрешены, и false в противном случае.
taintEnabled() | Возвращает true, если в обозревателе разрешена защита данных (data tainting), и false в противном случае. Этот метод включен только для совместимости с обозревателями Netscape и в IE всегда возвращает false.

Пример использования clientInformation: следующая функция возвращает номер версии для Internet Explorer и 0 для остальных обозревателей

function getMSIEVersion() {
  var ua = clientInformation.userAgent;
  var msie = ua.lastIndexOf("MSIE ");
  return (msie > 0) ? parseFloat(ua.substr(msie + 5)) : 0;
}

Свойство clipboardData

Синтаксис:  window.clipboardData
Изменяемое: нет

Значением свойства clipboardData является объект, обеспечивающий доступ к системному буферу сохранения. Буфер сохранения в Windows поддерживает пять форматов хранения данных, которые в DHTML обозначаются так:

Обозначение | Описание
"Text" | Текстовый формат
"URL" | Формат URI
"File" | Файловый формат
"HTML" | Формат HTML
"Image" | Формат графического образа

Этот объект не имеет свойств и поддерживает следующие методы:

Метод | Описание
clearData(формат?) | Удаляет заданный формат из буфера сохранения. Если формат не задан, то удаляются все форматы.
getData(формат) | Извлекает данные из буфера сохранения заданного формата, который может иметь значение "Text" или "URL", и возвращает их в виде строки.
setData(формат, данные) | Помещает в буфер сохранения строку данные в заданном формате, который может иметь значение "Text" или "URL". Возвращает true в случае успеха и false в противном случае.

Пример использования clipboardData для вырезания текста на Веб-странице и вставки его в другое место:

<HTML>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<HEAD>
<SCRIPT>
// Выделяем текст, который следует вырезать
function selectText() {
  var r = document.body.createTextRange();
  r.findText(divSource.innerText);
  r.select();
}
// По умолчанию вырезание текста в IE запрещено. Следующая функция его разрешает.
function enableCut() {
  event.returnValue = false;
}
// По умолчанию вставка из буфера в IE запрещена. Следующая функция его разрешает.
function enablePaste() {
  event.returnValue = false;
}
// Вставляем текст из буфера сохранения и сбрасываем returnValue,
// чтобы отменить реакцию обозревателя по умолчанию.
function pasteText() {
  var r = document.selection.createRange();
  r.text = clipboardData.getData("Text");
}
</SCRIPT>
</HEAD>
<BODY onload="selectText()">
<DIV ID="divSource" onbeforecut="enableCut()">Вырежьте этот текст</DIV>
<DIV onbeforepaste="enablePaste()" onpaste="pasteText()">
  Вставьте текст сюда
</DIV>
</BODY>
</HTML>

Свойство closed

Синтаксис:  window.closed
Изменяемое: нет

Значением свойства closed является true, если окно window закрыто, и false, если нет. Пример:

if (!parent.closed)
  parent.close();

Свойство defaultStatus

Синтаксис:  window.defaultStatus
Изменяемое: да

Свойство defaultStatus возвращает или устанавливает текст сообщения, выводимый по умолчанию в строке состояния, которая расположена в нижней части окна обозревателя. Не следует путать его со свойством status, которое содержит текст, выводимый в строке состояния при возникновении определенных событий. Пример:

var d = new Date();
defaultStatus = "Сегодня: " + d.toLocaleDateString();

Свойство dialogArguments

Синтаксис:  window.dialogArguments
Изменяемое: нет

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

Свойство dialogHeight

Синтаксис:  window.dialogHeight
Изменяемое: да

Этим свойством обладают только окна, созданные методами showModalDialog и showModelessDialog. Оно позволяет изменять или считывать высоту окна диалога, которая задается по правилам размеров CSS. Пример:

window.showModalDialog("message.htm", "",
  "dialogTop:100px; dialogLeft:200px; dialogWidth:5cm; dialogHeight:10cm")

Свойство dialogLeft

Синтаксис:  window.dialogLeft
Изменяемое: да

Этим свойством обладают только окна, созданные методами showModalDialog и showModelessDialog. Оно позволяет изменять или считывать смещение окна диалога от левого края экрана, которое задается по правилам размеров CSS. Пример см. в описании свойства dialogHeight.

Свойство dialogTop

Синтаксис:  window.dialogTop
Изменяемое: да

Этим свойством обладают только окна, созданные методами showModalDialog и showModelessDialog. Оно позволяет изменять или считывать смещение окна диалога от верхнего края экрана, которое задается по правилам размеров CSS. Пример см. в описании свойства dialogHeight.

Свойство dialogWidth

Синтаксис:  window.dialogWidth
Изменяемое: да

Этим свойством обладают только окна, созданные методами showModalDialog и showModelessDialog. Оно позволяет изменять или считывать ширину окна диалога, которая задается по правилам размеров CSS. Пример см. в описании свойства dialogHeight.

Свойство document

Синтаксис:  window.document
Изменяемое: нет

Это свойство возвращает указатель на объект document, соответствующий HTML-документу, открытому в данном окне.

Свойство event

Синтаксис:  window.event
Изменяемое: нет

Это свойство возвращает указатель на объект event, описывающий текущее событие. Этот объект доступен только во время обработки событий, и поэтому к нему можно обращаться только из обработчиков событий. Подробное описание этого объекта и примеры его использования приведены в п. 4.12.3.

Свойство external

Синтаксис:  window.external
Изменяемое: нет

Это свойство возвращает указатель на объект external, обеспечивающий доступ к внешним компонентам обозревателя. Объект external будет подробно описан в WDH+.

Свойство frameElement

Синтаксис:  window.frameElement
Изменяемое: нет

Это свойство возвращает объект FRAME или IFRAME, в котором содержится данное окно. Если такого элемента нет, то возвращается null. Пример:

var o = window.frameElement;
if (o) o.src="newdoc.htm";

Свойство frames

Синтаксис:  window.frames
Изменяемое: нет

Это свойство возвращает указатель на коллекцию всех объектов window, определенных документом, ассоциированным с данным окном.

Свойство history

Синтаксис:  window.history
Изменяемое: нет

Значением свойства history является объект, содержащий информацию об узлах, посещенных пользователем (история просмотра).

Этот объект имеет одно свойство, доступное только для чтения:

Свойство | Описание
length | Количество объектов в коллекции

и следующие методы:

Метод | Описание
back(число?) | Эквивалентен нажатию кнопки обозревателя Back заданное число раз. Если число опущено, то загружается предыдущий узел, т. е. back() эквивалентно go(-1). Попытка выхода за пределы истории игнорируется, и пользователь остается на текущей странице.
forward(число?) | Эквивалентен нажатию кнопки обозревателя Forward заданное число раз. Если число опущено, то загружается следующий узел, т. е. forward() эквивалентно go(1). Попытка выхода за пределы истории игнорируется, и пользователь остается на текущей странице.
go(позиция) | Загружает узел, заданный аргументом позиция. Если позиция — это число, то она задает положение узла в истории относительно текущей страницы. Если позиция — это строка, то она должна задавать полный или частичный URI уэла, содержащегося в истории. Если заданный узел не найден или сделана попытка выхода за пределы истории, то пользователь остается на текущей странице.

Свойство length

Синтаксис:  window.length
Изменяемое: нет

Это свойство возвращает количество фреймов в данном окне, т. е. количество содержащихся в нем элементов FRAME и IFRAME. Если значение этого свойства не равно нулю, то для доступа к соответствующим оконным объектам можно использовать конструкцию window[i], где i = 0, … window.length-1.

Свойство location

Синтаксис:  window.location
Изменяемое: нет

Это свойство возвращает указатель на объект location, содержащий информацию об URI документа, открытого в данном окне. Напомним, что в общем виде URI имеет вид:

протокол://хост:порт/путь#закладка?запрос

Объект location содержит названные фрагменты URI как свойства, доступные для чтения и записи:

Свойство | Описание
hash | Закладка, т. е. часть URI, следующая за символом "#" (включая его).
host | Если port не равно null, то эта строка имеет вид hostname:port, в противном случае совпадает с hostname.
hostname | Имя хоста и домена или IP-адрес.
href | Полный URI документа.
pathname | Имя файла или пути.
port | Номер порта, указанный в URI документа.
protocol | Протокол, указанный в URI документа.
search | Запрос, т. е. часть URI, следующая за символом "?" (включая его).

Кроме того, данный объект имеет два метода:

Метод | Описание
assign(URI) | Загружает в окно документ с заданным URI.
reload(flag?) | Перезагружает текущий документ. Аргумент указывает способ перезагрузки: true — перезагрузка с сервера, false — перезагрузка из кэш-памяти. Если аргумент опущен, то он принимается равным false.
replace(URI) | Заменяет текущий документ на документ с заданным URI. При этом текущий документ удаляется из истории просмотра.

Мы можем обращаться к объекту location и как к строке, например window.location = "http://mywww.com/newpage.htm" приведет к загрузке документа с заданным URI. Такое обращение эквивалентно чтению или записи свойства location.href.

Свойство name

Синтаксис:  window.name
Изменяемое: нет

Это свойство позволяет считывать и устанавливать имя окна или фрейма. Его значение задается в формате имени фрейма HTML. Во избежание двусмысленности это свойство всегда следует использовать с префиксом window. Примеры:

window.name = "Window1";		// задание имени окна
parent.frames[0].name = "LetfFrame";	// задание имени фрейма
window.open("file.htm", "_blank");	// открытие документа в новом окне

Свойство navigator

Синтаксис:  window.navigator
Изменяемое: нет

Свойство navigator является синомимом свойства clientInformation, введенным для совместимости с обозревателями Netscape.

Свойство offscreenBuffering

Синтаксис:  window.offscreenBuffering
Изменяемое: да

Свойство offscreenBuffering возвращает или устанавливает режим фоновой буферизации отображения Если этот режим включен, то отображение объектов производится в фоновом режиме, а затем сформированное изображение появляется на экране. Данное свойство может принимать следующие значения:

auto | Обозреватель сам определяет, когда использовать буферизацию (принято по умолчанию).
true | Фоновая буферизация включена.
false | Фоновая буферизация выключена.

Пример:

offscreenBuffering = true;	// включить насильственную буферизацию

Свойство opener

Синтаксис:  window.opener
Изменяемое: да

Это довольно своеобразное по реализации свойство. Изначально оно возвращает ссылку на объект window, создавший данное окно; если окно было открыто обозревателем, а не методом open, showModalDialog или showModelessDialog, то его значение undefined. Своеобразие состоит в том, что мы можем присвоить этому свойству не только ссылку на объект window, но и текстовую строку, и тогда оно будет возвращать в качестве результата эту строку. Поэтому перед использованием данного свойства рекомендуется проверять его тип, например:

function getOpenerName() {
  if (typeof(window.opener) == "object")
    return window.opener.name;
  else
    return window.opener;
}

Свойство parent

Синтаксис:  window.parent
Изменяемое: нет

Это свойство возвращает ссылку на объект window, соответствующий отцу данного окна. Иными словами, для окна, созданного элементом FRAME, оно возвращает ссылку на окно, содержащее соответствующий элемент FRAMESET, а для остальных окон ссылку на самого себя (ср. свойство top). Пример:

for (var i = 0; i < parent.length; i++)
  alert(parent[i].location);

Свойство returnValue

Синтаксис:  window.returnValue
Изменяемое: да

Этим свойством обладают только окна, созданные методом showModalDialog. Оно позволяет считать или изменить значение, которое будет возвращено этим методом в качестве результата. Пример:

<INPUT type="button" onclick="window.returnValue=1; window.close()" value="OK">
<INPUT type="button" onclick="window.returnValue=0; window.close()" value="Cancel">

Свойство screen

Синтаксис:  window.screen
Изменяемое: нет

Значением свойства screen является объект, содержащий информацию об экране клиента. Он имеет следующие свойства:

Свойство | Изменяемое | Описание
availHeight | Нет | Высота рабочей области экрана в пикселях (исключая высоту панели задач). Для экрана 600x800 обычно равна от 570 до 600.
availWidth | Нет | Ширина рабочей области экрана в пикселях (исключая ширину панели задач). Для экрана 600x800 обычно равна от 730 до 800.
bufferDepth Да Число битов на пиксель в фоновом буфере. Возможные значения:
0 | Без буферизации. colorDepth принимается равным количеству цветов экрана.
-1 | Брать из настроек дисплея. colorDepth принимается равным количеству цветов экрана.
1 — 32 | Явное задание числа битов. colorDepth принимается равным этому же значению.
colorDepth | Нет | Число битов на пиксель при отображении цветов. Типичные значения: 8 (256 цветов), 16 (High Color), 24 (True Color).
fontSmoothingEnabled | Нет | true, если включено сглаживание неровностей экранных шрифтов, и false в противном случае.
height | Нет | Высота экрана в пикселях. Например, для экрана 600x800 равна 600.
updateInterval | Да | Интервал обновления экрана в миллисекундах. По умолчанию равен 0 (не обновлять). Изменять без крайней необходимости не рекомендуется.
width | Нет | Ширина экрана в пикселях. Например, для экрана 600x800 равна 800.

Следующий пример

alert("Экран: "+screen.width+" x "+screen.height+" x "+screen.colorDepth +" бита");

выведет окно сообщения с текстом вида Экран: 800 x 600 x 24 бита.

Свойство screenLeft

Синтаксис:  window.screenLeft
Изменяемое: нет

Значением свойства screenLeft является расстояние в пикселях от левого края клиентской области окна обозревателя до левого края экрана.

Свойство screenTop

Синтаксис:  window.screenTop
Изменяемое: нет

Значением свойства screenTop является расстояние в пикселях от верхнего края клиентской области окна обозревателя до верхнего края экрана.

Свойство self

Синтаксис:  window.self
Изменяемое: нет

Это свойство возвращает ссылку на текущий объект window, т. е. на самого себя.

Свойство status

Синтаксис:  window.status
Изменяемое: да

Свойство status возвращает или устанавливает текст сообщения, выводимый в строке состояния, которая расположена в нижней части окна обозревателя. Не следует путать его со свойством defaultStatus, которое содержит текст, выводимый в строке состояния по умолчанию. Пример:

<BODY onload="window.status='Страница загружена!'">

Свойство top

Синтаксис:  window.top
Изменяемое: нет

Это свойство возвращает ссылку на первое окно в иерархии объектов window, т. е. на объект, у которого свойство parent равно самому объекту.

Свойство window

Синтаксис:  window.window
Изменяемое: нет

Это свойство возвращает ссылку на текущий объект window, т. е. на самого себя (синоним свойства self).

Метод alert

Синтаксис: window.alert(текст?)
Аргументы: текст — строковое значение

Метод alert создает диалоговое окно сообщения и, если текст задан, выводит его в это окно. Например, оператор alert("Здравствуйте!") выведет на экран следующее окно:

Пример отображения окна сообщения

Метод attachEvent

Синтаксис: window.attachEvent(событие, функция)
Аргументы: событие — строковое значение
           функция — имя функции JavaScript
Результат: логическое значение

Этот метод присоединяет к стандартному событию DHTML заданную функцию. Он возвращает true, если функция успешно присоединена, и false в противном случае. Присоединение функции к событию состоит в следующем: когда происходит заданное событие, вызывается его обработчик, а после завершения работы обработчика события вызываются все функции, присоединенные к данному событию, причем в произвольном порядке.

Хотя данный метод применим в обычных сценариях, его основное назначение состоит в присоединении к событиям реакций. При этом реакция, присоединенная к событию методом attachEvent, должна явно вызывать метод detachEvent для отсоединения от данной страницы при генерации события ondetach. Реакция, присоединенная к событиям страницы через HTC-элемент ATTACH, автоматически прекращает получать извещения о событиях, когда реакция отсоединяется от элемента, поэтому в этом случае вызывать detachEvent не нужно. Пример использования этого метода см. в п. 4.12.2.

Метод blur

Синтаксис: window.blur()

Метод blur заставляет окно потерять фокус и генерирует событие onblur. Это программный эквивалент удалению пользователем фокуса с текущего окна.

Метод clearInterval

Синтаксис: window.clearInterval(таймер)
Аргументы: таймер — целое значение

Этот метод останавливает таймер, созданный методом setInterval. См. подробности и пример в описании этого метода.

Метод clearTimeout

Синтаксис: window.clearTimeout(таймер)
Аргументы: таймер — целое значение

Этот метод останавливает таймер, созданный методом setTimeout. См. подробности и пример в описании этого метода.

Метод close

Синтаксис: window.close()

Метод close закрывает окно обозревателя. Если окно было создано программно, то оно просто закрывается. Если же окно было создано обозревателем или если это единственное открытое окно обозревателя, то перед его закрытием выводится диалоговое окно, запрашивающее подтверждение действия.

Если метод close вызывается из обработчика событий элемента BODY, то подразумевается метод window.close. Если же он вызывается из объекта event элемента BODY, то подразумевается метод document.close.

Метод confirm

Синтаксис: window.confirm(текст?)
Аргументы: текст — строковое значение
Результат: логическое значение

Метод confirm создает диалоговое окно подтверждения и, если текст задан, выводит его в это окно. Он возвращает true, если пользователь нажал кнопку OK, и false, если пользователь нажал кнопку Cancel. Например, оператор confirm("Отформатировать системный диск?") выведет на экран следующее окно:

Пример отображения окна подтверждения

Метод createPopup

Синтаксис: window.createPopup()
Результат: объект window

Метод createPopup создает всплывающее окно (popup window) и возвращает указатель на него. Всплывающее окно первоначально находится в скрытом состоянии; для его показа нужно вызвать метод show(x, y, width, height, elem?). Здесь x и y задают координаты левого верхнего угла всплывающего окна, width и height — его высоту и ширину, а elem — необязательный объект, относительного которого задаются перечисленные координаты (если он не указан, то координаты вычисляются относительно системной области экрана). Пример:

var oPopup = window.createPopup();
var oBody = oPopup.document.body;
oBody.style.backgroundColor = "lightyellow";
oBody.style.border = "solid black 1px";
oBody.innerHTML = "Щелкните вне окна, чтобы его закрыть.";
oPopup.show(100, 100, 300, 25, document.body);

Метод detachEvent

Синтаксис: window.detachEvent(событие, функция)
Аргументы: событие — строковое значение
           функция — имя функции JavaScript

Этот метод отсоединяет от стандартного события DHTML заданную функцию, ранее присоединенную к нему методом attachEvent. Хотя он применим в обычных сценариях, его основное назначение состоит в отсоединении от событий реакций. При этом реакция, присоединенная к событию методом attachEvent, должна явно вызывать метод detachEvent для отсоединения от данной страницы при генерации события ondetach. Реакция, присоединенная к событиям страницы через HTC-элемент ATTACH, автоматически прекращает получать извещения о событиях, когда реакция отсоединяется от элемента, поэтому в этом случае вызывать detachEvent не нужно. Пример использования этого метода см. в п. 4.12.2.

Метод execScript

Синтаксис: window.execScript(выражение [,язык]?)
Аргументы: выражение, язык — строковые значения

Этот метод выполняет сценарий, заданный выражением. Язык задает имя сценарного языка; по умолчанию он равен "JScript". Пример:

function execute(handler) {
  switch (typeof(handler)) {
    case "string":
      execScript(handler); break;
    case "function":
      handler(); break;
  }
}

execute("alert('Проверка')");

Метод focus

Синтаксис: window.focus()

Метод focus заставляет окно получить фокус и генерирует событие onfocus. Учтите, что окно не может получить фокус, пока документ не будет полностью в него загружен.

Метод moveBy

Синтаксис: window.moveBy(x, y)
Аргументы: x, y — целые значения

Этот метод перемещает окно на x пикселей по горизонтали и y пикселей по вертикали. Пример: moveBy(10, -5).

Метод moveTo

Синтаксис: window.moveTo(x, y)
Аргументы: x, y — целые значения

Этот метод перемещает окно в положение, при котором его верхний левый угол отстоит от левого верхнего угла экрана на x пикселей по горизонтали и y пикселей по вертикали. Следующий пример задает размеры окна и центрирует его на экране:

var w = 200, h = 200;
resizeTo(w, h);
moveTo((screen.width-w)/2, (screen.height-h)/2);

Метод navigate

Синтаксис: window.navigate(URI)
Аргументы: URI — строковое значение

Метод navigate загружает в окно ресурс с заданным URI. Пример: navigate("test.html").

Метод open

Синтаксис: window.open(uri, имя [, свойства?][, флаг?])
Аргументы: uri, имя, свойства — строковые значения
           флаг — логическое значение
Результат: объект window

Метод open создает новое окно обозревателя и возвращает ссылку на него. Аргумент uri задает URI открываемого документа, аргумент имя — имя фрейма для нового окна, которое может использоваться в атрибуте target элементов A и FORM. Необязательный аргумент флаг указывает, нужно ли создавать для новой Веб-страницы отдельную запись в истории просмотра. Если он равен true, то новая запись не создается; вместо этого новая страница замещает в истории текущую. Необязательный аргумент свойства представляет собой список свойств нового окна, разделенных запятыми. В нем мы можем задать следующие свойства:

Свойство | Описание
channelmode | Показывать панель каналов.
directories | Показывать панель ссылок обозревателя.
fullscreen | Открыть окно в полноэкранном режиме.
height | Высота окна в пикселях.
left | Расстояние в пикселях от левого края экрана по горизонтали.
location | Показывать адресную строку обозревателя.
menubar | Показывать меню обозревателя.
resizable | Пользователь может изменять размеры окна.
scrollbars | Показывать полосы прокрутки окна.
status | Показывать строку состояния обозревателя.
titlebar | Показывать заголовок окна (только из HTA).
toolbar | Показывать панель кнопок обозревателя.
top | Расстояние в пикселях от верхнего края экрана по вертикали.
width | Ширина окна в пикселях.

Свойствам width, height, left и top должны быть присвоены числовые значения. Остальные свойства являются логическими; им можно присваивать значения yes или no (или, что то же самое, 1 или 0). Включение в список только имени свойства равносильно присвоению ему значения yes. Пример:

var newWin = window.open("test.htm", "win2", "toolbar,status=no,width=200,height=200");

Метод print

Синтаксис: window.print()

Метод print выводит содержимое данного окна или фрейма на печать.

Метод prompt

Синтаксис: window.prompt([текст?], [значение?])
Аргументы: текст, значение — строковые значения
Результат: строковое или целое значение

Метод prompt создает диалоговое окно, состоящее из строки сообщения и поля ввода. Если текст задан, он выводится в качестве сообщения. Значение задает начальное значение поля ввода;если оно опущено, то равно undefined, и поле ввода пусто. Например, оператор prompt("Введите ваше имя", "") выведет на экран следующее окно:

Пример отображения окна ввода

Если пользователь нажмет кнопку Cancel, то этот метод вернет значение null; если будет нажата кнопка OK, то метод вернет строковое или целое значение, введенное пользователем в поле ввода.

Метод resizeBy

Синтаксис: window.resizeBy(x, y)
Аргументы: x, y — целые значения

Этот метод изменяет размеры окна на x пикселей по горизонтали и y пикселей по вертикали. Пример: resizeBy(10, -5).

Метод resizeTo

Синтаксис: window.resizeTo(ширина, высота)
Аргументы: ширина, высота — целые значения

Этот метод задает новые размеры окна в пикселях, равными ширине по горизонтали и высоте по вертикали. Пример: resizeTo(200, 200).

Метод scroll

Синтаксис: window.scroll(x, y)
Аргументы: x, y — целые значения

Это устаревший синоним метода scrollTo.

Метод scrollBy

Синтаксис: window.scrollBy(x, y)
Аргументы: x, y — целые значения

Этот метод прокручивает документ в окне на x пикселей по горизонтали и y пикселей по вертикали относительно текущей позиции документа в окне. Прокрутка производится только в том случае, когда новая позиция в окне не видна. Пример: scrollBy(10, -5).

Метод scrollTo

Синтаксис: window.scrollTo(x, y)
Аргументы: x, y — целые значения

Этот метод прокручивает документ в окне так, чтобы верхний левый угол окна отстоял от начала документа на x пикселей по горизонтали и y пикселей по вертикали. Прокрутка производится только в том случае, когда новая позиция в окне не видна. Пример: scrollTo(0, 20).

Метод setActive

Синтаксис: window.setActive()

Этот метод делает окно текущим, не помещая на него фокус.

Метод setInterval

Синтаксис: window.setInterval(выражение, интервал)
           window.setInterval(функция, интервал, арг1?, …, аргN?)
Аргументы: выражение — строковое значение
           функция — имя функции
           арг1, …, аргN — значения аргументов функции
           интервал — числовое значение
Результат: целое значение

Этот метод запускает выполнение определенного действия каждый раз, когда истечет интервал, заданный в миллисекундах. Действие задается либо строкой, содержащей выражение JavaScript, либо именем функции с необязательным набором аргументов. Метод возвращает целое значение (идентификатор таймера), которое может быть передано методу clearInterval для остановки данного таймера, т. е. прекращения периодического выполнения данного действия. Заданное действие будет выполняться до вызова clearInterval или до закрытия данного окна.

Следующий пример использует метод setInterval для вывода текущего времени в строке состояния обозревателя каждую секунду:

<HTML>
<HEAD>
<SCRIPT>
var timerID = null;

function stopclock() {
  if (timerID)
    clearInterval(timerID);
  timerID = null;
}
function startclock() {
  stopclock();
  timerID = setInterval(showtime, 1000); // или setInterval("showtime()", 1000)
}
function showtime() {
  window.status = (new Date()).toLocaleTimeString();
}
</SCRIPT>
</HEAD>
<BODY onload="startclock()">
</BODY>
</HTML>

Метод setTimeout

Синтаксис: window.setTimeout(выражение, интервал)
           window.setTimeout(функция, интервал, арг1?, …, аргN?)
Аргументы: выражение — строковое значение
           функция — имя функции
           арг1, …, аргN — значения аргументов функции
           интервал — числовое значение
Результат: целое значение

Этот метод вызывает разовое выполнение определенного действия, когда истечет интервал, заданный в миллисекундах. Действие задается либо строкой, содержащей выражение JavaScript, либо именем функции с необязательным набором аргументов. Метод возвращает целое значение (идентификатор таймера), которое может быть передано методу clearTimeout для остановки данного таймера, т. е. для отмены выполнения заданного действия. Действие будет выполнено по истечении заданного интервала времени, если до этого не будет вызван метод clearTimeout или закрыто данное окно.

Следующий пример использует метод setTimeout для вывода текущего времени в строке состояния обозревателя каждую секунду:

<HTML>
<HEAD>
<SCRIPT>
var timerID = null;

function stopclock() {
  if (timerID)
    clearInterval(timerID);
  timerID = null;
}
function startclock() {
  stopclock();
  showtime();
}
function showtime() {
  window.status = (new Date()).toLocaleTimeString();
  timerID = setTimeout(showtime, 1000); // или setTimeout("showtime()", 1000)
}
</SCRIPT>
</HEAD>
<BODY onload="startclock()">
</BODY>
</HTML>

Метод showHelp

Синтаксис: window.showHelp(URI, контекст?)
Аргументы: URI — строковое значение
           контекст — строковое или числовое значение

Этот метод открывает в новом окне справочный файл, заданный URI. Необязательный аргумент контекст задает идентификатор контекста искомой справки в справочном файле. Поддерживаются только файлы с расширениями .htm и .chm (формата HTMLHelp). Пример: showHelp("C:\\WINDOWS\\HELP\\ADO210.CHM").

Метод showModalDialog

Синтаксис: window.showModalDialog(uri [, аргументы?][, свойства?])
Аргументы: uri, имя, аргументы, свойства — строковые значения
           аргументы — значение произвольного типа
Результат: определяется новым окном

Метод showModalDialog создает новое окно модального диалога. Аргумент uri задает URI открываемого документа, необязательный параметр аргументы используется для передачи новому окну значения любого типа; это значение может быть извлечено в диалоговом окне через свойство dialogArguments. Необязательный аргумент свойства представляет собой список свойств нового окна вида свойство:значение, разделенных точками с запятой. В нем мы можем задать следующие свойства:

Свойство | Описание
dialogHeight:размер | Высота окна.
dialogLeft:размер | Расстояние от левого края экрана по горизонтали.
dialogTop:размер | Расстояние от верхнего края экрана по вертикали.
dialogWidth:размер | Ширина окна.
center | Центрировать окно на экране.
dialogHide | Скрывать окно при печати (только из HTA).
edge | Тип рамки окна: sunken (выемка) или raised (выступ, по умолчанию).
help | Выводить контекстно-зависимую иконку справки.
resizable | Пользователь может изменять размеры окна.
scroll | Показывать полосы прокрутки окна.
status | Показывать строку состояния обозревателя.
unadorned | Показывать рамку окна (только из HTA).

Свойства center, dialogHide, help, resizable, scroll, status и unadorned являются логическими; им можно присваивать значения yes или no (или, что то же самое, on или off, 1 или 0).

Значением этого метода является значение свойства returnValue, установленное в окне диалога. Пример создания модального диалога:

window.showModalDialog("dialog.htm", "",
 "dialogHeight:100; dialogWidth:100; resizable:yes; edge:sunken");

Метод showModelessDialog

Синтаксис: window.showModelessDialogg(uri [, аргументы?][, свойства?])
Аргументы: uri, имя, аргументы, свойства — строковые значения
           аргументы — значение произвольного типа
Результат: определяется новым окном

Метод showModelessDialog создает новое окно немодального диалога. Немодальный диалог отличается от модального тем, что не закрывая его, мы можем переключиться в родительское окно. Аргумент uri задает URI открываемого документа, необязательный параметр аргументы используется для передачи новому окну значения любого типа; это значение может быть извлечено в диалоговом окне через свойство dialogArguments. Необязательный аргумент свойства представляет собой список свойств нового окна вида свойство:значение, разделенных точками с запятой. В нем мы можем задать следующие свойства:

Свойство | Описание
dialogHeight:размер | Высота окна.
dialogLeft:размер | Расстояние от левого края экрана по горизонтали.
dialogTop:размер | Расстояние от верхнего края экрана по вертикали.
dialogWidth:размер | Ширина окна.
center | Центрировать окно на экране.
dialogHide | Скрывать окно при печати (только из HTA).
edge | Тип рамки окна: sunken (выемка) или raised (выступ, по умолчанию).
help | Выводить контекстно-зависимую иконку справки.
resizable | Пользователь может изменять размеры окна.
scroll | Показывать полосы прокрутки окна.
status | Показывать строку состояния обозревателя.
unadorned | Показывать рамку окна (только из HTA).

Свойства center, dialogHide, help, resizable, scroll, status и unadorned являются логическими; им можно присваивать значения yes или no (или, что то же самое, on или off, 1 или 0).

Значением этого метода является значение свойства returnValue, установленное в окне диалога. Пример создания немодального диалога:

window.showModelessDialog("dialog.htm", "",
 "dialogHeight:100; dialogWidth:100; resizable:yes; edge:sunken");


WDH: ASP - Введение в ASP

Часть VII.
Приложения сервера:
технологии ASP и JSP

Документ в процессе разработки!

Глава 7.1. Введение в ASP

7.1.1. Что такое Active Server Pages?

Microsoft определяет Active Server Pages (ASP) так: "ASP — это открытая прикладная среда, свободная от компиляции, в которой мы можем сочетать HTML, сценарии и повторно-используемые серверные ActiveX-компоненты для создания динамичных и мощных бизнес-решений, основанных на Вебе." В переводе с корпоративного языка на русский, ASP — это просто Веб-страницы, содержащие серверные сценарии.

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

Сценарии ASP могут быть написаны на любом языке, поддерживаемом сервером (например, JavaScript, VBScript или PERL). Мы в дальнейшем изложении приводим все примеры на языке JavaScript, поскольку он является на сегодня базовым сценарным языком.


WDH: Java - Введение в язык Java

Часть V.
Приложения клиента: язык Java

"То, что не излечивается лекарствами, излечивается ножом; то, что не излечивается ножом, излечивается раскаленным железом; то, что не излечивается раскаленным железом, следует считать неизлечимым."

Гиппократ

Глава 5.1. Введение в язык Java

5.1.1. Что такое Java?

Java — это мощный язык программирования, разработанный в 1995 г. фирмой Sun Microsystems для интерактивного телевидения и управления бытовыми устройствами. Однако, быстрое развитие Сети открыло истинное призвание Java — создание небольших программ, называемых аплетами (applets), которые могут быть загружены Веб-обозревателем с сервера и исполнены на стороне клиента. По ряду причин, подробно рассмотренных ниже, Java стал обязательным атрибутом каждого Веб-сервера и каждого Веб-обозревателя, претендующего на соответствие требованиям современности.

Популярность Java в World Wide Web объясняется тем, что он имеет одно принципиальное отличие от всех остальных языков программирования. Как известно, все языки делятся на компилируемые и интерпретируемые. Программа на компилируемом языке (например, C++) перед использованием должна быть предварительно скомпилирована и собрана в загрузочный модуль в машинных кодах. Такой модуль характеризуется высокой скоростью работы, но он жестко привязан к конкретной платформе и конкретной операционной системе; для его переноса в другую среду требуется перекомпиляция всей программы. Интерпретируемые языки (например, JavaScript, Perl и вообще все сценарные языки) не требуют предварительной компиляции, программы на них исполняются интерпретатором, который читает исходный текст программы и немедленно его исполняет. Преимуществом таких языков является их гибкость и быстрота разработки, а недостатком — низкая скорость работы и полная зависимость от исполняющей системы (высокий уровень языка требует высокого уровня исполняющей среды, а это всегда приводит к несовместимости).

Разработчики Java избрали средний путь, который состоит в следующем. Программа на языке Java (обычно это файл с расширением .java) компилируется в промежуточный стандартный код, который называется байт-кодом (такие файлы имеют расширение .class). Этот код не является машинным языком какого-либо конкретного процессора, а специально создан авторами Java; его следует рассматривать как язык ассемблера виртуальной Java-машины, не имеющей физической реализации. Для того, чтобы скомпилированная Java-программа могла исполняться на конкретном компьютере, на него нужно установить программу, интерпретирующую байт-коды Java (обычно эту программу также называют виртуальной Java-машиной). Поскольку байт-коды Java — это язык уровня ассемблера, нетрудно добиться полной совместимости реализаций виртуальных машин для разных платформ. Описанный процесс графически выглядит так:

Этапы исполнения Java-программы

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

Классификация языков программирования

Концепция виртуальной машины имеет ряд следствий, важных для применения Java в Сети.

  • Прежде всего, виртуальная машина позволяет решить проблемы безопасности компьютера, на котором исполняется Java-программа; последняя видит только виртуальную машину и ничего не знает о физической среде исполнения, а, следовательно, мы можем четко определить полномочия данной программы по доступу к файлам, каталогам и пр. составляющим операционной среды.
  • Поскольку Java-программа хранится в виде байт-кодов, сервер может передать ее на компьютер-клиент, а тот немедленно запустить ее исполнение (разумеется, при условии, что на клиенте установлена виртуальная Java-машина). Именно так работают аплеты, что и обеспечило их популярность.
  • Виртуальная Java-машина устроена так, что позволяет собирать программы по кусочкам во время исполнения (это называется динамическим связыванием модулей). Поскольку исполняющая система Java содержит помимо самой виртуальной машины большую библиотеку стандартных модулей, динамическое связывание позволяет нам передавать по Сети только написанные нами для конкретной задачи модули, что резко сокращает объем передаваемой информации.

Наше описание языка Java соответствует спецификации Java 2, которая является на сегодня базовой для существующих реализаций. Описание стандартных пакетов, используемых для создания аплетов, соответствует Sun Java SDK 1.3.1, который использовался автором для отладки приведенных ниже примеров.

5.1.2. Обзор языка

В основу Java был положен синтаксис C++, но в некоторых отношениях эти два языка существенно различаются. Можно сказать, что Java представляет собой C++, из которого убраны все потенциально опасные конструкции и добавлены несколько идей из других языков программирования. В частности, Java не имеет препроцессора, запрещает прямой доступ к памяти и арифметику указателей, не допускает переопределения операторов и не поддерживает множественного наследования классов. С другой стороны, Java является строготипизированным языком, поддерживает динамическое управление памятью (включая сборку мусора) и многопотоковое выполнение программ.

Java — это объектно-ориентированный язык программирования, основанный на классах. Класс Java — это тип данных, состоящий из некоего набора данных и методов, т. е. функций, манипулирующих этими данными. В процессе работы программы создаются объекты, т. е. переменные, которые являются экземплярами реализации данного класса. Новые классы описываются как наследники существующих классов и тем самым образуют иерархию. Взаимосвязанные наборы классов Java объединяются в пакеты, которые являются самостоятельно компилируемыми единицами.

5.1.3. Создание и выполнение Java-программ

Для создания программ на языке Java необходимо установить на свой компьютер соответствующее программное обеспечение. Java 2 SDK корпорации Sun включает в себя компилятор, виртуальную машину, библиотеку стандартных классов и несколько полезных утилит. Последнюю версию SDK можно бесплатно загрузить с узла http://java.sun.com/j2se/1.3/index.html Внешняя ссылка.

Порядок разработки и отладки программы на языке Java таков:

  • Исходный текст программы набирается в любом текстовом редакторе и сохраняется в файле с расширением .java, например myfile.java.
  • Этот файл компилируется командой javac myfile.java. Если компиляция прошла успешно, то создается файл байт-кодов myfile.class.
  • Этот файл пригоден для исполнения. Если мы написали Java-программу, то он исполняется командой java myfile.class, а если Java-аплет, то командой appletviewer myfile.class.

Отметим, что стандартный дистрибутив Java SDK не содержит интегрированной среды разработки и отладки программ, без которой написание Java-аплетов превращается в длинный и нудный процесс. Поэтому для создания сколь-нибудь серьезных аплетов вам понадобится интегрированная среда; лучшими (из бесплатных) на сегодня являются Forte for Java Внешняя ссылка и Borland JBuilder Внешняя ссылка.

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


WDH: PERL - Основные понятия

Глава 6.2. Основные понятия

6.2.1. Типы данных и переменные

PERL имеет всего три встроенных типа данных: скаляры, массивы и ассоциативные массивы (hashes). Скаляры — это числа, строки и ссылки. Массивы — это упорядоченные списки значений, которые доступны по номеру в списке и нумеруются с нуля. Ассоциативные массивы — это неупорядоченные списки значений, которые индексируются строковыми ключами.

Идентификаторы используются в PERLе в качестве имен переменных, подпрограмм, меток и т. п. Они могут начинаться с латинской буквы или символа "_" (подчеркивание) и должны состоять из латинских букв, цифр и подчеркиваний. Перед именем переменной всегда ставится специальный символ, который указывает на ее тип:

Символ | Тип данных
$ | Скаляр
@ | Массив
% | Ассоциативный массив
& | Подпрограмма (необязателен)
* | Ссылка на таблицу символов

Приведем примеры образования имен переменных.

$day | Простая скалярная переменная.
$days[5] | 6-й элемент массива @days.
$days('May') | Элемент ассоциативного массива %days, соответствующий ключу 'May'.

Каждый тип переменных имеет собственное пространство имен, поэтому мы можем использовать один и тот же идентификатор для скаляра, массива, ассоциативного массива и подпрограммы. Например, $name и @name — это разные переменные. Два идентификатора считаютс одинаковыми, когда они полностью совпадают; это означает, что name, Name и NAME являются различными идентификаторами.

Особую группу переменных образуют т. н. специальные переменные, в которых хранится разнообразная служебная информация. Специальные переменные описываются в тексте по мере надобности в них; их полный перечень приведен в Приложении 22.

6.2.2. Зарезервированные слова

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

6.2.3. Константы

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

6.2.3.1. Числовые константы

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

  • Десятичные числа — это просто набор десятичных цифр, например: 1234, -256. Они могут содержать символ подчеркивания для удобства чтения: 1_234_567 эквивалентно 1234567.
  • Двоичные числа начинаются с 0b и состоят из цифр 0 и 1, например: 0b001001.
  • Восьмеричные числа начинаются с 0 и состоят из цифр 0 — 7, например: 01234, -067.
  • Шестнадцатеричные числа начинаются с 0x и состоят из цифр 0 — 9 и букв A — F в любом регистре, например: 0xA000, 0xa000, -0x1234.

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

0.0001, .0001, 1e-4, 1.0E-4 | // Четыре плавающих числа, равных друг другу
-1.23e2 | // Плавающее число, равное -123

6.2.3.2. Строковые константы

PERL содержит два формата строковых констант. Первый формат имеет вид строки, заключенной в апострофы, например, 'текст'. Такие строки воспринимаются интерпретатором буквально, без анализа их содержимого. Вместо апострофов можно использовать формат q/текст/, причем вместо дробной черты допустим любой символ-разделитель или парные разделители: (), [], {}, <>. Примеры:

print 'текст';
print q/текст/;
print q#текст#;
print q[текст];

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

print "текст\n";
print qq/текст\n/;
print qq*текст\n*;
print qq{текст\n};

Здесь \n задает символ перевода строки. Такие обозначения называются escape-последовательностями и имеют вид \xXX, где XX — шестнадцатеричный код символа, или \0XXX, где XXX — восьмеричный код символа Unicode. Для задания кодов Unicode, больших 256, используется формат \x{XXXX}. Кроме того, несколько символов могут обозначаться специальными escape-последовательностями:

\a | \x07 | звонок (BEL)
\b | \x08 | забой (BS)
\t | \x09 | табуляция (HT)
\n | зависит от системы | новая строка (NL)
\f | \x0C | перевод формата (FF)
\r | \x0D | возврат каретки (CR)
\e | \x1B | escape (ESC)
\" | \x22 | двойная кавычка (")
\' | \x27 | апостроф (')
\\ | \x5C | обратная косая черта (\)
\c символ | код символа - 0x40 | управляющий символ (например, \c[ эквивалентно \e)

Следующие escape-последовательности управляют преобразованием символов строки:

\l | преобразовать следующий символ в строчную букву
\u | преобразовать следующий символ в прописную букву
\L | преобразовывать в строчные буквы до \E
\U | преобразовывать в прописные буквы до \E
\Q | выводить символ "\" перед символами, недопустимыми в идентификаторах, до \E
\E | конец преобразований

Для того, чтобы преобразование символов правильно работало с русскими буквами, используйте директиву set locale, например:

use locale;
print "\Uабвгд\E\n";

Различие между двумя форматами строковых констант демонстрируется следующим примером:

$price = '100 руб.';
print "Цена: $price\n";
print 'Цена: $price\n';

Эта программа выведет на экран строки:

Цена: 100 руб.
Цена: $price\n

Еще один способ кодирования строк Unicode имеет вид: vXXX.YYY.ZZZ, где XXX, YYY и ZZZ — десятичные коды символов. Если такая конструкция содержит более одной точки, то символ v в начале можно опустить. Примеры:

print v169;         # выводит символ ©
print v102.111.111; # выводит строку "foo"
print 102.111.111;  # то же самое

Для выполнения внешних программ или команд операционной системы используются строковые константы вида `команда`. Вместо символа "`" можно использовать формат qx/команда/, причем вместо дробной черты допустим любой символ-разделитель или парные разделители. Такая строковая константа возвращает в качестве результата все, что указанная команда выводит на стандартное устройство вывода системы (stdout). Например, оператор print `set`; выведет на экран текущее состояние системного окружения. Затем полученная строка анализируется интерпретатором так же, как если бы она была заключена в кавычки, если только строка не имела вида qx'команда'.

6.2.3.3. Специальные константы

PERL поддерживает пять специальных констант:

__FILE__ | имя текущего файла
__LINE__ | номер текущей строки файла
__PACKAGE__ | имя текущего пакета
__END__ | логический конец программы
__DATA__ | начало данных программы

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

print "Ошибка в ".__FILE__.", строка ".__LINE__."\n";

Обратите внимание, что здесь использован оператор конкатенации строк ".", поскольку специальные константы внутри строки не распознаются интерпретатором.

Константы __END__ и __DATA__ обозначают логический конец программы: все, что следует за ними в файле программы, будет проигнорировано. Различие между ними состоит в том, что текст после __DATA__ доступен для чтения из файла с именем packname::DATA, где packname — имя текущего пакета (см. п. 6.7.1).

6.2.4. Преобразования скалярных типов

Как указывалось выше, числа и строки не являются в PERLе отдельными типами, а относятся к единому скалярному типу. Это, в частности, означает, что значения скалярных переменных по мере необходимости автоматически преобразуются в строку или число. Рассмотрим пример:

$x = 2;
$y = 4;
$z = ($x.$y) / 2;
print $z;

Здесь оператор присваивания выполняет три неявных преобразования типа. Поскольку операция "." означает в PERLе конкатенацию строк, переменные $x и $y будут преобразованы в строки "2" и "4", которые дадут строку "24". Далее в операторе стоит деление на 2, поэтому полученная строка будет преобразована в число и поделена пополам. В результате данный пример выведет на экран значение 12.

Автоматические преобразования обычно облегчают написание программ, но требуют от программиста внимания. Рассмотрим для примера сравнение строк. В зависимости от контекста PERL может сравнить их как строки или как числа, что приводит к разным результатам. Так, строки "1" и "01" различны, но при преобразовании в число становятся равными. По этой причине PERL содержит два набора операций сравнения: для чисел и для строк.

PERL не поддерживает логических значений, но содержит логические операторы и операции. В контексте этих операторов и операций действует следующее соглашение: неопределенное значение undef считается ложным; число считается ложным, если оно равно нулю; строка считается ложной, если она пуста или равна "0". Все остальные скалярные значения считаются истинными.

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

6.2.5. Списки

Одним из важнейших механизмов PERLа являются списки. Список — это набор выражений, разделенных запятыми и обычно заключенный в круглые скобки. Значением списка является сам список; если контекст не требует списочного значения, то возвращается последний элемент списка (аналогично операции запятая в других языках программирования). Например, оператор

@people = ('Анна', 'Борис', 'Виктор');

присвоит переменной @people массив из трех элементов, тогда как оператор

$people = ('Анна', 'Борис', 'Виктор');

присвоит переменной $people строку 'Виктор'.

PERL допускает использование запятой после последнего элемента списка, например:

@people = (
  'Анна',
  'Борис',
  'Виктор',
);

Если элементы списка сами являются списками, то они разворачиваются в единый список. Например, два следующих оператора эквивалентны:

@newpeople = (@people, 'Георгий');
@newpeople = ('Анна', 'Борис', 'Виктор', 'Георгий');

Пустой список задается выражением (). Если все элементы списка являются строками, не содержащими пробелов (т. е. словами), то можно использовать конструкцию qw/слово слово.../, где вместо дробной черты допустим любой символ-разделитель или парные разделители: (), [], {}, <>. Примеры:

@people = ('Анна', 'Борис', 'Виктор');
@people = qw/Анна Борис Виктор/;
@people = qw[Анна Борис Виктор];

Списки могут использоваться не только в правой, но и в левой части оператора присваивания, если все элементы такого списка являются переменными:

($x, $y, $z) = (1, 2, 3);

Для того, чтобы пропустить какие-либо значения присваиваемого списка, в соответствующих местах левого списка ставится undef, например оператор

($x, undef, $z) = (1, 2, 3);

присвоит переменной $x значение 1 и переменной $z значение 3.

Оператор присваивания списков возвращает длину присваиваемого списка. В следующем примере

$a = (($x, $y) = (1, 2, 3));

переменная $a получит значение 3.

Последним элементом списка в левой части оператор присваивания может быть массив или ассоциативный массив:

($girl, @guys) = ('Анна', 'Борис', 'Виктор', 'Георгий');

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

PERL поддерживает сокращенную форму списков, состоящих из последовательных значений, вида (значение..значение). Например, список (1..4) эквивалентен списку (1, 2, 3, 4), а список ('abc'..'abe') — списку ('abc', 'abd', 'abe').

6.2.6. Массивы

Массивы — это упорядоченные наборы значений, которые доступны по своему порядковому номеру. Элементы массива нумеруются с нуля, отрицательный номер элемента означает, что он отсчитывается от конца массива (элемент с номером -1 соответствует последнему элементу массива). Для доступа к элементу массива @array с номером n используется конструкция $array[n]:

@numbers = (1, 2, 3, 4, 5);
print $numbers[0];  # 1
print $numbers[1];  # 2
print $numbers[-1]; # 5

С каждым массивом @array связана переменная $#array, которую иногда не совсем точно называют длиной массива. На самом деле, она равна номеру последнего элемента массива. Мы можем не только читать значение этой переменной, но и изменять его, тем самым изменяя фактическую длину массива. Примеры:

@numbers = (1, 2, 3, 4, 5);
print $#numbers;  # 4
$#numbers = 2;    # @numbers = (1, 2, 3)
$#numbers = 4;    # @numbers = (1, 2, 3, undef, undef)

В частности, для удаления всех элементов массива можно использовать следующие операторы, которые полностью эквивалентны:

@array = ();
$#array = -1;

Для расширения массива до нужной длины можно также присвоить значение последнему (еще не существующему) элементу массива:

@array = ();
$array[3] = 3; # (undef, undef, undef, 3)

Преобразование массива в скаляр возвращает длину массива, т. е. scalar(@array) = $#array + 1.

Мы можем извлекать не только значения отдельных элементов массива, но и его подмассивы. Эта операция называется вырезкой (slice) и состоит в одновременном применении заданной операции к элементам массива, номера которых заданы списком. Пример:

@people = ('Анна', 'Борис', 'Виктор', 'Георгий');
print @people[1, 3];           # ('Борис', 'Георгий')
print @people[1..2];           # ('Борис', 'Виктор')
($him, $her) = @people[-1..0]; # $him = 'Георгий', $her = 'Анна'
@people[2..4] = qw/Валентин Геннадий Дмитрий/;
# теперь @people равен ('Анна', 'Борис', 'Валентин', 'Геннадий', 'Дмитрий')

Для проверки понимания изложенного ответьте на вопрос: сколько элементов в массиве (1)[1, 0]? Правильный ответ: два (undef и 1).

6.2.7. Ассоциативные массивы

Ассоциативный массив — это неупорядоченный набор пар (ключ, значение), которые доступны по ключу. Для доступа к элементу массива %hash с ключом key используется конструкция $hash{key}. Существует два способа инициализации ассоциативного массива. Первый состоит в присвоении ему списка вида (ключ1, значение1, … ключn, значениеn), например:

%fruits = ("зеленый", "яблоко", "оранжевый", "апельсин", "желтый", "банан");
print $fruits{"желтый"};

Эта программа выведет на экран слово банан. Второй способ инициализации ассоциативного массива использует операцию =>:

%fruits = (красный => "яблоко", оранжевый => "апельсин", желтый => "банан");

Обратите внимание, что названия ключей здесь не заключены в кавычки. Дело в том, операция => по умолчанию считает, что ее левый операнд является строкой. Однако, если название ключа не является единым словом, нам придется использовать кавычки:

%fruits = ("красно-зеленый" => "яблоко", оранжевый => "апельсин", желтый => "банан");

Для создания пустого ассоциативного массива используется пустой список (). Если мы хотим заранее задать размер массива, то можем использовать функцию keys:

%colors = ();
keys(%colors) = 1000;

Размер ассоциативного массива всегда является степенью числа 2, поэтому фактический размер массива %colors будет равен 1024.

Мы можем добавлять пары ключей и значений в ассоциативный массив как индивидуально, и с помощью вырезок:

%colors = (red => 0xff0000, blue => 0x0000ff, green => 0x008000);
$colors{'white'} = 0xffffff;
@colors{'black', 'silver','gray'} = (0x000000, 0xc0c0c0, 0x808080);

Эти конструкции требуют пояснения. Фигурные скобки здесь говорят о том, что мы обращаемся к ассоциативному массиву %colors, а символы % и @ указывают, что мы заносим в него скалярное значение и список соответственно.

В скалярном контексте ассоциативный массив возвращает строку вида "m/n", где m — количество заполненных пар, а n — количество выделенных пар в массиве. Поэтому мы можем использовать конструкцию if (%colors) … для проверки пустоты ассоциативного массива (пустой массив вернет строку "0/n", которая преобразуется в число 0).

6.2.8. Ссылки

Ссылка — это указатель на переменную. PERL обеспечивает три способа создания ссылок. Первый способ состоит в применении к переменной операции \:

$sref = \$scalar; # ссылка на скаляр
$aref = \@array;  # ссылка на массив
$href = \%hash;   # ссылка на ассоциативный массив

Применение операции \ к списку возвращает массив ссылок, например оператор

@list = \($a, @b, %c);

эквивалентен оператору

@list = (\$a, \@b, \%c);

В частности, \(@array) возвращает массив ссылок на элементы @array. Аналогично и \(%hash) вернет массив ссылок на ключи и значения %hash с одним нюансом: возвращаются ссылки не на ключи исходного ассоциативного массива, а на их копии.

Второй способ позволяет нам создавать ссылки на безымянные объекты. Ссылка на безымянный скаляр также создается операцией \:

$nref = \10;    # ссылка на число
$sref = \"\n";  # ссылка на строку

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

$aref = [1, 2, 3];
$href = {red => 0xff0000, blue => 0x0000ff, green => 0x008000};

Еще один способ создания ссылок имеет синтаксис *name{THING}, где name — имя переменной, а THING — название ее типа:

$sref = *x{SCALAR}; # ссылка на скаляр $x
$aref = *x{ARRAY};  # ссылка на массив @x
$href = *x{HASH};   # ссылка на ассоциативный массив %x

Если переменной с заданным именем и заданного типа нет, то эта конструкция возвращает undef. Смысл конструкции *name описан в п. 6.2.10, возможные значения THING — в п. 6.7.1.2.

Доступ к объекту, на который указывает ссылка $ref (разадресация ссылки) производится согласно следующему правилу: имя объекта эквивалентно выражению {$ref}. Это правило легко запомнить, но полученные с его помощью конструкции читать нелегко. Поэтому PERL допускает несколько сокращений, позволяющих обращаться к элементам разадресуемых объектов проще. Пусть, например,

$s = "Проверка";
$ps = \$s;
@a = (1, 2, 3);
$pa = \@a;
%h = {red => 0xff0000, blue => 0x0000ff, green => 0x008000};
$ph = \%h;

Тогда следующие выражения эквивалентны:

Исходный объект | Полная форма | Сокращения
$s | ${$ps} | $$ps
@a | @{$pa} | @$pa
$a[1] | ${$pa}[1] | $pa->[1], $$pa[1]
%h | %{$ph} | %$ph
$h{'red'} | ${$ph}{'red'} | $ph->{'red'}, $$ph{'red'}

Теперь мы можем привести пример использования ссылок. Рассмотрим следующий оператор:

@a = ([1, 2, 3], [4, 5, 6], [7, 8, 9]);

Он присваивает переменной @a массив, состоящий из трех ссылок на безымянные массивы. Фактически мы получили двумерный массив, к элементам которого можно обращаться так: $a[строка]->[столбец]. PERL позволяет нам опускать стрелку между индексами массива, т. е. обращение к элементу может иметь вид $a[строка][столбец], подобно обращению к элементам двумерных массивов в других языках программирования.

6.2.9. Символические ссылки

Ссылки, рассмотренные в предыдущем разделе, выглядят вполне традиционно для программиста, знакомого с языками C/C++, Pascal и т. п. Однако, PERL содержит еще один вариант ссылок (т. н. символические ссылки), который ближе по возможностям к функции eval сценарных языков. Суть состоит в том, что любая скалярная переменная может интерпретироваться как указатель на переменную, имя которой она содержит. Пусть, например, переменная $name имеет строковое значение "abc". Тогда мы можем обращаться к $name как к ссылке на переменную с именем abc, например:

$$name = 1;        # $abc = 1
${$name} = 2;      # $abc = 2
${$name x 2} = 3;  # $abcabc = 3
$name->[0] = 4;    # $abc[0] = 4
@$name = ();       # @abc = ()

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

use strict 'refs';

Во вложенном блоке мы можем вновь разрешить символические ссылки директивой

no strict 'refs';

Локальные переменные, объявленные функцией my(), невидимы для символических ссылок. Например, сценарий

$ref = "value";
$value = 10;
{
  my $value = 20;
  print $$ref;
}

выведет на экран число 10, а не 20.

6.2.10. Ссылки на таблицу символов

PERL использует для хранения ссылок на записи таблицы символов внутренний тип typeglob. Для указания на него используется форма *name. Основное назначение таких ссылок — создание синонимов для записей таблицы символов. Присваивание

*this = *that;

делает $this синонимом для $that, @this синонимом для @that, %this синонимом для %that и &this синонимом для &that. После этого любая операция с переменными this одновременно изменяет значение соответствующей переменной that, и наоборот. Пример:

$a = 0;
*b = *a;
$a = 1;
print $b; # выводит 1
$b = 2;
print $a; # выводит 2

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

local *my_x = \$x;

Этот оператор временно делает переменную $my_x синонимом переменной $x, но не создает синонимов для @x и т. д.

Еще одно полезное применение typeglob — это создание именованных констант, например, оператор

*PI = \3.14159265358979;

позволяет нам пользоваться значением переменной $PI, но запрещает его изменение. Подробнее о таблицах символов см. п. 6.7.1.2.

6.2.11. Описатели файлов

Описатели файлов (filehandles), строго говоря, не являются типом данных; это особый вид строковых констант. Однако, они во многом ведут себя так же, как переменные, поэтому мы описываем их в этой главе.

Описатели файлов создаются встроенной функцией open() и обеспечивают ввод-вывод файлов, например:

open INFO, "datafile" or die "Не могу открыть файл: $!";

Описатели файлов (как INFO в этом примере) принято записывать прописными буквами. PERL поддерживает три системных описателя файлов, которые создаются при запуске программы:

STDIN | Стандартный файл ввода (по умолчанию, клавиатура).
STDOUT | Стандартный файл вывода (по умолчанию, консоль; в Веб-приложениях обычно окно обозревателя).
STDERR | Стандартный файл вывода сообщений об ошибках (по умолчанию, консоль; в серверных Веб-приложениях обычно файл протокола ошибок).

Для чтения данных из файла существует специальная операция <описатель>, в скалярном контексте возвращающая очередную запись файла или undef в конце файла или при ошибке чтения. Обычно записью является строка, но мы можем изменить символ конца записи, присвоив его специальной переменной $/. В любом случае возвращаемая строка содержит в конце разделитель записей. Мы можем присвоить результат этой операции любой переменной; если же операция вызвана без присваивания, то ее результат заносится в специальную переменную $_. Следующий пример читает строки из файла MYFILE.DAT и выводит их на консоль:

open INFO, "myfile.dat" or die "Не могу открыть файл: $!";
while (<INFO>) { print; }

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

open INFO, "myfile.dat" or die "Не могу открыть файл: $!";
@f = <INFO>;
print @f;

Операция <описатель> является сокращением для readline(*описатель). Существует особая "пустая операция" <>, которая читает либо стандартный файл ввода, либо последовательно все файлы, перечисленные в командной строке. При первом вызове операции <> PERL проверяет специальный массив @ARGV, содержащий список аргументов командной строки, и, если он пуст, заносит в $ARGV[0] строку "-", т. е. указатель на STDIN. Каждый последующий вызов <> возвращает очередную запись текущего файла, указанного в командной строке; если файл считан полностью, то окрывается следующий файл, указанный в командной строке, и возвращается его первая запись. Для проверки того, что все файлы считаны, используется встроенная функция eof().

Для вывода данных в файл обычно используется функция print(), например:

print INFO "Моя строка";

Встроенные функции работы с файлами подробно описаны в гл. 6.11.


WDH: PERL - Выражения и операции

Глава 6.3. Выражения и операции

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

  • операции сравнения;
  • логические операции;
  • битовые операции;
  • унарные операции;
  • аддитивные операции;
  • мультипликативные операции;
  • операции присваивания;
  • q-операции;
  • прочие операции;

Операции ввода-вывода описаны в п. 6.2.11, операции с регулярными выражениями — в п. 6.4.6.

6.3.1. Операции сравнения

Операции сравнения сравнивают два операнда и возвращают 1 или 0 в зависимости от результата этого сравнения. PERL содержит два набора операций сравнения: для сравнения чисел и для сравнения строк. Операции первой группы сначала преобразуют операнды в числа, а затем их сравнивают. Операции второй группы преобразуют операнды в строки и сравнивают их в лексикографическом порядке. Если задана директива use locale, то сравнение срок производится с учетом национальной настройки.

Таблица 6.1. Операции сравнения
Сравнение чисел | Сравнение строк | Название | Описание
a < b | a lt b | Меньше | 1, если левый операнд меньше, чем правый операнд.
a > b | a gt b | Больше | 1, если левый операнд больше, чем правый операнд.
a <= b | a le b | Не больше | 1, если левый операнд меньше или равен правому операнду.
a => b | a ge b | Не меньше | 1, если левый операнд больше или равен правому операнду.
a == b | a eq b | Равно | 1, если левый операнд равен правому операнду.
a != b | a ne b | Не равно | 1, если левый операнд не равен правому операнду.
a <=> b | a cmp b | Сравнение | -1, если левый операнд меньше, чем правый; 0, если они равны; 1, если левый операнд больше, чем правый.

Следующий пример

$a = 299;
$b = 30;
if ($a < $b) {
  print "Число $a меньше числа $b\n";
}
if ($a lt $b) {
  print "Строка $a меньше строки $b\n";
}

выведет сообщение: Строка 299 меньше строки 30.

6.3.2. Логические операции

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

Таблица 6.2. Логические операции
Операция |  | Название | Описание
a && b | a and b | Логическое AND | Если первый операнд ложен, то 0, иначе значение второго операнда.
a || b | a or b | Логическое OR | Если первый операнд истинен, то его значение, иначе значение второго операнда.
 | a xor b | Логическое XOR | 1, если истинен ровно один операнд, иначе 0.
!a | not a | Логическое NOT | Унарная операция. 1, если операнд ложен, иначе 0.

Операции and, or, xor и not имеют самый низкий приоритет среди всех операций PERLа. Это позволяет использовать их в правой части операторов без дополнительных круглых скобок, например:

open HANDLE, "file.dat" or die "Error: $!\n";

Использование операции || в этом примере потребует скобок:

open(HANDLE, "file.dat") || die "Error: $!\n";

6.3.3. Битовые операции

Битовые операции применяются к операндам, представленным как двоичные числа (т. е. как цепочки битов), и возвращают значение, означающее результат операции.

Таблица 6.3. Битовые операции
Операция | Название | Описание
a & b | Побитовое AND | Возвращает в каждой битовой позиции 1, если соответствующие позиции обоих операндов равны 1.
a | b | Побитовое OR | Возвращает в каждой битовой позиции 1, если соответствующая позиция хотя бы одного операнда равна 1.
a ^ b | Побитовое XOR | Возвращает в каждой битовой позиции 1, если соответствующая позиция ровно одного операнда равна 1.
~a | Побитовое NOT | Унарная операция. Инвертирует каждую битовую позицию операнда.
a << b | Сдвиг влево | Сдвигает двоичное представление левого операнда влево на количество бит, заданное вторым операндом.
a >> b | Cдвиг вправо | Сдвигает двоичное представление левого операнда вправо на количество бит, заданное вторым операндом.

Операции сдвига применимы только к числовым операндам, но остальные битовые операции применимы и к числам, и к строкам. Если одним из операндов битовой операции является число, то оба операнда преобразуются в целые числа. Если же оба операнда строки, то они преобразуются в строки одинаковой длины и операция выполняется над каждым битом полученных строк. Это позволяет нам применять битовые операции к операндам любой длины. При этом операции | и ^ дополняют более короткую строку справа нулевыми битами, а операция & обрезает более длинную строку до размера более короткой. Мы можем явно указать тип операции, используя кавычки для строк или 0+ для чисел. Примеры:

print 1.9 | 2;       # 3 (плавающий операнд урезан до целого)
print 150 | '105';   # 255 (0x96 | 0x69 равно 0xFF)
print '150' | '105'; # '155' (в ASCII)
$a = 150; $b = '105';
print 0+$a | 0+$b;   # числовые операнды
print "$a" | "$b";   # строковые операнды

На выполнение битовых операций влияют директивы управления арифметикой. По умолчанию, целые числа считаются беззнаковыми, поэтому операция правого сдвига заполняет старшие биты результата нулями, а операция ~0 возвращает наибольшее положительное целое число. Директива use integer приводит к тому, что целые числа начинают интерпретироваться как числа со знаком. Поэтому в зоне ее действия операция правого сдвига заполняет старшие биты результата знаковым битом числа, а операция ~0 возвращает число -1.

6.3.4. Унарные операции

6.3.4.1. Унарный плюс

Унарный плюс (+) возвращает свой операнд. Единственное осмысленное применение этой операции состоит в том, чтобы отделять имя функции от ее аргументов в скобках. Рассмотрим такой пример:

print (10 + 20) / 10;

Вопреки ожиданиям, этот оператор печатает не число 3, а число 30. Дело в том, что круглые скобки вокруг аргументов функции имеют в PERLе наивысший приоритет, т. е. операция print (10 + 20) выполняется раньше, чем деление на 10. Желаемый результат достигается использованием унарного плюса перед скобками, который понижает их приоритет:

print +(10 + 20) / 10;

6.3.4.2. Унарный минус

Унарный минус (-) изменяет знак числового операнда на противоположный. Если же операнд является строкой, то возвращается следующий результат:

  • если строка начинается с символа "+" или "-", то в результате этот символ заменяется на противоположный;
  • в остальных случаях возвращается конкатенация символа "-" и исходной строки.

В частности, конструкции -слово и "-слово" эквивалентны.

6.3.4.3. Создание ссылки

Операция \ возвращает ссылку на операнд. Подробно она рассмотрена в п. 6.2.8.

6.3.4.4. Инкремент и декремент

Операции ++ и -- называются соответственно операциями инкремента и декремента. Инкремент увеличивает значение числовой переменной на 1. Если она используется как префикс (++a), то возвращает значение операнда после увеличения его на 1. Если же она используется как постфикс (a++), то возвращает значение операнда перед увеличением его на 1. Если операнд инкремента является строковой переменной, соответствующей образцу /^[a-zA-Z]*[0-9]*$/, то выполняется посимвольный инкремент строки с переносом. Примеры:

print ++($x = '99');  # '100'
print ++($x = 'a0');  # 'a1'
print ++($x = 'Az');  # 'Ba'
print ++($x = 'zz');  # 'aaa'

Декремент применяется только к числовым переменным и уменьшает значение переменной на 1. Если эта операция используется как префикс (--a), то она возвращает значение операнда после уменьшения его на 1. Если она используется как постфикс (a--), то возвращает значение операнда перед уменьшением его на 1. Примеры:

print --($x = 99);    # 98
print (($x = 99)--);  # 99
print --($x = 'a0');  # -1

6.3.4.5. Именованные унарные операции

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

6.3.5. Аддитивные операции

Существуют две аддитивные операции над числами (сложение и вычитание) и одна над строками (конкатенация).

Таблица 6.4. Аддитивные операции
Операция | Название | Описание
a + b | Сложение | Возвращает сумму двух числовых операндов.
a - b | Вычитание | Возвращает разность двух числовых операндов.
a . b | Конкатенация | Возвращает конкатенацию двух строковых операндов.

Примеры:

print '1' + '2';  # 3
print '1' . '2';  # '12'

6.3.6. Мультипликативные операции

Существуют четыре мультипликативные операции над числами (умножение, деление, остаток по модулю и возведение в степень) и одна над строками (повторение).

Таблица 6.5. Мультипликативные операции
Операция | Название | Описание
a * b | Умножение | Возвращает произведение двух числовых операндов.
a / b | Деление | Возвращает частное от деления двух числовых операндов.
a % b | Остаток по модулю | Возвращает целый остаток от деления левого операнда на правый. Плавающие числа перед операцией округляются до целых. Если b отрицательно, то и результат отрицателен.
a ** b | Возведение в степень | Возвращает a в степени b.
a x b | Повторение | Левый операнд должен быть строкой или списком, правый — числом. Возвращает операнд a, повторенный b раз.

Примеры:

print '-' x 80;             # печатает строку минусов
@ones = (1) x 5;            # @ones = (1, 1, 1, 1, 1)
@ones = (2) x @ones;        # @ones = (2, 2, 2, 2, 2)

6.3.7. Операции присваивания

Операции присваивания присваивают левому операнду результат операции, который определяется правым операндом и самой операцией. Базовая операция присваивания имеет вид a = b, что означает: присвоить переменной a значение операнда b. Все остальные операции присваивания являются сокращениями других операций, совмещенных с присваиванием, как показано в следующей таблице.

Таблица 6.6. Операции присваивания
Операция | Значение
a += b | a = a + b
a -= b | a = a - b
a .= b | a = a . b
a *= b | a = a * b
a /= b | a = a / b
a %= b | a = a % b
a x= b | a = a x b
a **= b | a = a ** b
a <<= b | a = a << b
a >>= b | a = a >> b
a &= b | a = a & b
a |= b | a = a | b
a ^= b | a = a ^ b
a &&= b | a = a && b
a ||= b | a = a || b

Операция присваивания возвращает свой левый операнд и потому может использоваться в левой части следующей операции присваивания. Например

($a += 2) *= 3;

эквивалентно

$a += 2;
$a *= 3;

Присваивание списка списку возвращает список переменных, которым присвоены значения. Присваивание списка скаляру возвращает количество элементов в этом списке.

6.3.8. q-операции

В большинстве языков программирования кавычки служат для образования строковых констант. Однако, в PERLе они являются операциями, обеспечивающими интерполяцию строк и сопоставление с образцом. Такие операции мы будем называть q-операциями (от английского слова quote, т. е. кавычка). PERL содержит два набора q-операций, перечисленных в следующей таблице.

Таблица 6.7. q-операции
Кавычки | q-операция | Значение | Интерполяция
'' | q() | Константа | Нет
"" | qq() | Константа | Да
`` | qx() | Команда | Да (если ограничители не '')
 | qw() | Список слов | Нет
 | qr() | Регулярное выражение | Да (если ограничители не '')
// | m() | Сопоставление с образцом | Да (если ограничители не '')
 | s()() | Подстановка | Да (если ограничители не '')
 | tr()() | Транслитерация | Только escape-последовательностей

Здесь вместо скобок () можно использовать любой символ, не являющийся буквой, цифрой или пробелом, либо парные ограничители: (), [], {}, <>. Примеры использования q-конструкций для создания строковых констант были приведены в п. 6.2.3.2; об их использовании в регулярных выражениях см. п. 6.4.6.

6.3.9. Прочие операции

6.3.9.1. Разадресация

Операция разадресации имеет вид:

a -> b

Она обеспечивает доступ к содержимому ссылок и подробно рассмотрена в п. 6.2.8.

6.3.9.2. Операции связывания

Большинство операций над регулярными выражениями работают со специальной переменной $_. Для сопоставления с образцом произвольных строк используются операции связывания, которые имеют вид:

a =~ b
a !~ b

где a — любое строковое выражение, а b — образец для сопоставления, подстановки или транслитерации. Операция =~ возвращает истину, если сопоставление, подстановка или транслитерация прошли успешно, и ложь в противном случае. Операция !~ возвращает логическое отрицание результата =~. Примеры использования этих операций см. в п. 6.4.6.

6.3.9.3. Задание диапазона

Операция задания диапазона имеет вид:

a .. b

На самом деле это две разные операции в зависимости от контекста. В контексте списка эта операция возвращает список значений (a a+1 … b). Для строк диапазон формируется с использованием инкремента, например:

foreach (1..10) {
  # выполняет цикл 10 раз
}
@a = @a[$#a-4 .. $#a];   # вырезает последние пять элементов
@a = ('abc'..'abe');     # @a = ('abc', 'abd', 'abe')

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

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

a ... b

В остальном операции .. и ... идентичны. Правый операнд не оценивается, пока операция находится в состоянии "ложь", а левый операнд не оценивается, пока операция находится в состоянии "истина". Значение, возвращаемое данной операцией, это пустая строка в ложном состоянии, и последовательные целые числа, начиная с 1, в истинном состоянии. Последовательный номер сбрасывается для нового диапазона. К последнему номеру диапазона добавляется строка "E0". Если какой-либо из операндов является константой, то он неявно сравнивается со специальной переменной $. (содержащей номер текущей строки текущего файла). Следующий пример открывает заданный файл и печатает его строки с первой по пятую.

open HANDLE, "filename.ext";
while (<HANDLE>) {
  print if (1..5);
}

6.3.9.4. Условная операция

Условная операция — это тернарная операция, которая имеет вид:

test ? value1 : value2

где test, value1 и value2 — любые выражения. Если test истинно, то операция возвращает значение value1, в противном случае она возвращает значение value2. Пример:

printf "У меня %d дру%s.\n", $n,
  ($n == 1) ? 'г' : (($n < 5) ? 'га' : 'зей');

Эта операция может использоваться в левой части операции присваивания, если и value1, и value2 являются переменными, например:

($test ? $a : $b) = $c;

6.3.9.5. Операция запятая

Операция запятая вызывает последовательное вычисление значений двух выражений и возвращает второе из них. Она имеет вид:

expr1, expr2

где expr1 и expr2 — любые выражения. В списках запятая служит разделителем элементов списка.

PERL содержит синоним этой операции вида

expr1 => expr2

Такая форма обычно используется для парных элементов списка, например, при инициализации ассоциативных массивов. Кроме того, если левый операнд операции => является словом, то он интерпретируется как строка (см. п. 6.2.7)

6.3.10. Порядок выполнения операций

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

Таблица 6.8. Приоритеты операций
Операция | Ассоциативность
термы и списки | левая
-> | левая
++ -- | нет
** | правая
! ~ \ + (унарный) - (унарный) | правая
=~ !~ | левая
* / % x | левая
+ - . | левая
<< >> | левая
именованные унарные операции | нет
< > <= >= lt gt le ge | нет
== != <=> eq ne cmp | нет
& | левая
| ^ | левая
&& | левая
|| | левая
.. ... | нет
?: | правая
= op= | правая
, => | левая
not | правая
and | левая
or xor | левая


WDH: PERL - Регулярные выражения

Глава 6.4. Регулярные выражения

6.4.1. Синтаксис регулярных выражений

Регулярные выражения представляют собой образцы для поиска заданных комбинаций символов в текстовых строках и замены их на другие комбинации символов (эти операции называются соответственно сопоставление с образцом и подстановка). Регулярное выражение в языке PERL имеет вид

/pattern/modifiers

Здесь pattern — это строка, задающая регулярное выражение, а modifiers — необязательные однобуквенные модификаторы, уточняющие правила использования этого регулярного выражения.

Регулярное выражение может состоять из обычных символов; в этом случае оно будет соответствовать заданной комбинации символов в строке. Например, выражение /кат/ соответствует выделенным подстрокам в следующих строках: "каток", "закат", "укатить". Однако, подлинную силу регулярным выражениям PERLа придает возможность использования в них специальных метасимволов.

Таблица 6.9. Метасимволы в регулярных выражениях
Символ | Описание
\ | Для символов, которые обычно трактуются буквально, означает, что следующий символ является метасимволом. Например, /n/ соответствует букве n, а /\n/ соответствует символу перевода строки. Для метасимволов означает, что символ должен пониматься буквально. Например, /^/ означает начало строки, а /\^/ соответствует просто символу ^. /\\/ соответствует обратной косой черте \.
^ | Соответствует началу строки (ср. модификатор m).
$ | Соответствует концу строки (ср. модификатор m).
. | Соответствует любому символу, кроме разрыва строки (ср. модификатор s).
* | Соответствует повторению предыдущего символа нуль или более раз.
+ | Соответствует повторению предыдущего символа один или более раз.
? | Соответствует повторению предыдущего символа нуль или один раз.
(pattern) | Соответствует строке pattern и запоминает найденное соответствие.
x|y | Соответствует x или y.
{n} | n — неотрицательное число. Соответствует ровно n вхождениям предыдущего символа.
{n,} | n — неотрицательное число. Соответствует n или более вхождениям предыдущего символа. /x{1,}/ эквивалентно /x+/. /x{0,}/ эквивалентно /x*/.
{n,m} | n и m — неотрицательные числа. Соответствует не менее чем n и не более чем m вхождениям предыдущего символа. /x{0,1}/ эквивалентно /x?/.
[xyz] | Соответствует любому символу из заключенных в квадратные скобки.
[^xyz] | Соответствует любому символу, кроме заключенных в квадратные скобки.
[a-z] | Соответствует любому символу в указанном диапазоне.
[^a-z] | Соответствует любому символу, кроме лежащих в указанном диапазоне.
\a | Соответствует символу звонок (BEL).
\A | Соответствует только началу строки, даже с модификатором m.
\b | Соответствует границе слова, т. е. позиции между \w и \W в любом порядке.
\B | Соответствует любой позиции, кроме границы слова.
\с X | Соответствует символу Ctrl+X. Например, /\cI/ эквивалентно /\t/.
\C | Соответствует одному байту, даже при директиве use utf8.
\d | Соответствует цифре. Эквивалентно [0-9].
\D | Соответствует нецифровому символу. Эквивалентно [^0-9].
\e | Соответствует символу escape (ESC).
\E | Конец преобразований \L, \Q, \U.
\f | Соответствует символу перевода формата (FF).
\G | Соответствует позиции в строке, равной pos().
\l | Преобразует следующий символ в нижний регистр.
\L | Преобразует символы в нижний регистр до \E.
\n | Соответствует разрыву строк.
\p property | Соответствует символам Unicode, обладающим свойством property. Если property задается несколькими символами, используйте синтаксис \p{property}.
\P property | Соответствует символам Unicode, не обладающим свойством property. Если property задается несколькими символами, используйте синтаксис \P{property}.
\Q | Добавляет символ "\" перед метасимволами до \E.
\r | Соответствует символу возврата каретки (CR).
\s | Соответствует символу пробела. Эквивалентно /[ \f\n\r\t]/.
\S | Соответствует любому непробельному символу. Эквивалентно /[^ \f\n\r\t]/.
\t | Соответствует символу табуляции (HT).
\u | Преобразует следующий символ в верхний регистр.
\U | Преобразует символы в верхний регистр до \E.
\w | Соответствует латинской букве, цифре или подчеркиванию. Эквивалентно /[A-Za-z0-9_] /.
\W | Соответствует любому символу, кроме латинской буквы, цифры или подчеркивания. Эквивалентно /[^A-Za-z0-9_] /.
\X | Соответствует последовательности символов Unicode из основного символа и набора диакритических значков. Эквивалентно выражению /C<(?:\PM\pM*)>/.
\z | Соответствует только концу строки, даже с модификатором m.
\Z | Соответствует только концу строки или разрыву строк в конце строки, даже с модификатором m.
\n | n — положительное число. Соответствует n-ной запомненной подстроке. Если левых скобок до этого символа меньше, чем n, и n > 9, то эквивалентно \0n.
\0 n | n — восьмеричное число, не большее 377. Соответствует символу с восьмеричным кодом n. Например, /\011/ эквивалентно /\t/.
\x n | n — шестнадцатеричное число, состоящее из двух цифр. Соответствует символу с шестнадцатеричным кодом n. Например, /\x31/ эквивалентно /1/.
\x{n} | n — шестнадцатеричное число, состоящее из четырех цифр. Соответствует символу Unicode с шестнадцатеричным кодом n. Например, /\x{2663}/ эквивалентно /♣/.

6.4.2. Модификаторы

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

i
Игнорирует регистр символов при сопоставлении с образцом. При использовании директивы use locale приведение символов к одному регистру производится с учетом национальной настройки.
m
Рассматривает исходную строку как буфер из нескольких строк текста, разделенных разрывами строк. Это означает, что метасимволы ^ и $ соответствуют не только началу и концу всей строки, но и началу и концу строки текста, ограниченной разрывами строк.
s
Рассматривает исходную строку как единую строку текста, игнорируя разрывы строк. Это означает, что метасимвол . соответствует любому символу, включая разрыв строки.
x
Разрешает использование пробелов и комментариев. Пробелы, не имеющие предшествующего символа \ и не заключенные в [], игнорируются. Символ # начинает комментарий, который также игнорируется.

6.4.3. Классы символов Unicode и POSIX

Мы можем использовать в регулярных выражениях синтаксис

[:class:]

где class задает название класса символов POSIX, т. е. мобильного стандарта на язык C. При использовании директивы use utf8 вместо классов POSIX можно использовать классы символов Unicode в конструкции

\p{class}

В следующей таблице сведены все классы символов POSIX, соответствующие классы символов Unicode и метасимволы, если они есть.

Таблица 6.10. Классы символов
POSIX | Unicode | Метасимвол | Описание
alpha | IsAlpha |  | Буквы
alnum | IsAlnum |  | Буквы и цифры
ascii | IsAscii |  | Символы ASCII
cntrl | IsCntrl |  | Управляющие символы
digit | IsDigit | \d | Цифры
graph | IsGraph |  | Буквы, цифры и знаки пунктуации
lower | IsLower |  | Строчные буквы
print | IsPrint |  | Буквы, цифры, знаки пунктуации и пробел
punct | IsPunct |  | Знаки пунктуации
space | IsSpace | \s | Символы пробела
upper | IsUpper |  | Прописные буквы
word | IsWord | \w | Буквы, цифры и подчеркивание
xdigit | IsXDigit |  | Шестнадцатеричные цифры

Например, десятичное число можно задать любым из следующих трех способов:

/\d+/
/[:digit:]+/
/\p{IsDigit}+/  # use utf8

Для указания того, что символ не принадлежит к заданному классу, используются конструкции

[:^class:]
\P{class}

Например, следующие выражения имеют одинаковый смысл:

[:^digit:]  \D  \P{IsDigit}
[:^space:]  \S  \P{IsSpace}
[:^word:]   \W  \P{IsWord}

6.4.4. Запоминание подстрок

Использование круглых скобок в регулярном выражении приводит к тому, что подстрока, соответствующая образцу в скобках, запоминается в специальном буфере. Для доступа к n-ной запомненной подстроке внутри регулярного выражения используется конструкция \n, а вне него — $n, где n может принимать любые значения, начиная с 1. Однако, следует помнить, что PERL использует выражения \10, \11 и т. д. как синонимы для восьмеричных кодов символов \010, \011 и т. д. Неоднозначность здесь разрешается так. Символ \10 считается обращением к 10-й запомненной подстроке, если перед ним в регулярном выражении стоит не менее десяти левых круглых скобок; в противном случае, это символ с восьмеричным кодом 10. Метасимволы \1, … \9 всегда считаются обращениями к запомненным подстрокам. Примеры:

if (/(.)\1/) { # ищем первый повторяющийся символ
  print "'$1' - первый повторяющийся символ\n";
}

if (/Time: (..):(..):(..)/) { # извлекаем компоненты времени
  $hours = $1;
  $minutes = $2;
  $seconds = $3;
}

Помимо переменных $1, $2, … есть еще несколько специальных переменных, в которых сохраняются результаты последней операции с регулярным выражением, а именно:

Переменная | Описание
$& | Последняя найденная подстрока.
$` | Подстрока перед последней найденной подстрокой.
$' | Подстрока после последней найденной подстроки.
$+ | Последняя запомненная подстрока.

Приведем пример:

'AAA111BBB222'=~/(\d+)/;
print "$`\n";   # AAA
print "$&\n";   # 111
print "$'\n";   # BBB222
print "$+\n";   # 111

Все эти специальные переменные сохраняют свои значения до конца объемлющего блока или до следующего успешного сопоставления с образцом.

6.4.5. Расширенные образцы

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

(?#text)
Комментарий. Вся конструкция игнорируется.
(?modifiers-modifiers)
Включает или выключает заданные модификаторы. Модификаторы, стоящие до символа -, включаются, стоящие после него — выключаются. Пример:
if (/aaa/) { … }        # сопоставление с учетом регистра
if (/(?i)aaa/) { … }    # сопоставление без учета регистра
(?:pattern)
(?modifiers-modifiers:pattern)
Позволяет группировать подвыражения регулярного выражения без запоминания найденного соответствия. Вторая форма дополнительно включает или выключает заданные модификаторы. Например, выражение /ко(?:т|шка)/ — это краткая запись выражения /кот|кошка/.
(?=pattern)
Соответствие с заглядыванием вперед без запоминания найденного соответствия. Например, выражение /Windows (?=95|98|NT|2000)/ соответствует "Windows" в строке "Windows 98", но не соответствует в строке "Windows 3.1". После сопоставления поиск продолжается с позиции, следующей за найденным соответствием, без учета заглядывания вперед.
(?!pattern)
Несоответствие с заглядыванием вперед без запоминания найденного соответствия. Например, выражение /Windows (?!95|98|NT|2000)/ соответствует "Windows" в строке "Windows 3.1", но не соответствует в строке "Windows 98". После сопоставления поиск продолжается с позиции, следующей за найденным соответствием, без учета заглядывания вперед.
(?<=pattern)
Соответствие с заглядыванием назад без запоминания найденного соответствия. Например, выражение /(?<=\t)\w+/ соответствует слову, следующему за символом табуляции, и символ табуляции не включается в $&. Фрагмент, соответствующий заглядыванию назад, должен иметь фиксированную ширину.
(?<!pattern)
Несоответствие с заглядыванием назад без запоминания найденного соответствия. Например, выражение /(?<!\t)\w+/ соответствует слову, перед которым нет символа табуляции. Фрагмент, соответствующий заглядыванию назад, должен иметь фиксированную ширину.

6.4.6. Операции с регулярными выражениями

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

6.4.6.1. Сопоставление с образцом

Синтаксис: /pattern/modifiers
           m/pattern/modifiers

Эта операция сопоставляет заданную строку с образцом pattern и возвращает истину или ложь в зависимости от результата сопоставления. Сопоставляемая строка задается левым операндом операции =~ или !~, например:

$mynumber = '12345';
if ($mynumber =~ /^\d+$/) { # если строка $mynumber состоит из десятичных цифр, то…
  ...
}

Если строка не задана, то производится сопоставление с содержимым специальной переменной $_. В частности, предыдущий пример можно переписать так:

$_ = '12345';
if (/^\d+$/) {
  ...
}

Помимо стандартных, здесь могут употребляться следующие модификаторы:

Модификатор | Описание
c | Не сбрасывать позицию поиска при неудачном сопоставлении (только с модификатором g).
g | Глобальное сопоставление, т. е. поиск всех вхождений образца.
o | Компилировать регулярное выражение только один раз.

Если регулярное выражение заключено в //, то начальное m необязательно. Конструкция с начальным m позволяет использовать в качестве ограничителей регулярного выражения любые символы, допустимые в q-операциях. Полезные частные случаи:

  • Если ограничителями являются символы '', то интерполяция строки pattern не производится. В остальных случаях происходит интерполяция образца и если он содержит переменные, то при каждом сопоставлении производится его компиляция. Чтобы избежать этого, используйте модификатор o (разумеется, если вы уверены, что значения переменных, входящих в образец, остаются неизменными).
  • Если ограничителями являются символы ??, то применяется правило единственного сопоставления.

Если pattern является пустой строкой, то вместо него используется последнее успешно сопоставленное регулярное выражение.

Если не задан модификатор g и результат сопоставления присваивается списку, то при неудачном сопоставлении возвращается пустой список. Результат удачного сопоставления зависит от наличия круглых скобок в образце. Если их нет, то возвращается список (1). В противном случае возвращается список, состоящий из значений переменных $1, $2 и т. д., т. е. список всех запомненных подстрок. Следующий пример

($w1, $w2, $rest) = ($x =~ /^(\S+)\s+(\S+)\s*(.*)/);

заносит в переменную $w1 первое слово строки $x, в переменную $w2 ее второе слово, а в переменную $rest — остаток этой строки.

Модификатор g включает режим глобального сопоставления с образцом, т. е. поиска всех соответствий в строке. Его поведение зависит от контекста. Если результат сопоставления присваивается списку, то возвращается список всех запомненных подстрок. Если же образец не содержит круглых скобок, то возвращается список всех соответствий образцу, как если бы он был целиком заключен в круглые скобки. Следующий пример

$_ = "12:23:45";
@result = /\d+/g;
foreach $elem (@result) {
  print "$elem\n";
}

выведет на экран строки 12, 23 и 45.

В скалярном контексте сопоставление с модификатором g каждый раз ищет следующее соответствие образцу и возвращает истину или ложь в зависимости от результата поиска. Позиция в строке после последнего сопоставления может быть считана или изменена функцией pos(). Неудачный поиск обычно сбрасывает позицию поиска в нуль, но мы можем избежать этого, добавив модификатор c. Изменение строки также приводит к сбросу позиции поиска в ней.

Дополнительные возможности предоставляет метасимвол \G, который имеет смысл только в сочетании с модификатором g. Этот метасимвол соответствует текущей позиции поиска в строке. Использование конструкции m/\G…/gc удобно, в частности, для написания лексических анализаторов, выполняющих различные действия для встреченных в анализируемом тексте лексем. Следующий пример

$_ = 'Word1, word2, and 12345.';
LOOP:
  {
    print("number "),  redo LOOP if /\G\d+\b[,.;]?\s*/gc;
    print("word "),    redo LOOP if /\G[A-Za-z0-9]+\b[,.;]?\s*/gc;
    print("unknown "), redo LOOP if /\G[^A-Za-z0-9]+/gc;
  }

выведет на экран строку word word word number.

6.4.6.2. Единственное сопоставление с образцом

Синтаксис: ?pattern?
           m?pattern?

Эта конструкция полностью аналогична конструкции m/pattern/ с единственным отличием: успешное сопоставление с образцом выполняется только один раз между вызовами функции reset(). Это удобно, например, когда нам нужно найти только первое вхождение образца в каждом файле из просматриваемого набора, например:

while (<>) {
  if (?^$?) {
    ...         # обработать первую пустую строку файла
  }
} continue {
  reset if eof; # сбросить статус ?? для следующего файла
}

6.4.6.3. Создание регулярного выражения

Синтаксис: qr/string/modifiers

Эта конструкция создает регулярное выражение с текстом string и модификаторами modifiers и компилирует его. Если ограничителями являются символы '', то интерполяция строки string не производится. В остальных случаях происходит интерполяция образца и если он содержит переменные, то при каждом сопоставлении производится его компиляция. Чтобы избежать этого, используйте модификатор o (разумеется, если вы уверены, что значения переменных, входящих в образец, остаются неизменными).

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

$re = qr/\d+/;
$string =~ /\s*${re}\s*/; # включение в другое регулярное выражение
$string =~ $re;           # самостоятельное использование
$string =~ /$re/;         # то же самое

$re = qr/$header/is;
s/$re/text/;              # то же, что s/$header/text/is

6.4.6.4. Подстановка

Синтаксис: s/pattern/string/modifiers

Эта операция сопоставляет заданную строку с образцом pattern и заменяет найденные фрагменты на строку string. Она возвращает количество произведенных замен или ложь (точнее, пустую строку), если сопоставление закончилось неудачей. Сопоставляемая строка задается левым операндом операции =~ или !~. Она должна быть скалярной переменной, элементом массива или элементом ассоциативного массива, например:

$path = '/usr/bin/perl';
$path =~ s|/usr/bin|/usr/local/bin|;

Если строка не задана, то операция подстановки производится над специальной переменной $_. В частности, предыдущий пример можно переписать так:

$_ = '/usr/bin/perl';
s|/usr/bin|/usr/local/bin|;

Помимо стандартных, здесь могут употребляться следующие модификаторы:

Модификатор | Описание
e | Обрабатывать string как выражение PERLа.
g | Глобальная подстановка, т. е. замена всех вхождений образца.
o | Компилировать регулярное выражение только один раз.

Мы можем использовать вместо // любой символ, допустимый в q-операциях. Если pattern заключен в парные скобки, то string должен иметь собственную пару ограничителей, например s(foo)[bar] или s<foo>/bar/.

Если ограничителями являются символы '', то интерполяция строки pattern не производится. В остальных случаях происходит интерполяция образца и если он содержит переменные, то при каждом сопоставлении производится его компиляция. Чтобы избежать этого, используйте модификатор o (разумеется, если вы уверены, что значения переменных, входящих в образец, остаются неизменными).

Если pattern является пустой строкой, то вместо него используется последнее успешно сопоставленное регулярное выражение.

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

Модификатор e указывает, что string является выражением. В этом случае к string сначала применяется функция eval(), а затем производится подстановка. Пример:

$_ = '123';
s/\d+/$&*2/e;  # $_ = '246'
s/\d/$&*2/eg;  # то же самое

Приведем еще несколько типичных примеров использования операции подстановки. Удаление комментариев вида /*…*/ из текста Java- или C-программы:

$program =~ s {
  /\*     # Начало комментария
  .*?     # Минимальное количество символов
  \*/     # Конец комментария
}[]gsx;

Удаление начальных и конечных пробелов в строке $var:

for ($var) {
  s/^\s+//;
  s/\s+$//;
}

Перестановка двух первых полей в $_. Обратите внимание, что в строке замены используются переменные $1 и $2, а не метасимволы \1 и \2:

s/([^ ]*) *([^ ]*)/$2 $1/;

Замена табуляций на пробелы с выравниванием по колонкам, кратным восьми:

1 while s/\t+/' ' x (length($&)*8 - length($`)%8)/e;

6.4.6.5. Транслитерация

Синтаксис: tr/list1/list2/modifiers
           y/list1/list2/modifiers

Транслитерация состоит в замене всех символов из списка list1 соответствующими символами из списка list2. Она возвращает количество замененных или удаленных символов. Списки должны состоять из отдельных символов и/или диапазонов вида a-z. Преобразуемая строка задается левым операндом операции =~ или !~. Она должна быть скалярной переменной, элементом массива или элементом ассоциативного массива, например:

$test = 'ABCDEabcde';
$test =~ tr/A-Z/a-z/; # замена строчных букв на прописные

Если строка не задана, то операция подстановки производится над специальной переменной $_. В частности, предыдущий пример можно переписать так:

$_ = 'ABCDEabcde';
tr/A-Z/a-z/;

Мы можем использовать вместо // любой символ, допустимый в q-операциях. Если list1 заключен в парные скобки, то list2 должен иметь собственную пару ограничителей, например tr(A-Z)[a-z] или tr<A-Z>/a-z/.

Обычно эта операция называется tr. Синоним y введен для фанатиков редактора sed и используется только ими. Транслитерация поддерживает следующие модификаторы:

Модификатор | Описание
c | Заменять символы, не входящие в list1.
d | Удалять символы, для которых нет замены.
s | Удалять повторяющиеся символы при замене.
U | Преобразовывать в/из кодировку UTF-8.
C | Преобразовывать в/из однобайтовую кодировку.

Модификатор c вызывает транслитерацию всех символов, не входящих в список list1. Например, операция tr/a-zA-Z/ /c заменит все символы, не являющиеся латинскими буквами, на пробелы.

По умолчанию, если list2 короче, чем list1, он дополняется последним своим символом, а если он пуст, то принимается равным list1 (это удобно для подсчета количества символов определенного класса в строке). Модификатор d изменяет эти правила: все символы из list1, которым нет соответствия в list2, удаляются из строки. Например, операция tr/a-zA-Z//cd удалит из строки все символы, не являющиеся латинскими буквами.

Модификатор s удаляет повторы: если несколько символов подряд заменились на один и тот же символ, то будет оставлено только один экземпляр этого символа. Например, операция tr/ / /s удаляет в строке повторяющиеся пробелы.

Модификаторы C и U предназначены для перекодировки символов из системной кодировки в UTF-8 и обратно. Первый из них указывает на исходную кодировку, а второй — на кодировку результата. Например, tr/\0-\xFF//CU перекодирует строку из системной кодировки в UTF-8, а tr/\0-\xFF//UC выполнит обратную перекодировку.

Транслитерация производится без интерполяции списков символов, поэтому для использования в ней переменных необходимо вызвать функцию eval(), например:

eval "tr/$oldlist/$newlist/";


WDH: PERL - Операторы

Глава 6.5. Операторы

6.5.1. Простые операторы

Простой оператор в PERLе — это выражение, которое может иметь единственный модификатор. Каждый простой оператор должен закачиваться точкой с запятой, если только он не является последним оператором в блоке; в этом случае точка с запятой может быть опущена. Существует пять модификаторов простых операторов:

Таблица 6.11. Модификаторы простых операторов
Синтаксис | Описание
if expr | Оператор выполняется, если выражение expr истинно.
unless expr | Оператор выполняется, если выражение expr ложно.
while expr | Оператор выполняется, пока выражение expr истинно.
until expr | Оператор выполняется, пока выражение expr ложно.
foreach expr | Оператор выполняется для каждого элемента списка expr, который перед этим присваивается переменной $_.

Примеры:

$count = 5;
print "$count\n" if $count;
print "$count\n" while $count--;

@people = qw/Анна Борис Виктор/;
print "$_\n" foreach @people;

Мы можем применять модификаторы не только к простым операторам, но и к блокам. Для этого перед блоком нужно поставить ключевое слово do:

do {
  $line = <STDIN>;
  ...
} until $line eq ".\n";

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

Конструкция do БЛОК (без модификатора) также используется в PERLе: она позволяет превратить блок в выражение и возвращает значение последнего оператора в этом блоке.

6.5.2. Составные операторы

Составные операторы состоят из блоков, заключенных в фигурные скобки. Напомним, что, в отличие от языков C или Java, фигурные скобки в составных операторах обязательны, даже если в них заключен только один оператор. PERL содержит следующие составные операторы:

  • условные операторы if и unless;
  • операторы цикла while, until и for;
  • оператор итерации foreach;
  • операторы управления циклом last, next и redo;
  • оператор перехода goto.

6.5.2.1. Условный оператор if

Условный оператор if позволяет проверить определенное условие и, в зависимости от его истинности, выполнить ту или иную последовательность операторов. Он имеет следующие формы:

if (выражение) БЛОК1
if (выражение) БЛОК1 else БЛОК2
if (выражение1) БЛОК1 elsif (выражение2) БЛОК2 ... else БЛОКn

Первая форма оператора означает, что если выражение истинно, то выполняется БЛОК1; если оно ложно, то управление передается оператору, следующему за if.

Вторая форма оператора означает, что если выражение истинно, то выполняется БЛОК1; если оно ложно, то выполняется БЛОК2.

Третья форма оператора означает, что если выражение истинно, то выполняется БЛОК1; если оно ложно и истинно выражение2, то выполняется БЛОК2 и т. д. Если ложны выражения во всех ветках оператора, то выполняется БЛОКn.

Следующий пример присваивает переменной $m наибольшее из трех чисел $x, $y, $z:

if ($x >= $y) {
  $m = ($x >= $z) ? $x : $z;
} else {
  $m = ($y >= $z) ? $y : $z;
}

6.5.2.2. Условный оператор unless

Условный оператор unless логически противоположен оператору if. Он имеет две формы:

unless (выражение) БЛОК1
unless (выражение) БЛОК1 else БЛОК2

Первая форма оператора означает, что если выражение ложно, то выполняется БЛОК1; если оно истинно, то управление передается оператору, следующему за unless.

Вторая форма оператора означает, что если выражение ложно, то выполняется БЛОК1; если оно истинно, то выполняется БЛОК2.

Предыдущий пример можно переписать так:

unless ($x < $y) {
  $m = ($x >= $z) ? $x : $z;
} else {
  $m = ($y >= $z) ? $y : $z;
}

6.5.2.3. Оператор цикла while

Оператор цикла while имеет две формы:

while (выражение) БЛОК
while (выражение) БЛОК continue БЛОК1

Оператор while выполняется следующим образом:

  1. Вычисляется значение выражения. Если оно ложно, то управление передается оператору, следующему за данным оператором.
  2. Выполняется БЛОК.
  3. Если оператор содержит ключевое слово continue, то выполняется БЛОК1.
  4. Управление передается этапу 1.

Следующий пример выводит на экран числа от одного до десяти:

$i = 0;
while ($i++ < 10) { print "$i\n" }

Пользуясь второй формой оператора while, его можно записать так:

$i = 1;
while ($i <= 10) { print "$i\n" } continue { $i++ }

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

while (1) { print "Привет всем!" }

6.5.2.4. Оператор цикла until

Оператор цикла until логически противоположен оператору while и также имеет две формы:

until (выражение) БЛОК
until (выражение) БЛОК continue БЛОК1

Оператор until выполняется следующим образом:

  1. Вычисляется значение выражения. Если оно истинно, то управление передается оператору, следующему за данным оператором.
  2. Выполняется БЛОК.
  3. Если оператор содержит ключевое слово continue, то выполняется БЛОК1.
  4. Управление передается этапу 1.

Следующий пример выводит на экран числа от одного до десяти:

$i = 1;
until ($i > 10) { print "$i\n" } continue { $i++ }

6.5.2.5. Оператор цикла for

Оператор цикла for имеет вид:

for (инициализация; условие; изменение) БЛОК

Оператор for выполняется следующим образом:

  1. Выполняется оператор инициализация (обычно он инициализирует счетчик или счетчики цикла).
  2. Вычисляется значение выражения условие. Если оно ложно, то управление передается оператору, следующему за данным оператором.
  3. Выполняется БЛОК.
  4. Выполняется оператор изменение (обычно он увеличивает или уменьшает счетчик или счетчики цикла) и управление передается этапу 2.

Данный оператор обычно используется в тех случаях, когда количество повторений цикла известно заранее. Так, мы могли бы записать предыдущий пример короче:

for ($i = 1; $i <= 10; $i++) { print "$i\n" }

6.5.2.6. Оператор итерации foreach

Оператор foreach выполняет заданные действия для каждого элемента списка или массива. Он имеет две формы:

foreach переменная (список) БЛОК
foreach переменная (список) БЛОК continue БЛОК1

Оператор foreach выполняется следующим образом:

  1. Переменной присваивается очередной элемента списка. Если список исчерпан, то управление передается оператору, следующему за данным.
  2. Выполняется БЛОК.
  3. Если оператор содержит ключевое слово continue, то выполняется БЛОК1.
  4. Управление передается этапу 1.

Приведем все тот же пример с печатью чисел от 1 до 10:

foreach $i (1..10) { print "$i\n" }

Переменная является локальной для данного оператора, т. е. после завершения итерации ее предыдущее значение восстанавливается. Если перед переменной поставить ключевое слово my, то она будет лексически ограничена телом оператора. Если переменная опущена, то используется специальная переменная $_:

foreach (1..10) { print "$_\n" }

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

В действительности, операторы for и foreach являются синонимами, и вы можете использовать любое из этих слов по своему усмотрению.

6.5.2.7. Метки операторов

Перед операторами while, until, for и foreach, а также перед блоками могут ставиться метки. Помеченный оператор имеет вид:

метка: оператор

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

Хотя в современном программировании использование меток считается дурным тоном, в некоторых случаях их применение существенно упрощает логику программы. Чаще всего это происходит, когда метки используются для передачи управления из глубоко вложенного цикла к внешнему. Рассмотрим следующий пример, написанный в лучший традициях C++:

for (my $i = 0; $i < @ary1; $i++) {
  for (my $j = 0; $j < @ary2; $j++) {
    if ($ary1[$i] > $ary2[$j]) {
      last;
    }
    $ary1[$i] += $ary2[$j];
  }
}

Метки и операторы управления циклом позволяют записать этот алгоритм намного короче и, главное, намного прозрачнее:

OUTER:
for my $x (@ary1) {
  for my $y (@ary2) {
    next OUTER if $x > $y;
    $x += $y;
  }
}

6.5.2.8. Оператор last

Оператор last немедленно завершает указанный цикл. Он имеет две формы:

last метка
last

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

LINE: while (<STDIN>) {
  last LINE if /^$/; # прервать цикл, если встретилась пустая строка
  ...
}

6.5.2.9. Оператор next

Оператор next начинает новую итерацию указанного цикла. Он имеет две формы:

next метка
next

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

LINE: while (<STDIN>) {
  next LINE if /^#/; # пропускать комментарии
  ...
}

6.5.2.10. Оператор redo

Оператор redo начинает новую итерацию указанного цикла без проверки условия его выполнения. Он имеет две формы:

redo метка
redo

Первая форма оператора начинает новую итерацию цикла с заданной меткой. Вторая форма начинает новую итерацию самого внутреннего из выполняющихся в данный момент вложенных циклов. Если цикл имеет блок continue, то он не выполняется. Следующий пример удаляет комментарии из программы на языке Pascal, где они имеют вид {…} (пример упрощен, т. к. не учитывает, что символы {} могут содержаться в строковых константах):

LINE: while (<STDIN>) {
        while (s|({.*}.*){.*}|$1 |) {}
        s|{.*}| |;
        if (s|{.*| |) {
          $front = $_;
          while (<STDIN>) {
            if (/}/) {
              s|^|$front\{|;
              redo LINE;
            }
          }
        }
        print;
      }

6.5.2.11. Блок как вырожденный цикл

Блок рассматривается в PERLе как цикл, безусловно выполняющийся один раз. Это означает, что мы можем использовать конструкцию

БЛОК1 continue БЛОК2

которая обычно означает, что выполняется БЛОК1, а после него БЛОК2. Однако, трактовка блоков как циклов означает и то, что мы можем пользоваться внутри блоков операторами управления циклом, и в этом случае указанная конструкция становится очень полезной.

Одна из причин, по которым в PERL не включен оператор выбора switch, состоит в том, что очень легко моделируется с помощью блоков и операторов управления циклом, например:

SWITCH: {
  $abc = 1, last SWITCH  if /^abc/;
  $def = 1, last SWITCH  if /^def/;
  $xyz = 1, last SWITCH  if /^xyz/;
  $nothing = 1;
}

6.5.2.12. Оператор перехода goto

PERL содержит оператор перехода goto трех видов:

goto метка
goto выражение
goto &имя

Первая форма оператора передает управление оператору с указанной меткой. Управление не может быть передано внутрь конструкции, требующей инициализации, например, внутрь подпрограммы или оператора foreach.

Вторая форма — это "вычисляемый goto": он вычисляет значение выражения и передает управление на полученную в результате метку, например:

goto ("LABEL1", "LABEL2", "LABEL3")[$i];

Третья форма — это вообще не goto в обычном смысле слова. Этот оператор подставляет вызов подпрограммы имя вместо выполняющейся сейчас подпрограммы. Она используется подпрограммами AUTOLOAD(), которые хотят незаметно подменить вызов одной подпрограммы другой. Имя не обязано быть именем подпрограммы; это может быть скалярная переменная или блок, значением которых является ссылка на подпрограмму.

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


WDH: PERL - Подпрограммы

Глава 6.6. Подпрограммы

6.6.1. Общее описание

Подобно многим другим языкам программирования, PERL позволяет нам писать подпрограммы. Определение подпрограммы имеет следующий вид:

sub имя БЛОК

где имя — идентификатор, задающий имя подпрограммы, а БЛОК содержит тело подпрограммы, т. е. операторы, которые выполняются при ее вызове.

Вызов подпрограммы имеет вид:

имя(список) или имя список

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

sub имя;

Есть еще один способ указать, что мы вызываем подпрограмму — поместить перед ее именем символ &. Такая форма особенно удобна, если мы вызываем подпрограмму без параметров, например:

&test;

sub test {
  print 'OK';
}

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

Аргументы передаются подпрограммам в массиве @_. Если, например, мы вызываем функцию двух аргументов, то эти аргументы будут занесены в переменные $_[0] и $_[1]. Массив @_ является локальным для подпрограммы, но его элементы служат синонимами для соответствующих аргументов. Это означает, что изменение переменной $_[0] повлечет изменение первого фактического аргумента (или вызовет ошибку, если этот аргумент является константой). Если аргументом является массив или ассоциативный массив, который не существовал в момент вызова подпрограммы, то он будет создан только в том случае, если подпрограмма изменяет его или ссылается на него. Присваивание значения всему массиву @_ уничтожает его связь с фактическими аргументами.

Значением, которое подпрограмма возвращает, является значение последнего вычисленного в ней выражения. Для явного возврата из подпрограммы может использоваться оператор return, в котором можно указать возвращаемое значение. Если return не содержит значения, то подпрограмма возвращает пустой список в контексте списка и неопределенное значение в скалярном контексте. Если мы возвращаем один или несколько массивов или ассоциативных массивов, то они сольются в единый список.

В PERLе нет именованных формальных аргументов. На практике мы обычно присваиваем фактические аргументы локальным переменным, созданным функцией my(), например:

sub max {
  my $max = shift(@_);
  foreach $x (@_) {
    $max = $x if $max < $x;
  }
  return $max;
}

print max(1, 2, 3, 4, 5);

Первый оператор подпрограммы max извлекает из массива @_ его первый элемент и заносит его в локальную переменную $max. Оператор foreach сканирует остальные элементы @_ и присваивает переменной $max значение наибольшего из них. Затем подпрограмма возвращает $max вызвавшей ее программе.

При желании мы можем присвоить значения аргументов списку локальных переменных, например:

my($key, $value) = @_;

Функция может возвращать различные значения в зависимости от контекста, в котором она вызвана. Таких контекстов существует три: скалярный (значение функции присваивается скалярной переменной), списочный (значение функции присваивается массиву или списку) и пустой (значение функции ничему не присваивается). Узнать, в каком контексте ее вызывали, подпрограмма может с помощью встроенной функции wantarray(). Эта функция возвращает истину для списочного контекста, ложь для скалярного контекста и неопределенное значение для пустого контекста. Следующий пример преобразует переданные ему строки в верхний регистр и возвращает результат в зависимости от контекста:

sub upcase {
  return unless defined wantarray;  # пустой контекст, нечего возвращать
  my @parms = @_;
  for (@parms) { tr/a-z/A-Z/ }
  return wantarray ? @parms : $parms[0];
}

($s3, $s4) = upcase($s1, $s2);  # значения $s1 и $s2 не изменяются

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

@newlist = upcase(@list1, @list2);

Однако, не вызывайте ее так:

(@a, @b) = upcase(@list1, @list2);

потому что весь список возвращенных значений будет присвоен массиву @a, а массив @b будет пуст.

Еще несколько слов об использовании символа & перед именем вызываемой подпрограммы. В старых версиях языка он был обязателен, но в современном PERLе его можно безболезненно опускать, если подпрограмма вызывается со списком аргументов в круглых скобках. Если же мы вызываем подпрограмму без аргументов и она не была предварительно декларирована, то символ & становится обязательным. Между прочим, вызов подпрограммы без аргументов означает, что ей передается текущее состояние массива @_, т. е. операторы &mysub; и &mysub(@_); синонимичны. Еще одно применение символа & состоит в следующем: вызов вида &mysub(…) производится без проверки прототипа функции.

6.6.2. Рекурсивные подпрограммы

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

Приведем пример функции, вычисляющей факториал целого числа (факториал числа n равен 1 * 2 * … * n):

sub factorial {
  my $n = shift;
  return ($n <= 1) ? 1 : $n * factorial($n-1);
}

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

6.6.3. Локальные переменные: функция my()

Функция my() используется для создания локальных переменных. Локальные (или лексические) переменные доступны только в той области действия, где они созданы. Областью действия для них являются блок, составной оператор, подпрограмма, eval() или программный файл. Локальные переменные невидимы вне своей области действия, включая вызванные подпрограммы. Даже если подпрограмма вызывает сама себя, при каждом вызове создается новая копия локальных переменных.

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

my $var;            # декларация одной переменной
my (@xxx, %yyy);    # декларация списка переменных
my $var = "start";  # декларация переменной и ее инициализация
my @xxx = @yyy;     # декларация массива и его инициализация

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

Локальная переменная, объявленная в составном операторе, имеет своей областью действия весь оператор, включая проверяемое условие и блок continue, например:

while (my $line = <>) {
  $line = lc $line;
} continue {
  print $line;
}

Мы можем использовать функцию my() для декларации переменных на верхнем уровне программного файла, вне любых блоков. Такие переменные будут локальными для файла, в котором они находятся. Иными словами, они доступны всем подпрограммам в этом файле и невидимы за его пределами.

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

{
  my $secret_val = 0;
  sub give_me_val {
    return ++$secret_val;
  }
}
print give_me_val;  # выводит 1
print give_me_val;  # выводит 2

Здесь переменная $secret_val невидима вне содержащего ее блока. Однако, она сохраняет свое значение между вызовами функции give_me_val.

6.6.4. Локализация переменных: функция local()

Функция local() локализует указанные в ней переменные. Локализация не создает локальных переменных, а присваивает временные значения уже существующим глобальным переменным. Областью действия локализованной переменной является блок, eval() или файл, а также все подпрограммы, вызванные из них. После выхода из области действия исходное значение локализованных переменных восстанавливается.

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

local $var;            # локализация одной переменной
local (@xxx, %yyy);    # локализация списка переменных
local $var = "start";  # локализация переменной и ее инициализация
local @xxx = @yyy;     # локализация массива и его инициализация

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

Особо следует остановиться на локализации массивов и ассоциативных массивов. Оператор типа local(%hash) временно создает новую переменную %hash, полностью скрывая старую. Если же мы локализуем элемент массива или ассоциативного массива, то он локализуется по имени. Это означает, что после выхода из области действия локализации элемент с данным индексом или ключом будет восстановлен, даже если он был удален в этой области действия. Посмотрим, как это происходит, на примере:

@arr = (0..5);
{
  local($arr[5]) = 6;
  while (my $e = pop(@arr)) {
    last unless $e > 3;
  }
}
print "В массиве ", scalar(@arr), " элементов: ",
  join(', ', map{defined $_ ? $_ : 'undef'} @arr), "\n";

Этот пример выведет на экран следующую строку: В массиве 6 элементов: 0, 1, 2, undef, undef, 5. Откуда здесь взялись неопределенные значения? Причина в том, что в блоке мы удалили последние элементы массива. После завершения блока локализованная переменная $arr[5] была восстановлена, что привело к расширению массива до нужной длины вставкой неопределенных элементов.

В большинстве случаев локальные переменные предпочтительнее локализованных, т. к. функция my() работает быстрее и требует меньше стековой памяти. Однако, есть несколько ситуаций, когда применение функции local() необходимо:

  1. Локализация специальных переменных и массивов (например, $_ или @ARGV), чтобы восстановить их значение при выходе из подпрограммы.
  2. Временное изменение одного из элементов массива или ассоциативного массива.
  3. Создание локальных описателей файлов и каталогов, а также локальных функций с помощью typeglob.

6.6.5. Передача параметров по ссылке

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

sub popmany {
  my @retlist = ();
  foreach my $aref (@_) {
    push @retlist, pop @$aref;
  }
  return @retlist;
}

@tails = popmany(\@a, \@b, \@c, \@d);

Следующий пример возвращает список ключей, содержащихся во всех переданных ему ассоциативных массивах:

sub common_keys {
  my ($k, $href, %seen);
  foreach $href (@_) {
    while ($k = each %$href) {
      $seen{$k}++;
    }
  }
  return grep{$seen{$_} == @_} keys %seen;
}

@common = common_keys(\%hash1, \%hash2, \%hash3);

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

sub arrange {
  my ($ref1, $ref2) = @_;
  return (@$ref1 > @$ref2) ? ($ref1, $ref2) : ($ref2, $ref1);
}

($aref, $bref) = arrange(\@c, \@d);

С использование typeglob мы могли бы написать эту функцию так:

sub arrange {
  local (*c, *d) = @_;
  return (@c > @d) ? (\@c, \@d) : (\@d, \@c);
}

(*a, *b) = arrange(\@c, \@d);

6.6.6. Безымянные подпрограммы

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

$subref = sub БЛОК

Для вызова безымянной подпрограммы используется выражение &$subref, например:

$coderef = sub { print "Ура!\n" };
&$coderef;  # выведет "Ура!"

Основной особенностью безымянных подпрограмм является то, что они исполняются в той области действия, где созданы, а не в той, где вызваны. Такое поведение называется замыканием (closure) области действия. Приведем пример:

sub myprint {
  my $x = shift;
  return sub { my $y = shift; print "$x $y!\n"; };
}
$a = myprint("Это");
$b = myprint("А это");
&$a("вы");  # выведет "Это вы!"
&$b("я");   # выведет "А это я!"

Обратите внимание, что локальная переменная $x сохраняет значение, которое было ей передано при создании ссылки на безымянную подпрограмму. Замыкание области действия распространяется только на локальные переменные; глобальные и локализованные переменные ведут себя как обычно.

6.6.7. Прототипы

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

sub(prototype) имя БЛОК

и состоит из следующих символов, указывающих на типы параметров:

Символ | Описание
$ | Текущий аргумент — скаляр.
@ | Передает все оставшиеся аргументы как список.
% | Передает все оставшиеся аргументы как список.
& | Текущий аргумент — безымянная подпрограмма.
* | Текущий аргумент — скаляр или ссылка на typeglob.
\символ | Текущий аргумент — ссылка на переменную типа символ
; | Отделяет обязательные параметры от необязательных

Примеры прототипов и вызова подпрограмм:

sub sub0()              # sub0
sub sub1($$)            # sub1 $old, $new
sub sub2($$;$)          # sub2 123, "substr"
sub sub3(@)             # sub3 $a, $b, $c
sub sub4($@)            # sub4 ":", @arg
sub sub5(\@)            # sub5 @array
sub sub6(\%)            # sub6 %{$hashref}
sub sub7(*;$)           # sub7 HANDLE, $name
sub sub8(**)            # sub8 READHANDLE, WRITEHANDLE
sub sub9(&@)            # sub9 {/ref/} $a, $b, $c

Приведем теперь полный пример подпрограммы, использующей прототипы. Функция mygrep() выполняет те же действия, что и встроенная функция grep():

sub mygrep(&@) {
  my $code = shift;
  my @result;
  foreach (@_) {
    push(@result, $_) if &$code;
  }
  @result;
}
@x = ("aaa", "bbb", "#ccc", "ddd");
@y = mygrep(sub { return !/^#/ }, @x); # @y = ("aaa", "bbb", "ddd")

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

Мы можем запросить прототип любой подпрограммы с помощью встроенной функции prototype(). Аргументом этой функции является имя подпрограммы или ссылка на нее, результатом — строка, содержащая прототип подпрограммы или неопределенное значение, если подпрограмма не имеет прототипа. Например, для приведенной выше подпрограммы mygrep вызов prototype("mygrep") вернет строку "&@".

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

sub try(&@) {
  my($try,$catch) = @_;
  eval{&$try};
  if ($@) {
    local $_ = $@;
    &$catch;
  }
}
sub catch(&) { $_[0] }

try {
  die "phooey";
} catch {
  /phooey/ and print "unphooey\n";
};

Эта программа выводит на экран строку unphooey. Если вы поняли почему, значит полностью разобрались с подпрограммами PERLа.

6.6.8. Функции-константы

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

sub pi() { 3.1415962 }
sub PI() { 4 * atan2 1, 1 }

sub FLAG_FOO()  { 1 << 8 }
sub FLAG_BAR()  { 1 << 9 }
sub FLAG_MASK() { FLAG_FOO | FLAG_BAR }
sub OPT_BAZ()   { not (0x1B58 & FLAG_MASK) }
sub BAZ_VAL() {
  if (OPT_BAZ) {
    return 123;
  } else {
    return 456;
  }
}
sub N() { int(BAZ_VAL) / 3 }

6.6.9. Переопределение встроенных функций

PERL позволяет нам переопределять встроенные функции, хотя эта возможность используется крайне редко. Для переопределения недостаточно обычной декларации новой функции; предварительно мы должны использовать директиву use subs:

use subs 'chdir', 'chroot', 'chmod', 'chown'; # имена переопределяемых функций
sub chdir { ... }
chdir $newpath;

Для обращения к встроенной функции в такой программе ее имя придется предварять квалификатором пакета CORE::, например

CORE::chdir $newpath;

6.6.10. Атрибуты подпрограмм

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

sub(prototype) имя : атрибуты БЛОК

а полная декларация подпрограммы:

sub(prototype) имя : атрибуты;

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

Таблица 6.12. Встроенные атрибуты подпрограмм
Атрибут | Описание
lvalue | Подпрограмме можно присваивать значение. Такая подпрограмма должна возвращать результат, допускающий присваивание.
method | Подпрограмма является методом. Этот атрибут имеет смысл только в сочетании с атрибутом locked.
locked | Этот атрибут имеет смысл только в многопоточной среде исполнения. Он означает, что подпрограмма (или ее первый аргумент, если это метод) будет заблокирована на период своего исполнения так, как если бы ее первым оператором была функция lock().

Поясним понятие подпрограмм, которым можно присваивать значение. Действующие версии PERLа позволяют таким подпрограммам возвращать только скалярную переменную, например:

my $val;
sub canmod : lvalue {
  $val;
}
sub nomod {
  $val;
}

canmod() = 5;   # присваивает значение $val
nomod()  = 5;   # генерирует ошибку


WDH: PERL - Пакеты и модули

Глава 6.7. Пакеты и модули

6.7.1. Пакеты

6.7.1.1. Понятие пакета

PERL поддерживает разбиение программ на пакеты, каждый из которых имеет собственное пространство имен. Пакет (package) — это просто отдельный файл, содержащий подпрограммы, константы и переменные. Такой файл компилируется независимо от остальных пакетов и имеет собственное пространство имен. Обычно пакет имеет расширение .pl или .pm (Perl Module). Пакет должен содержать оператор

package имя

который задает название его пространства имен. Этот оператор действует до конца блока, eval или текущего файла.

Для включения пакета в программу мы используем встроенные функции require() или use(). Такой оператор называется декларацией пакета и действует до конца блока, eval или текущего файла. Чаще всего декларации пакетов размещаются в начале PERL-программ и действуют во всем файле.

Рассмотрим в качестве примера пакет Cwd, который входит в стандартный дистрибутив PERLа. Этот пакет содержит несколько функций, позволяющих нам считывать и изменять текущий каталог операционной системы. В частности, он содержит функцию cwd(), возвращающую текущий каталог, и функцию chdir(), изменяющую текущий каталог. Для того, чтобы пользоваться всеми функциями пакета Cwd, мы должны включить в свою программу директиву use Cwd, например:

use Cwd;
$curdir = cwd;
print "$curdir\n";

Эта программа выводит на экран имя текущего каталога. Директива use Cwd добавляет имена из пакета Cwd к пространству имен нашей программы, поэтому мы можем обращаться к функции cwd() так, как если бы она была описана в нашей программе. При желании мы можем импортировать из пакета только отдельные его функции, например:

use Cwd 'chdir';     # импорт chdir из пакета Cwd
chdir "/temp";       # вызов функции chdir пакета Cwd
Cwd::chdir "/temp";  # то же самое
CORE::chdir "/temp"; # вызов встроенной функции chdir

Этот пример демонстрирует применение квалификатора пакет::имя. По сути дела, такая конструкция указывает компилятору, какое пространство имен нужно использовать. PERL поддерживает два специальных имени пакетов:

  • main — пространство имен главной программы. Принято по умолчанию, т. е. $::var эквивалентно $main::var.
  • CORE — пространство имен встроенных функций. Подробнее о нем см. п. 6.6.9.

PERL допускает использование составных имен пакетов вида имя1::имя2. Такая конструкция предназначена для удобства классификации; кроме того, она указывает компилятору, где искать данный пакет. Сложные имена пакетов соответствуют дереву подкаталогов в библиотечном каталоге PERLа. Например, дистрибутив содержит пакеты File::Compare, File::Copy, File::Find и т. п. Эти имена говорят компилятору, что соответствующие пакеты хранятся в файлах File/Compare.pm, File/Copy.pm и File/Find.pm библиотечного каталога соответственно (в системе Unix; в Windows, MacOS или VMS разделитель имени каталога и файла будет другим, но сути это не меняет). Главное, что при этом нужно понимать: составное имя пакета ничего не означает помимо сказанного. PERL не поддерживает относительных или вложенных пакетов, наследования и т. п. Каждый пакет, как бы мы его не назвали, является самостоятельной единицей компиляции, не связанной с другими пакетами. В частности, пакеты с именами OUTER::INNER и INNER не имеют ничего общего.

Таблица символов пакета содержит только обычные его идентификаторы. Все специальные переменные и массивы всегда относятся к пространству имен main и не могут быть переопределены в пакетах.

6.7.1.2. Таблицы символов

Таблица символов (т. е. список имен) пакета хранится в ассоциативном массиве с именем %имя::. Так, таблица символов главной программы содержится в ассоциативном массиве %main:: или, короче, %::, а таблица символов пакета File::Copy — в ассоциативном массиве %File::Copy::.

Элемент этого ассоциативного массива $package::{name} — то же самое, что результат операции *name. Например, следующие операторы эквивалентны (но первый эффективнее, потому что проводит поиск по таблице на этапе компиляции):

local *main::x   = *main::y;
local $main::{x} = $main::{y};

Мы можем, например, распечатать все переменные главной программы следующим оператором:

print "$main::{$_}\n" foreach keys %main::;

С элементами таблицы символов связаны еще несколько специальных конструкций, позволяющих получить о них дополнительную информацию. Все эти конструкции имеют вид *name{THING}, где THING — ключевое слово, указывающее вид возвращаемой информации:

Конструкция | Значение
*name{PACKAGE} | Имя пакета, в котором определено name.
*name{NAME} | Имя элемента (т. е. name).
*name{SCALAR} | Ссылка на скалярную переменную $name.
*name{ARRAY} | Ссылка на массив @name.
*name{HASH} | Ссылка на ассоциативный массив %name.
*name{CODE} | Ссылка на подпрограмму &name.
*name{IO}, *name{FILEHANDLE} | Ссылка на указатель файла с именем name.
*name{GLOB} | Ссылка на typeglob для name.

Пример:

sub identify {
  my $glob = shift;
  print *{$glob}{PACKAGE}, '::', *{$glob}{NAME}, "\n";
}

use Cwd;
identify *STDIN;    # выводит "main::STDIN"
identify *Cwd::cwd; # выводит "Cwd::cwd"

6.7.1.3. Конструкторы и деструкторы пакетов

Пакет может содержать четыре специальных подпрограммы: BEGIN, CHECK, INIT и END. Перед именами этих подпрограмм ключевое слово sub необязательно.

Подпрограмма BEGIN играет роль конструктора пакета. Она начинает выполняться, как только будет полностью загружена и скомпилирована, даже если остаток файла еще компилируется. Мы можем разместить в пакете несколько блоков BEGIN; они будут выполняться в порядке их размещения в файле. После исполнения этой подпрограммы она немедленно становится неопределенной и больше не может быть вызвана.

Подпрограммы INIT аналогичны BEGIN, но исполняются перед запуском исполняющей системы PERLа. Они могут использоваться для инициализации пакетов.

Подпрограмма END играет роль деструктора пакета. Она выполняется сразу после завершения программы (безразлично, нормального или по фатальной ошибке), но перед завершением работы интерпретатора. Мы можем разместить в пакете несколько блоков END; они будут выполняться в порядке, обратном их размещению в файле. Блоки END не выполняются, если perl запущен с опцией -c. Внутри подпрограммы END специальная переменная $? содержит код завершения программы, значение которой здесь можно изменить.

Подпрограммы CHECK аналогичны END, но исполняются после завершения компиляции, но до начала исполнения программы. Они могут использоваться для проверки и сохранения компилированного кода программы.

6.7.1.4. Функции require, use и no

Выше мы упомянули, что для включения пакета в программу используются встроенные функции require и use. Рассмотрим эти функции подробнее. Функция require имеет вид:

require выражение

Если выражение опущено, то берется значение переменной $_. Действия этой функции определяются семантикой выражения. Есди оно является числом или константой вида 'v5.6.1', то require проверяет, что текущая версия PERLа ($^V) не ниже заданной выражением. Если это не так, то работа программы завершается с соответствующей диагностикой. Примеры:

require v5.6.0; # проверка версии PERL 5.6.0
require 5.6.0;  # то же самое
require 5.6;    # эквивалентно require v5.600.0
require 5;      # проверка версии PERL 5

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

  • Если выражение является словом, то к нему добавляется расширение .pm, а все :: в нем заменяются на символ /.
  • Если полученное имя файла уже содержится в ассоциативном массиве %INC, то функция возвращает 1.
  • В противном случае функция просматривает каталоги, заданные в массиве @INC, в поисках заданного файла. Если такого файла нет, то программа завершается с соответствующей диагностикой.
  • Если файл найден, то выполняется операция do имя_файла. Если она возвращает ложь, то программа завершается с соответствующей диагностикой, иначе функция возвращает результат операции do.

Иными словами, функция require находит заданный файл пакета и выполняет его. Пакет обязан вернуть истину, указывая, что его инициализация прошла успешно, поэтому принято заканчивать любой пакет строкой 1;, чтобы не забыть об этом требовании. Обратите внимание, что пакет загружается только один раз. Пример: оператор

require Some::Module

будет искать в каталогах массива @INC файл Some/Module.pm, поскольку аргументом функции является слово. Но операторы

$modname = 'Some::Module';
require $modname;

или

require "Some::Module";

будут искать (и, разумеется, не найдут) в каталогах массива @INC файл Some::Module, поскольку здесь аргументы функции не являются словами. В такой ситуации следует использовать конструкцию

eval "require $modname";

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

use выражение
use имя выражение список

Первая форма проверяет текущую версию PERLа так же, как и функция require, но на этапе компиляции программы.

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

BEGIN { require имя; import имя список }

Функция BEGIN обеспечивает выполнение указанных операторов на этапе компиляции; require загружает заданный модуль, а import вызывает загрузку из модуля перечисленных в списке имен. Реализация метода import определяется модулем, который мы загружаем. Вызов функции use с пустым списком

use имя ()

эквивалентен конструкции

BEGIN { require имя }

Если выражение задано, то use вызывает метод VERSION класса имя, передавая ему выражение в качестве аргумента. Обычно метод VERSION сравнивает переданный ему аргумент с переменной $имя::VERSION и аварийно завершает работу программу, если затребованная версия больше, чем его.

Противоположностью функции use является функция no, имеющая вид

no имя список

Эта функция вызывает метод unimport имя список или завершается по фатальной ошибке, если модуль не имеет этого метода.

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

6.7.1.5. Глобальные переменные: функция our

Функция our() аналогична функции my(), но создает не локальные, а глобальные переменные. Единственное ее применение состоит в том, что директива use strict vars позволяет обращаться к переменным, декларированным функцией our(), без указания имени пакета в пределах области действия этой функции. Синтаксис функции our() такой же, как у my():

our $var;
our ($var1, $var2);

6.7.2. Модули

6.7.2.1. Понятие модуля

Модуль (module) — это пакет, предназначенный для использования другими модулями или программами. Модули — новое понятие для PERLа, которое появилось в его версии 5. Существует несколько механизмов импорта подпрограмм и переменных модуля (вспомните лозунг PERLа!), но мы сосредоточим свое внимание на объектно-ориентированной реализации модулей, поскольку она предоставляет программисту наиболее гибкие возможности и соответствует современным технологическим требованиям. Правила написания модулей мы подробно рассматриваем в следующей главе. Здесь же мы приводится краткий обзор библиотеки PERLа и самого важного в ней для создания собственных модулей модуля Exporter.

6.7.2.2. Библиотечные модули

В состав дистрибутива PERLа входит обширная библиотека готовых модулей. В основном это файлы с расширением .pm, но некоторые могут иметь расширения .so (компилированные библиотечные файлы) или .al (автозагружаемые фрагменты модулей). Такие файлы создаются автоматически в процессе инсталяции модулей в систему. Старые библиотеки в формате PERL 4 могут иметь расширения .pl или .ph. Все библиотечные модули PERLа можно разбить на следующие категории:

  • Директивные модули (pragmatic modules). Это модули, которые играют роль директив, управляющих компилятором. Например, директива use integer просто загружает директивный модуль integer, а директива no integer отключает его использование. Полный список директивных модулей приведен в Таблице П23.1.
  • Стандартные модули (standard modules). Это модули, которые тщательно оттестированы и включены во все дистрибутивы PERLа, поэтому мы можем быть уверены, что их использование не вызовет проблем при переносе программ на другой компьютер (если, конечно, там установлена версия PERLа не ниже нашей). Полный список стандартных модулей приведен в Таблице П23.2.
  • Прочие модули, набор которых варьируется для разных дистрибутивов. Если прагматические и стандартные модули размещаются в каталоге lib, то эти модули традиционно размещаются в каталоге site/lib. Помните, что они не обязаны присутствовать на всех компьютерах, где установлен PERL. Если нужного модуля на вашем компьютере не оказалось, то вы всегда можете загрузить его из CPAN.

CPAN (Comprehensive Perl Archive Network) является общедоступным источником модулей PERL. Это архив материалов, связанных с языком PERL, содержащий документацию, учебники, утилиты и исходные тексты более чем тысячи модулей PERLа. Для использования модулей CPAN мы должны найти нужный нам модуль, загрузить его и инсталировать в системе. Базовыми узлами CPAN являются узлы http://cpan.perl.com/ и ftp://ftp.perl.org/pub/CPAN/; в России — узлы ftp://ftp.chg.ru/pub/lang/perl/CPAN/, ftp://cpan.rinet.ru/pub/mirror/CPAN/, ftp://ftp.aha.ru/pub/CPAN/ и ftp://ftp.sai.msu.su/pub/lang/perl/CPAN/.

6.7.2.3. Модуль Exporter

Особое место среди стандартных модулей занимает модуль Exporter, поскольку он реализует стандартный метод import, которым пользуется большинство других модулей. Напомним, что метод import неявно вызывается функцией use() при загрузке модуля в программу.

Допустим, что мы пишем текст модуля Sample. Тогда для использования модуля Exporter мы должны начать его со строк

package Sample;
require Exporter;              # загружаем модуль Exporter
@ISA = qw(Exporter);           # указываем, что неизвестные имена нужно искать в нем
                               # и определяем:
@EXPORT = qw(...);             # символы, экспортируемые по умолчанию
@EXPORT_OK = qw(...);          # символы, экспортируемые по запросу
%EXPORT_TAGS = (tag => [...]); # имена для наборов символов

Массивы @EXPORT и @EXPORT_OK содержат списки символов, которые мы экспортируем во внешние пространства имен по умолчанию и по запросу соответственно. Экспортироваться могут переменные, подпрограммы или ссылки typeglob. Их имена обязаны содержать символ-префикс типа за исключением подпрограмм, для которых префикс & необязателен. Пример:

@EXPORT_OK = qw(func %scalar @array %hash *typeglob); # func — то же, что &func

Ассоциативный массив %EXPORT_TAGS дает нам еще один механизм выборочного импорта символов. Он позволяет связать с группами символов любые символьные теги. Задавая эти теги, мы можем импортировать соответствующие группы символов. Все символы, перечисленные в группах %EXPORT_TAGS, должны присутствовать в массивах @EXPORT и/или @EXPORT_OK. Например, программы, которые обращаются к модулю Sample, должны содержать один из операторов

use Sample;                        # импортировать символы, заданные по умолчанию
use Sample qw(...);                # импортировать символы, указанные в списке
use Sample @{$EXPORT_TAGS{'tag'}}; # импортировать группу символов с тегом tag
use Sample ();                     # не импортировать ничего

Для удобства импорта введено следующее соглашение: если первое имя в списке импорта начинается с символа !, : или /, то этот список рассматривается как набор правил, управляющих списком импортируемых имен. Правила обрабатываются слева направо в соответствии со следующей таблицей:

Конструкция | Значение
name | Добавить имя name.
!name | Удалить имя name.
:DEFAULT | Добавить все имена из списка @EXPORT.
!:DEFAULT | Удалить все имена из списка @EXPORT.
:tag | Добавить все имена из списка %EXPORT_TAGS{tag}.
!:tag | Удалить все имена из списка %EXPORT_TAGS{tag}.
/pattern/ | Добавить все имена из списков @EXPORT и @EXPORT_OK, соответствующие образцу pattern.
!/pattern/ | Удалить все имена из списков @EXPORT и @EXPORT_OK, соответствующие образцу pattern.

Если список начинается с операции удаления, то считается, что ей предшествует операция :DEFAULT.

Пусть наш модуль Sample содержит следующие операторы:

@EXPORT = qw(A1 A2 A3 A4 A5);
@EXPORT_OK = qw(B1 B2 B3 B4 B5);
%EXPORT_TAGS = (T1 => [qw(A1 A2 B1 B2)], T2 => [qw(A1 A2 B3 B4)]);

Тогда программа, обращающаяся к Sample, могла бы содержать оператор

use Sample qw(:DEFAULT :T2 !B3 B5 /^.1/);

который в данном случае эквивалентен оператору

use Sample qw(A1 A2 A3 A4 A5 B4 B5 B1);

Для отладки подобных конструкций удобно добавить в свою программу оператор BEGIN { $Exporter::Verbose=1 }, который выводит на консоль информацию об обработке операций импорта.

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

Поскольку все символы, перечисленные в %EXPORT_TAGS, обязаны присутствовать в @EXPORT или @EXPORT_OK, предусмотрены две функции export_tags и export_ok_tags, позволяющие легко добавлять символы в эти массивы. Пример:

%EXPORT_TAGS = (XXX => [qw(aa bb cc)], YYY => [qw(cc dd ee)]);
Exporter::export_tags('XXX');    # добавляет aa, bb и cc в @EXPORT
Exporter::export_ok_tags('YYY'); # добавляет cc, dd и ee в @EXPORT_OK

Функция use() при проверке версии модуля вызывает метод $module_name->require_version($value). В модуле Exporter этот метод реализован и проверяет переменную модуля $VERSION. При ее использовании нужно помнить, что версия рассматривается как плавающее число и потому 1.10 меньше, чем 1.9. Поэтому рекомендуется использовать номера версий с двумя цифрами после десятичной точки вида 1.09.

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

MyPackage->export_to_level($level, $package, @what);

где $level — целое число, задающее уровень экспорта, т. е. количество модулей в стеке вызовов, на которое нужно подняться, а @what — массив экспортируемых символов, обычно @_. Параметр $package зарезервирован для будущих версий. Пусть, например, наш модуль Sample содержит строки

@EXPORT_OK = qw($b);
sub import { $Sample::b = 1; Sample->export_to_level(1, @_); }

Тогда оператор use Sample ($b) экспортирует переменную $Sample::b на один уровень вверх, т. е. в программу или модуль, вызвавшие модуль Sample.

Наконец, Exporter позволяет нам явно запретить экспорт каких-либо символов. Имена таких символов должны быть указаны в массиве @EXPORT_FAIL. При попытке импортировать эти символы Exporter вызывает оператор

@failed_symbols = $module_name->export_fail(@failed_symbols);

Если список, возвращаемый методом export_fail, пуст, то запрошенные символы экспортируются. В противном случае для каждого символа в этом списке генерируется соответствующее сообщение об ошибке. Мы можем переопределить в своем модуле метод export_fail или воспользоваться его реализацией по умолчанию, которая просто возвращает переданный ей список.


WDH: PERL - Классы и объекты

Глава 6.8. Классы и объекты

6.8.1. Классы, объекты и методы

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

Как известно, объектно-ориентированное программирование основано на двух базовых понятиях: классы и объекты. Класс — это абстракция, описывающая некие свойства (данные класса и методы работы с ними). Объект — это конкретный экземпляр класса, реализующий его свойства.

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

  1. Класс — это модуль, создающий объекты и обеспечивающий доступ к их методам.
  2. Объект — это ссылка на класс, "освященная" специальной функцией bless().
  3. Метод — это подпрограмма, первым аргументом которой является ссылка на объект или имя модуля.

Давайте рассмотрим эти правила более подробно.

6.8.2. Создание классов

Мы сказали, что класс в PERLе — это просто модуль с определенными свойствами. Поэтому начнем с создания модуля, на примере которого будем демонстрировать вводимые далее понятия. В качестве примера возьмем класс Browser, описывающий Веб-обозреватели, которым мы пользовались в п. 3.7.1 при описании JavaScript и создадим его на языке PERL. Назовем этот пакет Info::Browser и соответственно разместим его в файле Info/Browser.pm.

В модуле Info::Browser мы не будем пользоваться модулем Explorer, поскольку он не экспортирует никаких символов. Прежде всего, мы должны определить структуру данных нашего класса. Чаще всего структура классов реализуется безымянными ассоциативными массивами, в которых поля данных индексируются их названиями. Для модуля Info::Browser мы используем ассоциативный массив с тремя полями данных: строка NAME (название обозревателя), число VERSION (номер версии) и массив OPTIONS из двух логических значений (первое значение указывает, разрешен ли вызов Java-аплетов, второе — разрешены ли куки).

Далее нам нужен метод, создающий объекты данного класса. Такие методы называются конструкторами и могут носить любое имя. Однако, большинство программистов на PERLе называют их либо именем new(), либо именем класса. Наш конструктор выглядит так:

sub new {
  my $self  = {};           # ссылка на безымянный пустой ассоциативный массив
  $self->{NAME}    = undef; # инициализация его полей неопределенными значениями
  $self->{VERSION} = undef;
  $self->{OPTIONS} = [];    # ссылка на безымянный пустой массив
  bless($self);             # $self становится объектом
  return $self;
}

Здесь в комментариях нуждается только функция bless. Она имеет две формы

bless ref, class
bless ref

Эта функция сообщает содержимому ссылки ref, что оно является объектом класса class. Если class опущен, то используется текущий пакет. Функция bless возвращает ссылку ref, поэтому оператор return в нашем конструкторе не обязателен и введен только для ясности.

Тепеь мы готовы написать полный текст модуля Info::Browser. Помимо конструктора он содержит три метода name(), version() и options(), которые обеспечивают доступ к полям данных наших объектов. Эти методы следуют такому соглашению: если они вызваны без аргументов, то возвращают текущее значение поля, а если с аргументом, то заносят его в соответствующее поле данных.

package Info::Browser;
use strict;

sub new {
  my $self  = {};
  $self->{NAME}    = undef;
  $self->{VERSION} = undef;
  $self->{OPTIONS} = [];
  bless($self);
  return $self;
}
sub name {
  my $self = shift;
  if (@_) { $self->{NAME} = shift }
  return $self->{NAME};
}
sub version {
  my $self = shift;
  if (@_) { $self->{VERSION} = shift }
  return $self->{VERSION};
}
sub options {
  my $self = shift;
  if (@_) { @{ $self->{OPTIONS} } = @_ }
  return $self->{OPTIONS};
}

1;  # для функций require или use

Следующий пример показывает, как создать объект класса Info::Browser и инициализировать его поля:

use Browser;
$myBrowser = Browser->new();
$myBrowser->name("Opera");
$myBrowser->version(5);
$myBrowser->options(1, 0);
printf "%s %d : ", $myBrowser->name, $myBrowser->version;
printf "Java %s, ", $myBrowser->options->[0] ? "enabled" : "disabled";
printf "Cookies %s.\n", $myBrowser->options->[1] ? "enabled" : "disabled";

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

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

$x = Browser->new();
$y = $x->new();

Во-вторых, функция bless в нем жестко привязана к классу Info::Browser, поскольку мы вызываем ее без второго аргумента. Если мы в дальнейшем захотим создавать классы, являющиеся потомками Info::Browser, то должны вызывать bless с двумя аргументами, помня, что любому методу класса этот класс передается в качестве первого аргумента. С учетом этих замечаний наш конструктор принимает вид:

sub new {
  my $proto = shift;                 # извлекаем имя класса или указатель на объект
  my $class = ref($proto) || $proto; # если указатель, то взять из него имя класса
  my $self  = {};
  $self->{NAME}    = undef;
  $self->{VERSION} = undef;
  $self->{OPTIONS} = [];
  bless($self, $class);              # гибкий вызов функции bless
  return $self;
}

Все приведенные выше методы работали с полями данных объекта. Разумеется, возможности методов этим не ограничены. Мы можем, например, добавить к нашему классу такой метод:

sub showObject {
  my $self = shift;
  printf "%s %d : ", $self->name, $self->version;
  printf "Java %s, ", $self->options->[0] ? "enabled" : "disabled";
  printf "Cookies %s.\n", $self->options->[1] ? "enabled" : "disabled";
}

6.8.3. Деструкторы объектов

Большинство языков программирования, поддерживающих создание объектов через конструкторы, поддерживают и деструкторы объектов. Деструктор — это метод, который автоматически вызывается исполняющей средой, когда происходит удаление объекта. В отличие от конструктора он обязан иметь единственное возможное имя, а именно DESTROY. Причина этого состоит именно в том, что он чаще всего вызывается автоматически системой сборки мусора, которая требует, чтобы все деструкторы назывались одинаково.

Хотя деструкторы объектов в PERLе и предусмотрены, писать их приходится крайне редко, опять-таки благодаря наличию системы сборки мусора. По сути дела, единственная ситуация, в которой написание деструктора необходимо, это объекты, содержащие прямую или опосредованную ссылку на себя. Такой объект никогда не будет автоматически удален (во всяком случае, пока программа не завершится), и, если мы озабочены оптимизацией памяти, то должны явно вызвать деструктор этого объекта.

6.8.4. Данные класса

До сих пор все данные в нашем классе были данными объекта, т. е. относились к конкретному экземпляру класса. Однако, во многих случаях бывают нужны переменные, относящиеся к классу в целом. В нашем примере такой переменной могла бы быть переменная $Count, содержащая количество существующих экземпляров класса. С ее использованием начало модуля выглядит так:

package Browser;
use strict;

my $Count = 0;

sub new {
  my $proto = shift;
  my $class = ref($proto) || $proto;
  $Count++;
  my $self  = {};
  $self->{NAME}    = undef;
  $self->{VERSION} = undef;
  $self->{OPTIONS} = [];
  bless($self, $class);
  return $self;
}
sub DESTROY {
  $Count--;
}
sub total {
  return $Count;
}

Как мы видим, добавились метод total(), возвращающий значение $Count, и деструктор объектов, необходимый для правильного подсчета существующих объектов.

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

6.8.5. Наследование

Все объектно-ориентированные системы программирования включают в себя понятие наследования. Наследование означает, что создаваемый класс может быть объявлен потомком уже существующего класса. Потомок класса наследует все его свойства, но может дополнительно иметь собственные свойства или изменять унаследованные свойства.

PERL не поддерживает наследование классов. Вместо этого каждый пакет содержит переменную @ISA, управляющую наследованием методов. Если мы вызываем метод класса или объекта, которого нет в пакете данного класса, то PERL просматривает пакеты, перечисленные в @ISA, в поисках метода с таким именем. Рассмотрим такой пакет:

package Info::System;
use Info::Browser;
@ISA = qw(Info::Browser);
1;

Этот короткий модуль создает новый класс Info::System, который наследует все методы класса Info::Browser. Например, мы могли бы написать такую программу:

use Info::System;
$myBrowser = Info::System->new();
$myBrowser->name("Netscape");
$myBrowser->version(6);
$myBrowser->options(1, 1);
$myBrowser->showObject;
print "Total: ".Info::System->total()."\n";

Посмотрим, что происходит при вызове метода Info::System->new(). Поскольку в пакете Info::System такого метода нет, PERL ищет его в массиве @ISA и находит в пакете Info::Browser. Затем он вызывает этот метод, передавая ему в качестве первого аргумента имя класса Info::System, т. е. данный оператор заменяется на Info::Browser::new("Info::System"). После этого срабатывает функция bless, вторым аргументом которой является имя переданного класса, как описано выше. В результате мы получаем ссылку на вновь созданный объект класса Info::System, что нам и требовалось.

Теперь мы можем добавить к классу Info::System его собственные методы, например:

sub osname {
  my $self = shift;
  if (@_) { $self->{OSNAME} = shift }
  return $self->{OSNAME};
}

Больше того, мы можем переопределить в Info::System часть методов класса Info::Browser, например:

sub showObject {
  my $self = shift;
  printf "%s %d on %s: ", $self->name, $self->version, $self->osname;
  printf "Java %s, ", $self->options->[0] ? "enabled" : "disabled";
  printf "Cookies %s.\n", $self->options->[1] ? "enabled" : "disabled";
}

Поскольку @ISA является массивом, ничто не запрещает нам реализовать на PERLе множественное наследование классов, т. е. создать класс, который является потомком сразу нескольких классов. Множественное наследование — это большая тема, требующая отдельного рассмотрения, поэтому мы ее здесь касаться не будем.

6.8.6. Класс UNIVERSAL

Истинные ценители PERLа считают, что вся прелесть этого языка в его умолчаниях, и потому пишут на нем так, чтобы непосвященный ничего не понял. Даже не разделяя этого подхода, следует признать, что знание умолчаний PERLа часто является полезным. Одним из таких полезных действий по умолчанию является следующее: PERL всегда неявно добавляет в конец массива @ISA имя модуля UNIVERSAL. Иными словами, все классы PERLа наследуют методы класса UNIVERSAL. Таких методов три: can, isa и VERSION.

Метод can

Синтаксис: ссылка->can(метод)
Аргументы: метод — строковое выражение
Результат: ссылка на подпрограмму

Если объект, на который указывает ссылка, имеет заданный метод, то метод can возвращает ссылку на этот метод. В противном случае он возвращает undef. Пример:

$sub = $obj->can('print');

Метод isa

Синтаксис: ссылка->isa(класс)
Аргументы: класс — строковое выражение
Результат: логическое значение

Метод isa возвращает истину, если ссылка указывает на класс или его наследника, и ложь в противном случае. Пример:

$has_io = $fd->isa("IO::Handle");

Метод VERSION

Синтаксис: ссылка->VERSION(версия?)
Аргументы: версия — плавающее выражение
Результат: номер версии

Метод VERSION возвращает значение глобальной переменной $VERSION в пакете, на который указывает ссылка. Если задана версия и она больше, чем значение переменной $VERSION, то программа завершается по фатальной ошибке с соответствующей диагностикой. Примеры:

$his_vers = $obj->VERSION();
Some_Module->VERSION(3.0);

Обычно этот метод явно не вызывается; его вызывает функция use() при проверке версии. Для того, чтобы обеспечить проверку версии своего модуля, нужно просто добавить в него строку вида

our $VERSION = '1.1';

6.8.7. Безымянные подпрограммы как объекты

Реализация объектов в виде безымянных ассоциативных массивов, которой мы до сих пор пользовались, не является, разумеется, единственно возможной. Здесь приводится альтернативная реализация класса Info::Browser, основанная на безымянных подпрограммах. Она несколько сложнее и медленнее, но имеет одно существенное преимущество: данные объекта становятся полностью скрытыми от внешнего мира. Новый вариант нашего класса имеет вид:

package Info::Browser;
use strict;

my $Count = 0;

sub new {
  my $proto = shift;
  my $class = ref($proto) || $proto;
  $Count++;
  my $self = { NAME => undef, VERSION => undef, OPTIONS => []};
  my $closure = sub {
    my $field = shift;
    if (@_) { $self->{$field} = shift }
    return $self->{$field};
  };
  bless($closure, $class);
}
sub DESTROY {
  $Count--;
}
sub total {
  return $Count;
}
sub name    { &{$_[0]}("NAME", @_[1..$#_]) }
sub version { &{$_[0]}("VERSION", @_[1..$#_]) }
sub options { &{$_[0]}("OPTIONS", [@_[1..$#_]]) }
sub showObject {
  my $self = shift;
  printf "%s %d : ", $self->name, $self->version;
  printf "Java %s, ", $self->options->[0] ? "enabled" : "disabled";
  printf "Cookies %s.\n", $self->options->[1] ? "enabled" : "disabled";
}

1;

Теперь объект, возвращаемый методом new(), это не ссылка на структуру данных, а ссылка на безымянную подпрограмму, которая имеет доступ к данным объекта через локальную переменную $self. Самое интересное, что программу, которая пользуется этим классом, изменять не нужно.

6.8.8. Связывание переменных

Очень интересной возможностью языка PERL является связывание переменных с объектами. Суть этого явления состоит в том, чтобы скрыть реализацию объекта за переменной. Мы можем читать и изменять значение связанной переменной обычным образом, но при этом неявно будут вызываться соответствующие методы объекта, которые могут быть сколь угодно сложными.

Для того, чтобы использовать связывание, мы должны оформить свой класс специальным образом. Это оформление зависит от типа связываемой переменной (скаляр, массив, ассоциативный массив, ссылка или описатель файла). Дистрибутив PERL содержит соответствующие базовые классы Tie::Scalar, Tie::Array и пр., облегчающие создание связываемых классов. Здесь мы приведем пример только связывания скалярной переменной; для других типов техника будет аналогичной.

Наш пример OutFile скрывает за связанной переменной запись в текстовый файл. При связывании переменной с классом OutFile вызывается его конструктор, который создает файл с заданным именем. При удалении связи этот файл закрывается. При каждом присваивании связанной переменной нового значения это значение выводится в файл как новая строка. Соответствующий пакет OutFile.pm будет иметь вид:

package OutFile;

# Конструктор класса
sub TIESCALAR {
  my $class = shift;
  my $filename = shift;
  open(OUT, ">$filename") or die "Cannot create $filename: $!\n";
  bless {FileHandle => OUT, Value => 0}, $class;
}

# Чтение значения связанной переменной
sub FETCH {
  my $self = shift;
  return $self->{Value};
}

# Задание нового значения связанной переменной
sub STORE {
  my $self = shift;
  my $value = shift;
  my $handle = $self->{FileHandle};
  print $handle "$value\n";
  $self->{Value} = $value;
}

# Деструктор класса
sub DESTROY {
  my $self = shift;
  my $handle = $self->{FileHandle};
  close $handle;
}

1;

Теперь мы можем написать программу, использующую класс OutFile. Для этого нам потребуются встроенные функции PERL, создающие и удаляющие связь переменных с объектами. Существуют три функции работы со связанными переменными: tie(), tied() и untie().

Функция tie устанавливает связь переменной с классом. Она имеет вид

tie var, class, arguments

Эта функция связывает переменую var с классом class. При этом вызывается конструктор класса, которому передается список аргументов arguments. Результатом функции является ссылка на созданный объект. В дальнейшем мы можем получить эту ссылку в любой момент вызовом функции

tied var

(Если функции tied передана несвязанная переменная, то она возвращает неопределенное значение.) Для разрыва связи переменной с объектом используется функция

untie var

При разрыве связи неявно вызывает деструктор объекта, связанного с переменной.

Теперь мы можем написать пример использования переменной, связанной с классом OutFile:

use OutFile;

my $test;
tie $test, 'OutFile', 'myfile.txt';
$test = 'First';
$test = 'Second';
$test = 'Third';
untie $test;

Выполнив эту программу, мы найдем в текущем каталоге новый файл MYFILE.TXT, содержащий следующие строки:

First
Second
Third

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


WDH: PERL - Встроенные функции

Глава 6.9. Встроенные функции

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

  • числовые функции;
  • строковые функции;
  • прочие скалярные функции;
  • функции работы с регулярными выражениями;
  • функции работы с массивами и списками;
  • функции работы с ассоциативными массивами;
  • функции работы с временем;
  • прочие функции общего назначения;
  • функции ввода-вывода;
  • функции форматирования ввода-вывода;
  • функции управления файлами;
  • функции управления каталогами;
  • функции управления процессами;
  • функции управления сокетами;
  • информационные функции.

Перечень всех встроенных функций языка PERL приведен в Приложении 21.

6.9.1. Числовые функции

Функция | Описание
abs | Абсолютная величина числа.
atan2 | Арктангенс частного.
cos | Косинус числа.
exp | Экспонента числа.
int | Целая часть числа.
log | Натуральный логарифм числа.
rand | Генератор случайных чисел.
sin | Синус числа.
sqrt | Квадратный корень из числа.
srand | Инициализация генератора случайных чисел.

Функция abs

Синтаксис: abs число
Аргументы: число — числовое выражение
Результат: числовое значение

Функция abs возвращает абсолютную величину числа. Если аргумент опущен, то число принимается равным значению переменной $_. Примеры:

print abs 2;	// 2
print abs -2;	// 2

Функция atan2

Синтаксис: atan2 число1, число2
Аргументы: число1, число2 — числовые выражения
Результат: числовое значение

Функция atan2 возвращает арктангенс частного от деления числа1 на число2. Результат находится в диапазоне от -π до +π и соответствует величине угла в радианах между осью абсцисс и вектором до точки с координатами (число2, число1). Примеры:

$x = atan2 -0, -1;	# x равно -3.14159265358979
$x = atan2 -1, 0;	# x равно -1.5707963267949
$x = atan2 0, 1;	# x равно 0
$x = atan2 1, 1;	# x равно 0.785398163397448
$x = atan2 1, 0;	# x равно 1.5707963267949
$x = atan2 0, -1;	# x равно 3.14159265358979

Функция cos

Синтаксис: cos число
Аргументы: число — числовое выражение
Результат: числовое значение

Функция cos возвращает косинус числа. Если аргумент опущен, то число принимается равным значению переменной $_. Примеры:

$pi = atan2 0, -1;
$x = cos 0;     # x равно 1
$x = cos $pi/2; # x равно 6e-17 (почти 0)
$x = cos $pi;   # x равно -1

Функция exp

Синтаксис: exp число
Аргументы: число — числовое выражение
Результат: числовое значение

Функция exp возвращает экспоненту числа. Если аргумент опущен, то число принимается равным значению переменной $_. Если число больше 709.78, то возвращается 1.#INF. Пример:

print exp 1;  # 2.71828182845905

Функция int

Синтаксис: int число
Аргументы: число — числовое выражение
Результат: числовое значение

Функция int возвращает целую часть числа. Если аргумент опущен, то число принимается равным значению переменной $_. Пример:

print int 1.5;   # 1
print int -1.5;  # -1

Функция log

Синтаксис: log число
Аргументы: число — числовое выражение
Результат: числовое значение

Функция log возвращает натуральный логарифм числа. Если аргумент опущен, то число принимается равным значению переменной $_. Если аргумент меньше или равен нулю, то возникает фатальная ошибка исполнения. Пример:

print log 2.71828182845905; # 1

Функция rand

Синтаксис: rand число
Аргументы: число — числовое выражение
Результат: числовое значение

Функция rand возвращает случайное число, большее или равное нулю и меньшее числа, которое должно быть положительным. Если аргумент опущен, то число принимается равным 1. Если функция srand() еще не вызывалась, то автоматически вызывает ее.

Функция sin

Синтаксис: sin число
Аргументы: число — числовое выражение
Результат: числовое значение

Функция sin возвращает синус числа. Если аргумент опущен, то число принимается равным значению переменной $_. Примеры:

$pi = atan2 0, -1;
$x = sin 0;      # x равно 0
$x = sin $pi/2;  # x равно 1
$x = sin -$pi/2; # x равно -1

Функция sqrt

Синтаксис: sqrt число
Аргументы: число — числовое выражение
Результат: числовое значение

Функция sqrt возвращает квадратный корень из числа. Если аргумент опущен, то число принимается равным значению переменной $_. Если аргумент меньше или равен нулю, то возникает фатальная ошибка исполнения. Пример:

print sqrt 2; # 1.4142135623731

Функция srand

Синтаксис: srand число
Аргументы: число — числовое выражение

Функция srand инициализирует генератор случайных чисел rand(). Если ее аргумент опущен, то число генерируется исполняющей системой. Начиная с PERL 5.004, явный вызов этой функции не нужен, т. к. теперь она автоматически вызывается функцией rand() при первом обращении к ней.

6.9.2. Строковые функции

Функция | Описание
chomp | Удаляет концевой разделитель записей.
chop | Удаляет последний символ строки.
crypt | Кодирует текст.
index | Возвращает первую слева позицию заданной подстроки.
lc | Преобразует строку в строчные буквы.
lcfirst | Преобразует первый символ строки в строчную букву.
length | Возвращает длину строки.
rindex | Возвращает первую справа позицию заданной подстроки.
substr | Возвращает заданную подстроку.
uc | Преобразует строку в прописные буквы.
ucfirst | Преобразует первый символ строки в прописную букву.

Функция chomp

Синтаксис: chomp строка
           chomp список
Аргументы: строка — строковое выражение
           список — список строковых выражений
Результат: числовое значение

Функция chomp удаляет из строки концевую подстроку, соответствующую текущему разделителю записей, т. е. содержимому переменной $/. Если аргументом является список, то эта функция применяется к каждому элементу списка. Если аргумент опущен, то строка принимается равной значению переменной $_. Результатом функции является общее количество удаленных символов.

Ее основным применением является удаление концевых символов перевода строки при построчном чтении текстового файла, например:

while (<>) {
  chomp;  # удаляем \n в конце считанной строки $_
  . . .
}

Если $\ равно undef или содержит ссылку на число (для записей фиксированной длины), то эта функция ничего не удаляет.

Функция chop

Синтаксис: chop строка
           chop список
Аргументы: строка — строковое выражение
           список — список строковых выражений
Результат: строковое значение

Функция chop удаляет из строки ее последний символ и возвращает его. Если аргументом является список, то эта функция применяется к каждому элементу списка и возвращает последний из удаленных символов. Если аргумент опущен, то строка принимается равной значению переменной $_. Пример:

$_ = 'abcde';
chop;
print; # выводит 'abcd'

Функция crypt

Синтаксис: crypt строка, код
Аргументы: строка, код — строковые выражения
Результат: строковое значение

Функция crypt кодирует исходную строку с помощью строки код и возвращает результат. Код должен состоять из двух символов, лежащих в диапазоне [./0-9A-Za-z]. Парной функции декодировки в PERL'е нет, поэтому практического применения эта функция не имеет.

Функция index

Синтаксис: index строка, подстрока, позиция?
Аргументы: строка, подстрока — строковые выражения
           позиция — числовое выражение
Результат: числовое значение

Функция index ищет в строке заданную подстроку, начиная с заданной позиции или с начала строки, если позиция опущена. Она возвращает позицию найденной подстроки в исходной строке или -1, если подстрока не найдена. Пример:

$str = 'Queen Mary';
print index($str, 'Mary');  # 6
print index($str, 'mary');  # -1

Функция lc

Синтаксис: lc строка
Аргументы: строка — строковое выражение
Результат: строковое значение

Функция lc преобразует все символы строки в строчные буквы. Если аргумент опущен, то строка принимается равной значению переменной $_. Если использована директива use locale, то преобразование производится с учетом текущей национальной настройки. Пример:

print lc 'ABCDE';  # abcde

Функция lcfirst

Синтаксис: lcfirst строка
Аргументы: строка — строковое выражение
Результат: строковое значение

Функция lcfirst преобразует первый символ строки в строчную букву. Если аргумент опущен, то строка принимается равной значению переменной $_. Если использована директива use locale, то преобразование производится с учетом текущей национальной настройки. Пример:

print lcfirst 'ABCDE';  # aBCDE

Функция length

Синтаксис: length строка
Аргументы: строка — строковое выражение
Результат: числовое значение

Функция length возвращает количество символов в строке. Если аргумент опущен, то строка принимается равной значению переменной $_. Пример:

print length 'ABCDE';  # 5

Функция rindex

Синтаксис: rindex строка, подстрока, позиция?
Аргументы: строка, подстрока — строковые выражения
           позиция — числовое выражение
Результат: числовое значение

Функция rindex ищет в строке заданную подстроку справа налево, начиная с заданной позиции или с конца строки, если позиция опущена. Она возвращает позицию найденной подстроки в исходной строке или -1, если подстрока не найдена. Пример:

print rindex('abcabc', 'abc');  # 3

Функция substr

Синтаксис: substr строка, смещение, длина?, замена?
Аргументы: строка, замена — строковые выражения
           смещение, длина — числовые выражения
Результат: строковое значение

Функция substr возвращает подстроку строки заданной длины, начиная с заданного смещения. Если смещение отрицательно, то оно отсчитывается от конца строки. Если длина опущена, то извлекаются символы до конца строки; если она отрицательна, то она складывается с длиной строки. Пример:

print substr('abcdef', 1, -2);  # bcd

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

$str = 'abcdef';
substr($str, 1, -2,'xxx');
print $str; # axxxef

Этот пример можно записать и так:

$str = 'abcdef';
substr($str, 1, -2) = 'xxx';
print $str; # axxxef

Функция uc

Синтаксис: uc строка
Аргументы: строка — строковое выражение
Результат: строковое значение

Функция uc преобразует все символы строки в прописные буквы. Если аргумент опущен, то строка принимается равной значению переменной $_. Если использована директива use locale, то преобразование производится с учетом текущей национальной настройки. Пример:

print uc 'abcde';  # ABCDE

Функция ucfirst

Синтаксис: ucfirst строка
Аргументы: строка — строковое выражение
Результат: строковое значение

Функция ucfirst преобразует первый символ строки в прописную букву. Если аргумент опущен, то строка принимается равной значению переменной $_. Если использована директива use locale, то преобразование производится с учетом текущей национальной настройки. Пример:

print ucfirst 'abcde';  # Abcde

6.9.3. Прочие скалярные функции

Функция | Описание
chr | Преобразует число в символ.
hex | Преобразует строку в шестнадцатеричное число.
oct | Преобразует строку в восьмеричное число.
ord | Преобразует символ в число.
pack | Упаковывает список значений в строку.
unpack | Распаковывает строку в список значений.
vec | Операции со строкой как как массивом из групп битов.

Функция chr

Синтаксис: chr код
Аргументы: код — числовое выражение
Результат: строковое значение

Функция chr возвращает символ, имеющий заданный числовой код. Если аргумент опущен, то код принимается равным значению переменной $_. Пример:

print chr 65;	// A

Функция hex

Синтаксис: hex строка
Аргументы: строка — строковое выражение
Результат: числовое значение

Функция hex преобразует строку в шестнадцатеричное число. Если аргумент опущен, то строка принимается равной значению переменной $_. Например, все приведенные ниже операторы выведут на экран число 165:

print hex '0xaf';
print hex 'xaf';
print hex '0af';
print hex 'af';

Функция oct

Синтаксис: oct строка
Аргументы: строка — строковое выражение
Результат: числовое значение

Функция oct преобразует строку в число. Если строка начинается с '0x', то она интерпретируется как шестнадцатеричное число; если она начинается с '0b', то интерпретируется как двоичное число; в остальных случаях она интерпретируется как восьмеричное число. Если аргумент опущен, то строка принимается равной значению переменной $_. Примеры:

print oct '0xaf';  # 165
print oct '0b101'; # 5
print oct '0100';  # 64
print oct '100';   #64

Функция ord

Синтаксис: ord строка
Аргументы: строка — строковое выражение
Результат: числовое значение

Функция ord возвращает числовой код первого символа строки. Если аргумент опущен, то строка принимается равной значению переменной $_. Пример:

print ord 'ABC';  # 65

Функция pack

Синтаксис: pack шаблон, список
Аргументы: шаблон — строковое выражение
           список — список скалярных выражений
Результат: строковое значение

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

Символ | Результат
a | Произвольная строка, в конце добавить нулевой байт.
A | Строка ASCII, в конце добавить пробел.
Z | Строка ASCII, в конце добавить нулевой байт.
b | Битовая строка, биты в байте упаковываются с младшего бита.
B | Битовая строка, биты в байте упаковываются со старшего бита.
h | Шестнадцатеричная строка, младшая тетрада идет первой.
H | Шестнадцатеричная строка, старшая тетрада идет первой.
c | Однобайтовое целое со знаком.
C | Однобайтовое целое без знака.
s | Двухбайтовое целое со знаком.
S | Двухбайтовое целое без знака.
i | Целое со знаком (число байтов зависит от архитектуры).
I | Целое без знака (число байтов зависит от архитектуры).
l | Четырехбайтовое целое со знаком.
L | Четырехбайтовое целое без знака.
n | Двухбайтовое целое без знака, старший байт идет первым.
N | Четырехбайтовое целое без знака, старший байт идет первым.
v | Двухбайтовое целое без знака, младший байт идет первым.
V | Четырехбайтовое целое без знака, младший байт идет первым.
q | Восьмибайтовое целое со знаком.
Q | Восьмибайтовое целое без знака.
f | Плавающее число обычной точности, формат зависит от архитектуры.
d | Плавающее число двойной точности, формат зависит от архитектуры.
p | Указатель на строку с завершающим нулевым байтом.
P | Указатель на структуру фиксированной длины.
u | Строка в кодировке uuencode.
U | Строка в кодировке UTF-8.
w | Сжатое целое формата BER.
x | Нулевой байт.
X | Дублировать байт.
@ | Заполнение нулями до указанной позиции.

Шаблоны подчиняются следующим правилам:

  • За буквой может следовать число, задающее счетчик повторений. Для всех типов, кроме a, A, Z, b, B, h, H, P, извлекается соответствующее количество элементов списка. Если счетчик задан символом *, это означает упаковку всех оставшихся элементов списка (за исключением @, x, X, где этот символ эквивалентен 0, и u, где он эквивалентен 1). Z* означает добавление дополнительного нулевого байта в конец строки. Счетчик повторений для u интерпретируется как максимальное число байтов, которое должно кодироваться в одной строке вывода; при этом 0 и 1 заменяются на 45.
  • Типы a, A, Z всегда извлекают из списка одно значение. Счетчик повторений для них означает длину упакованной строки. Если строка длиннее счетчика, то она усекается; если короче, то дополняется нулями (a, Z) или пробелами (A). При упаковке a и Z эквивалентны; при распаковке A удаляет из строки концевые пробелы и нулевые байты, Z удаляет все после первого нулевого байта, a ничего не удаляет.
  • Типы b и B преобразуют каждый из входных байтов в один бит результата. Результирующий бит равен 0 или 1 в зависимости от значения младшего бита исходного байта. Счетчик повторений задает количество упаковываемых байтов. При этом b упаковывает получаемые биты в байт результата, начиная с младшего его бита, а B — со старшего. Если длина исходной строки не делится на 8, то результат дополняется нулевыми битами. При распаковке эти лишние биты игнорируются. Если входная строка длиннее счетчика, то она усекается. * в качестве счетчика повторений означает использование всех байтов входного поля. При распаковке биты преобразуются в байты "0" и "1".
  • Для типов h и H счетчик повторений означает количество упаковываемых шестнадцатеричных цифр (тетрад). Каждый из входных байтов преобразуется в одну тетраду результата. При этом байты "0"… "9", "a"…"f", "A"…"F" заменяются на соответствующие шестнадцатеричные цифры, а остальные байты на свою младшую тетраду. Тип h упаковывает получаемые тетрады в байт результата, начиная с младшего его тетрады, а H — со старшей. Если длина исходной строки нечетна, то результат дополняется нулевой тетрадой. При распаковке лишняя тетрада игнорируются. Если входная строка длиннее счетчика, то она усекается. * в качестве счетчика повторений означает использование всех байтов входного поля. При распаковке тетрады преобразуются в строку шестнадцатеричных цифр.
  • Тип p упаковывает указатель на строку, оканчивающуюся нулевым байтом, а P — указатель на структуру фиксированной длины, заданной счетчиком повторений. Если значение соответствующего указателя равно undef, то упаковывается нуль.
  • Символ / вместо счетчика повторений позволяет упаковать перед строкой ее длину. Например, шаблон "n/a*" означает, что результат будет состоять из двухбайтового числа, содержащего длину исходной строки, и самой строки.
  • При упаковке не производится никакого выравнивания получаемых значений.
  • Шаблон может содержать комментарий, который начинается с символа # и продолжается до конца строки.
  • Если шаблон требует больше аргументов, чем содержится в списке, то список дополняется пустыми строками "". Если шаблон требует меньше аргументов, чем содержится в списке, то лишние аргументы игнорируются.

Примеры:

$foo = pack("CCCC",65,66,67,68);       # $foo = "ABCD"
$foo = pack("C4",65,66,67,68);         # $foo = "ABCD"
$foo = pack("aaaa","abc","x","y","z"); # $foo = "axyz"
$foo = pack("a14","abcdefg");          # "abcdefg\0\0\0\0\0\0\0"
$foo = pack("s2",1,2);                 # $foo = "\1\0\2\0" в IBM PC, "\0\1\0\2" в Mac

Функция unpack

Синтаксис: unpack шаблон, строка
Аргументы: шаблон, строка — строковые выражения
Результат: массив значений

Функция pack распаковывает строку, упакованную функцией pack(). Она возвращает массив полученных в результате значений (в скалярном контексте возвращает первое полученное значение). Правила распаковки задаются строкой шаблон, строение которой то же, что и для pack(). Дополнительно шаблон может содержать перед буквой, задающей тип распаковки, префикс %n, который указывает, что мы хотим получить не результат распаковки, а его n-битовую контрольную сумму. Остальные подробности см. в описании функции pack(). Следующий пример демонстрирует эффективный способ подсчета количества единичных битов в переменной $mask:

$setbits = unpack("%32b*", $mask);

Функция vec

Синтаксис: vec выражение, смещение, ширина
Аргументы: выражение — строковое выражение
           смещение, ширина — числовые выражения
Результат: числовое значение

Функция vec рассматривает строку выражение как массив, состоящий из элементов заданной ширины в битах. Она извлекает элемент с заданным смещением и возвращает его. Ширина должна степенью числа 2 в диапазоне от 1 до 32 (или 64 на 64-битовых платформах), смещение трактуется как целое число без знака. Пример:

$x = "\x10\x32\x54";  # $x = (0, 1, 2, 3, 4, 5) как вектор 4-битовых чисел
print vec($x, 2, 4);  # поэтому будет выведено число 2

Функция vec может использоваться в левой части оператора присваивания для формирования массива битовых групп в строке. Например, мы могли бы сформировать приведенную выше строку $x так:

vec($x, $_, 4) = $_ foreach (0, 1, 2, 3, 4, 5);

6.9.4. Функции работы с регулярными выражениями

Функция | Описание
pos | Позиция последнего сопоставления.
quotemeta | Преобразует символы в escape-последовательности.
split | Расщепляет строку на массив подстрок.
study | Компилирует строковое выражение.

Функция pos

Синтаксис: pos аргумент
Аргументы: аргумент — строковая переменная
Результат: числовое значение

Функция pos возвращает позицию в строке аргумент после последнего сопоставления с модификатором g. Если аргумент опущен, то он принимается равным значению переменной $_. Эта функция может употребляться в левой части операции присваивания для задания новой позиции. Такое присваивание изменяет поведение метасимвола \G в последующих сопоставлениях. См. подробнее п. 6.4.6.1.

Функция quotemeta

Синтаксис: quotemeta аргумент
Аргументы: аргумент — строковое выражение
Результат: строковое значение

Функция quotemeta добавляет в строку аргумента символ '\' перед каждым символом, не являющимся латинской буквой или цифрой, и возвращает новую строку в качестве результата. Если аргумент опущен, то он принимается равным значению переменной $_. Это внутренняя функция, которая реализует метасимвол \Q. Пример:

print quotemeta "abc123абв";  # "abc123\а\б\в"

Функция split

Синтаксис: split образец, строка, предел
Аргументы: образец — регулярное выражение
           строка — строковое выражение
           предел — числовое выражение
Результат: список строк

Функция split расщепляет исходную строку на подстроки и возвращает список этих подстрок. В скалярном контексте она заносит список подстрок в массив @_ и возвращает его длину. Если строка опущена, то она принимается равной значению переменной $_. Разбиение на подстроки происходит в позициях сопоставления с заданным образцом; если он опущен, то разбиение производится по символу пробела, при этом начальные пробелы в каждой подстроке удаляются. Если образец содержит круглые скобки, то подстроки, сопоставляемые с выражением в скобках, включаются в результирующий список как отдельные элементы.

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

@_ = split(/,/, 'a,b,c,d,');     # @_ = ('a', 'b', 'c', 'd')
@_ = split(/,/, 'a,b,c,d,', 3);  # @_ = ('a', 'b', 'c,d,')
@_ = split(/,/, 'a,b,c,d,', -3); # @_ = ('a', 'b', 'c', 'd', '')
@_ = split(/(,)/, 'a,b,c,d,');   # @_ = ('a', ',', 'b', ',', 'c', ',', 'd', ',')

Функция study

Синтаксис: study строка
Аргументы: строка — строковое выражение
Результат: нет

Функция study компилирует строку (или значение переменной $_, если она опущена) во внутреннее представление. Если строку предполагается многократно сопоставлять с образцом, то ее компиляция может сэкономить время при последующих операциях сопоставления. В каждый момент времени только одна строка может быть скомпилирована; применение функции study к другой строке отменяет компиляцию текущей строки. Пример:

while (<>) {
  study;
  print "Мое\n" if /\bменя\b/;
  print "Твое\n" if /\bтебя\b/;
  ...
}


WDH: PERL - Ввод-вывод, файлы и каталоги

Глава 6.11. Ввод-вывод, файлы и каталоги

6.11.1. Функции ввода-вывода

Все описанные в этом разделе функции оперируют с описателями файлов (см. п. 6.2.11). Обратите внимание, что PERL поддерживает два уровня ввода-вывода. Ввод-вывод низкого уровня (без буферизации данных) реализован функциями sysread, syswrite и sysseek. Остальные функции ввода-вывода используют внутреннюю буферизацию файлов для ускорения операций чтения и записи и не совместимы с функциями низкого уровня. Иными словами, для каждого открытого нами файла мы должны использовать только одну группу операций: либо буферизованных, либо нет. Смешение функций из этих групп может привести к потере данных.

Функция | Описание
binmode | Задает двоичный/текстовый режим ввода-вывода.
close | Закрывает файл.
eof | Проверяет, достигнут ли конец файла.
fileno | Возвращает дескриптор открытого файла.
flock | Блокирует/разблокирует файл.
getc | Читает один символ из файла.
ioctl | Операции управления вводом-выводом.
open | Открывает заданный файл.
print | Выводит в файл строку или список строк.
read | Читает блок данных из файла.
readline | Читает очередную запись из файла.
seek | Изменяет текущую позицию в файле.
select | Задает или возвращает указатель файла вывода по умолчанию.
sysopen | Открывает заданный файл.
sysread | Читает блок данных из файла.
sysseek | Изменяет текущую позицию в файле.
syswrite | Выводит блок данных в файл.
tell | Возвращает текущую позицию в файле.
truncate | Изменяет длину заданного файла.

Функция binmode

Синтаксис: binmode файл, режим?
Аргументы: файл — описатель файла
           режим — строковое выражение

Функция binmode задает двоичный или текстовый режим ввода-вывода для указанного файла. Режим задается строкой ":raw" для двоичного режима и ":crlf" для текстового режима. Если этот аргумент опущен, то задается двоичный режим. Данная функция должна вызываться после открытия файла, но до всех операций ввода или вывода с этим файлом.

Разные платформы вкладывают разное содержание в понятия "текстовый файл" и "двоичный файл". В частности, в Unix эти понятия не различаются, а в DOS и Windows текстовые файлы имеют следующие особенности:

  • При чтении текстового файла разделитель строк "\r\n" заменяется на "\n", а при записи выполняется обратное преобразование.
  • Символ "\cZ" при чтении текстового файла воспринимается как конец файла, независимо от того, что хранится после него.

В целях совместимости рекомендуется вызывать binmode для двоичных файлов и не вызывать для текстовых. Пример:

open BINFILE, "myfile.dat" or die "Cannot open file: $!\n";
binmode BINFILE;
  . . .
close BINFILE;

Функция close

Синтаксис: close файл?
Аргументы: файл — описатель файла
Результат: логическое значение

Функция eof закрывает указанный файл. Она возвращает истину, если сброс файловых буферов на диск и закрытие файла прошли успешно, и ложь в противном случае. Если аргумент опущен, то закрывается файл, принятый по умолчанию для вывода (см. описание функции select).

Если файл был открыт с перенаправлением вывода, то функция close дожидается завершения работы конвейера и возвращает результат его работы. Пример:

open(OUTPUT, '|sort >temp.tmp') or die "Can't start sort: $!";
  . . . # выводим данные в OUTPUT
close OUTPUT or warn $! ? "Error closing sort pipe: $!" : "Exit status $? from sort";
open(INPUT, 'temp.tmp') or die "Can't open 'temp.tmp' for input: $!";

Функция eof

Синтаксис: eof файл?
           eof()
Аргументы: файл — описатель файла
Результат: логическое значение

Функция eof возвращает 1, если следующее чтение файла обнаружит конец файла или если данный файл не был открыт. В противном случае возвращается 0. Если аргумент опущен, то проверяется файл, из которого производилась последняя операция чтения.

Функция eof() имеет особое назначение. Она относится к псевдофайлу, образованному списком файлов, указанных в командной строке программы, и проверяет наличие входных записей в нем. Подробнее об этом см. описание операции <>.

Данная функция используется редко, поскольку все функции ввода PERL возвращают undef при достижении конца файла или ошибке чтения.

Функция fileno

Синтаксис: fileno файл
Аргументы: файл — описатель файла
Результат: числовое значение

Функция fileno возвращает системный дескриптор файла или undef, если данный файл не был открыт. Обычно она используется в программах, взаимодействующих с функциями, написанными на C. Кроме того, с ее помощью можно проверить, указывают ли два описателя на один и тот же файл:

if (fileno(FILE1) == fileno(FILE2)) {
  . . .
}

Функция flock

Синтаксис: flock файл, операция
Аргументы: файл — описатель файла
           операция — числовое выражение
Результат: логическое значение

Функция flock выполняет заданную операцию блокировки/разблокировки над файлом и возвращает истину в случае успеха и ложь при неудаче. Операция задается числом или символической константой из модуля Fcntl (нужна директива use Fcntl ':flock'):

Символическое имя | Число | Операция
LOCK_SH | 1 | Разделяемая блокировка файла.
LOCK_EX | 2 | Монопольная блокировка файла.
LOCK_NB | 4 | Не ждать завершения операции блокировки.
LOCK_UN | 8 | Снятие блокировки файла.

Флаг LOCK_NB употребляется в сочетании с LOCK_SH или LOCK_EX. Если его нет, то функция ждет, пока файл не будет заблокирован; если он установлен, то возврат из функции производится без ожидания (в этом случае мы должны обязательно проверить возвращаемый результат).

В Windows 95/98 эта функция не реализована (вызывает фатальную ошибку). Пример:

use Fcntl ':flock';

open(MYFILE, ">test.txt") or die "Can't create file: $!";
flock(MYFILE, LOCK_EX);
print MYFILE $msg, "\n";
flock(MYFILE, LOCK_UN);

Функция getc

Синтаксис: getc файл?
Аргументы: файл — описатель файла
Результат: строковое значение

Функция getc читает очередной символ из файла или из STDIN, если аргумент опущен. Если STDIN — это клавиатура, то она ждет нажатия клавиши.

Функция ioctl

Синтаксис: ioctl файл, операция, параметр
Аргументы: файл — описатель файла
           операция — числовое выражение
           параметр — скалярное выражение
Результат: числовое значение

Функция ioctl системно-зависима. В Unix она вызывает стандартную функцию C ioctl, предназначенную для управления устройствами ввода-вывода, а в Windows используется только для сокетов и вызывает функцию ioctlsocket, реализованную в Winsock API. Мы не приводим здесь описания этих системных функций, см. документацию на соответствующие операционные системы.

Функция open

Синтаксис: open файл, режим, имя
           open файл, имя?
Аргументы: файл — описатель файла
           режим, имя — строковые выражения
Результат: числовое значение

Функция open выполняет открытие файлов в стиле командного интерпретатора Unix. Имя задает имя открываемого файла. В случае успешного открытия файла его описатель заносится в переменную файл и возвращается ненулевое значение. При неудаче возвращается значение undef. Если имя опущено, то PERL считает, что имя файла хранится в скалярной переменной с тем же именем, что и файл, например:

open(MYFILE, 'test.txt'); # открываем TEXT.TXT

$MYFILE = 'test.txt';
open(MYFILE);             # то же самое

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

Обозначение | Режим открытия файла
'<' или пусто | Открывает существующий файл для чтения. Если такого файла нет, возвращает ошибку.
'>' | Открывает новый файл для записи. Если такой файл есть, его содержимое удаляется.
'>>' | Открывает файл для дозаписи в его конец. Если такого файла нет, то он создается.
'+<' | Открывает существующий файл для чтения и записи. Если такого файла нет, возвращает ошибку.
'+>' | Открывает новый файл для чтения и записи. Если такой файл есть, его содержимое удаляется.
'+>>' | Открывает файл для чтения и дозаписи в его конец. Если такого файла нет, то он создается.
'|-' | Имя файла задает программу, на стандартный ввод которой будет перенаправлен вывод в этот файл (только в Unix).
'-|' | Имя файла задает программу, стандартный вывод которой будет перенаправлен на чтение из этого файла (только в Unix).

В Windows для создания конвейеров следует использовать альтернативный синтаксис: второй формат функции open, в которой имя файла начинается с символа '|' (эквивалентно режиму '|-') или заканчивается символом '|' (эквивалентно режиму '-|').

Во втором формате команды после режимов '>', '>>', '<', '+>', '+>>', '+<' можно добавить символ '&'. В этом случае остаток строки интерпретируется как имя описателя файла, если это строка, или дескриптор файла, если это число. Этот синтаксис следует традиции командного интерпретатора Bourne и позволяет нам дублировать описатели открытых файлов. Кроме того, в этом формате поддержаны два полезных сокращения: имя файла '-' указывает на STDIN, а '>-' — на STDOUT. Примеры:

open(MYFILE, 'input.txt');       # открывает файл для чтения
open(LOG, '>>mylog');            # открывает протокол для дозаписи
open(DBASE, '+<', 'data.dbf');   # открывает БД для обновления
open(DBASE, '+<data.dbf');       # то же самое
open(SORTED, "|sort >temp.tmp"); # сортировка результатов записи в файл
open(OUT, ">&STDOUT");           # открывает копию STDOUT

open(F, '-|', "cat -n '$file'"); # открывает $file на чтение в Unix
open(F, "cat -n '$file'|");      # то же самое

Функция print

Синтаксис: print файл, список
           print список?
Аргументы: файл — описатель файла
           список — список выражений

Функция print выводит список строк (в частности, одну строку) в заданный файл. Если аргумент файл опущен, то вывод производится в файл, принятый по умолчанию для вывода (см. описание функции select). Если и список опущен, то выводится содержимое специальной переменной $_. Если значение переменной $, не пусто, то оно выводится между элементами списка. Если значение переменной $\ не пусто, то оно выводится после вывода списка. Обратите внимание, что если даже вы передаете этой функции одно выражение для вывода, оно вычисляется в контексте списка. Если файл задается выражением, то вам придется указать блок, который возвращает значение описателя файла. Примеры:

@a = (1, 2, 3);
print @a;      # выводит на STDOUT строку '123'
print 1, 2, 3; # то же самое

$, = ' ';
print MYFILE 'aaa', 'bbb', 'ccc'; # выводит в MYFILE строку 'aaa bbb ccc'

print { $OK ? STDOUT : STDERR } "$message\n";

Функция read

Синтаксис: read файл, скаляр, длина, смещение?
Аргументы: файл — описатель файла
           скаляр — имя скалярной переменной
           длина, смещение — числовые выражения
Результат: числовое значение

Функция read пытается считать из заданного файла количество байтов, заданное аргументом длина. Результат чтения заносится в переменную скаляр как строка байтов. Если задан аргумент смещение, то результат заносится в скаляр как в строку, начиная с ее байта с заданным смещением (отрицательное смещение отсчитывается от конца строки). Эта функция возвращает количество фактически считанных байтов, 0 при попытке чтения в конце файла и undef при ошибке чтения. Пример: допустим, что наш файл TEST.DAT начинается с символов abcdef. Тогда сценарий

open F, 'test.dat';
read F, $x, 5;
print $x;

выведет на экран строку abcde.

Функция readline

Синтаксис: readline файл
Аргументы: файл — typeglob описателя файла
Результат: строковое значение или список строк

Функция readline читает файл с заданным typeglob. В скалярном контексте она считывает очередную запись файла и возвращает ее. В контексте списка она читает файл до конца и возвращает список записей. Ограничитель входных записей задается значением специальной переменной $/. Это внутренняя функция PERLа, реализующая операцию <описатель>, однако вы можете вызывать ее и непосредственно. Например, следующие два оператора эквивалентны:

$line = <STDIN>;
$line = readline(*STDIN);

Функция seek

Синтаксис: seek файл, смещение, начало
Аргументы: файл — описатель файла
           смещение, начало — числовые выражения
Результат: числовое значение

Функция seek изменяет текущую позицию в заданном файле и возвращает 1 в случае успеха и 0 при неудаче. Новая позиция вычисляется на основании параметров начало и смещение в соответствии со следующей таблицей:

начало |  | Новая позиция
Имя | Значение
SEEK_SET | 0 | смещение относительно начала файла
SEEK_CUR | 1 | текущая позиция + смещение
SEEK_END | 2 | конец файла + смещение (обычно отрицательное)

Для использования символических имен параметра начало мы должны добавить в наш сценарий директиву use Fcntl ':seek'. Примеры:

use Fcntl ':seek';
seek(FILE, 0, 2);        # позиционируемся на конец файла
seek(FILE, 0, SEEK_END); # то же самое

Функцию seek не следует использовать совместно с sysread и syswrite из-за проблем, связанных с внутренней буферизацией ввода-вывода. В этому случае следует пользоваться функцией sysseek.

Функция select

Синтаксис: select файл?
Аргументы: файл — описатель файла
Результат: описатель файла

Функция select возвращает указатель файла, принятый по умолчанию для вывода. Если параметр файл задан, то он становится новым файлом, принятым для вывода по умолчанию. После этого функции print и write без указания файла вывода будут производить запись в этот файл. Кроме того, специальные переменные, связанные с выводом, теперь будут относиться к этому файлу. Первоначально для вывода по умолчанию принят STDOUT. Следующий пример делает текущим каналом вывода файл REPORT и устанавливает длину страницы вывода для него равной 70 строкам:

select(REPORT); $= = 70;

Приведем еще один пример, показывающий, как включить автоматический сброс на диск буферов файла STDERR:

$old = select(STDERR); $| = 1; select($old);

Функция sysopen

Синтаксис: sysopen файл, имя, режим, права?
Аргументы: файл — описатель файла
           имя — строковое выражение
           режим, доступ — числовые выражения
Результат: числовое значение

Функция sysopen выполняет открытие файлов в стиле языка C. Имя задает имя открываемого файла. В случае успешного открытия файла его описатель заносится в переменную файл и возвращается ненулевое значение. При неудаче возвращается значение undef.

Аргумент режим — это набор битовых флагов, задающий режим открытия файла. Поскольку числовые значения флагов системно-зависимы, следует всегда пользоваться их символическими именами. Для доступа к этим именам необходимо включить в сценарий директиву use Fcntl. Перечислим имена флагов режима открытия файла, которые есть и в Unix, и в Windows:

Имя | Значение
O_APPEND | Перемещает указатель файла в его конец перед каждой операцией записи.
O_BINARY | Открывает файл в двоичном режиме (см. описание функции binmode).
O_CREAT | Создает новый файл и открывает его для записи. Если такой файл уже есть, не выполняет никаких действий.
O_EXCL | Возвращает ошибку, если файл с таким именем существует. Употребляется только с флагом O_CREAT. Этот флаг сильнее, чем флаг O_TRUNC.
O_RANDOM | Открывает файл в режиме произвольного доступа.
O_RDONLY | Открывает файл только для чтения. Не может сочетаться с флагами O_RDWR и O_WRONLY.
O_RDWR | Открывает файл для чтения и записи. Не может сочетаться с флагами O_RDONLY и O_WRONLY.
O_SEQUENTIAL | Открывает файл в режиме последовательного доступа.
O_TEMPORARY | Создает временный файл, который будет удален после закрытия последнего указателя на него. Употребляется только с флагом O_CREAT.
O_TEXT | Открывает файл в текстовом режиме (см. описание функции binmode).
O_TRUNC | Открывает файл и удаляет его содержимое, сбрасывая длину файла в нуль; файл должен быть доступен для записи. Не может сочетаться с флагом O_RDONLY. Вместе с флагом O_CREAT создает новый файл, даже если такой файл уже есть.
O_WRONLY | Открывает файл только для записи. Не может сочетаться с флагами O_RDWR и O_RDONLY.

Если режим содержит флаг O_CREAT, т. е. если создается новый файл, то мы можем указать аргумент права. Он задает маску прав доступа к файлу, которая будет установлена при первом закрытии нового файла. Формат этой маски приведен в описании функции umask. По умолчанию она равна восьмеричному числу 0666; это означает, что созданный файл будет доступен для чтения и записи. Примеры:

use Fcntl;
# Открываем существующий фал для чтения
sysopen IN, 'data.txt', O_RDONLY;
# Создаем новый файл. Если он уже есть, то фатальная ошибка.
sysopen OUT, 'data.txt', O_CREAT | O_EXCL or die "Такой файл уже есть!";
# Создаем новый файл. Если он уже есть, то его содержимое теряется.
sysopen OUT, 'data.txt', O_CREAT | O_TRUNC;

Функция sysread

Синтаксис: sysread файл, скаляр, длина, смещение?
Аргументы: файл — описатель файла
           скаляр — имя скалярной переменной
           длина, смещение — числовые выражения
Результат: числовое значение

Функция sysread пытается считать из заданного файла количество байтов, заданное аргументом длина. Результат чтения заносится в переменную скаляр как строка байтов. Если задан аргумент смещение, то результат заносится в скаляр как в строку, начиная с ее байта с заданным смещением (отрицательное смещение отсчитывается от конца строки). Результат равен количеству фактически считанных байтов, 0 при попытке чтения в конце файла и undef при ошибке чтения.

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

Функция sysseek

Синтаксис: sysseek файл, смещение, начало
Аргументы: файл — описатель файла
           смещение, начало — числовые выражения
Результат: числовое значение

Функция sysseek изменяет текущую позицию в заданном файле и возвращает 1 в случае успеха и 0 при неудаче. Она полностью аналогична функции seek, но с одним важным отличием: позиционирование производится без внутренней буферизации данных. Поэтому ее нельзя смешивать с функциями read, print, write, seek, tell, eof и т. п. Использование этой функции допустимо только в сочетании с функциями sysread и syswrite.

Парной функции systell в PERL'e нет. Вместо нее следует использовать sysseek(файл, 0, 1).

Функция syswrite

Синтаксис: syswrite файл, скаляр, длина?, смещение?
Аргументы: файл — описатель файла
           скаляр — имя скалярной переменной
           длина, смещение — числовые выражения
Результат: числовое значение

Функция syswrite пытается записать в заданный файл количество байтов, заданное аргументом длина из переменной скаляр как строку байтов. Если длина не задана, то переменная скаляр выводится в файл полностью. Если задан аргумент смещение, то выводятся байты из строки скаляр, начиная с ее байта с заданным смещением (отрицательное смещение отсчитывается от конца строки). Результат равен количеству фактически записанных байтов, 0 при попытке чтения в конце файла и undef при ошибке чтения.

Эта функция выполняет запись без внутренней буферизации данных. Поэтому ее нельзя смешивать с функциями read, print, write, seek, tell, eof и т. п.

Функция tell

Синтаксис: tell файл?
Аргументы: файл — описатель файла
Результат: числовое значение

Функция tell возвращает текущую позицию в заданном файле. Если файл опущен, то возвращается текущая позиция в файле, из которого производилось последнее чтение. Пример:

open OUT, '>test.txt';
print OUT 'abc';
$pos = tell OUT;  # $pos равно 3

Функция truncate

Синтаксис: truncate файл, длина
Аргументы: файл — описатель файла
           длина — числовое выражение
Результат: логическое значение

Функция truncate усекает заданный файл до заданной длины. Она возвращает истину в случае успеха и undef при неудаче.

Windows требует, чтобы файл был открыт для дозаписи в конец файла (т. е. либо функцией open(файл, '>>имя_файла'), либо функцией sysopen(файл, 'имя_файла', O_APPEND | O_RDWR)). Кроме того, для успеха операции требуется, чтобы файл не был открыт другими процессами.

6.11.2. Форматирование вывода

PERL поддерживает два механизма форматирования данных для вывода. Первый механизм заимствован из языка FORTRAN и основан на шаблонах вывода: функция format задает шаблон вывода, а функция write выводит данные в соответствии с заданным шаблоном. Второй механизм заимствован из языка C и реализован функциями printf и sprintf, которые выводят данные в файл в соответствии с заданной спецификацией формата.

Функция | Описание
format | Декларирует шаблон вывода для write.
formline | Форматированный вывод в строку.
printf | Форматирует и выводит строку в файл.
sprintf | Форматирует строку.
write | Форматированный вывод записи в файл.

Функция format

Синтаксис:
format имя =
шаблон
.

Функция format декларирует шаблон вывода с заданным именем. Имена шаблонов образуют собственное пространство имен; иными словами, функция ABC и шаблон ABC не имеют ничего общего. По умолчанию принято, что шаблон вывода для файла с описателем FILE имеет имя FILE. Естественно, что мы можем использовать для форматирования вывода в FILE и шаблоны с другими именами.

Шаблон вывода состоит из строк трех видов:

  • комментарии, которые начинаются с символа # в первой позиции;
  • форматные строки, которые задают формат выводимой строки;
  • строки аргументов, содержащие значения, которые при выводе подставляются в форматные строки.

Форматные строки выводятся в точности так, как они заданы, за исключением специальных полей, в которые подставляются значения, заданные в строках аргументов. Специальные поля начинаются с символа @ или ^. Поля, начинающиеся с символа @, могут иметь следующий вид:

@<…< | Выводит значение переменной в поле заданной ширины, выравненное влево.
@>…> | Выводит значение переменной в поле заданной ширины, выравненное вправо.
@|…| | Выводит значение переменной в поле заданной ширины, выравненное по центру.
@#…# | Выводит значение числовой переменной в поле заданной ширины, выравненное вправо.
@#…#. | Выводит значение числовой переменной и десятичную точку в поле заданной ширины, выравненное вправо.
@* | Выводит многострочное значение без задания ширины поля.

Если выводимая строка не помещается в заданное поле, то она обрезается.

Специальные поля, которые начинаются с символа ^, обрабатываются иначе. Если поле заполнено символом #, то в него также выводится числовое значение, но с одной особенностью: если значение неопределено, то поле выводится пустым. Для остальных заполнителей (<, > и |) соответствующий аргумент должен быть не выражением, а скалярной переменной, содержащей строковое значение. PERL выводит столько символов этой строки, сколько поместится в заданное поле, а затем удаляет эту часть строки из аргумента. Затем поле может повториться на следующей строке и т. д., позволяя вывести длинный текст в несколько строк. Разбивка строки производится только по тем символам, которые заданы в специальной переменной $:. При желании можно добавить в конец последнего поля символы "...", чтобы показать, что строка слишком длинна для полного вывода.

Поля, начинающиеся с символа ^, можно использовать для вывода записей переменной длины. Если исходный текст короток, то мы можем подавить вывод пустых строк, помещая в форматные строки символ ~. Если поместить в строку два символа ~ подряд, то ее вывод будет повторяться до тех пор, пока все поля в строке не будут исчерпаны.

Для вывода заголовка на каждой странице отчета следует использовать функцию format с именем шаблона, состоящим из имени шаблона вывода отчета плюс слово "_TOP".

Пример: следующая программа

format MY_TOP =
    Тестовая страница

.
format MY =
Тест: @<<<<<<<< @||||| @>>>>>
      $str,     $x,    '$'.int($num)
.

$str = 'строка';
$x = '1';
$num = 123.456;
$~ = 'MY';
write;

выведет на консоль такой отчет:

    Тестовая страница

Тест: строка      1      $123

Функция formline

Синтаксис: formline шаблон, список
Аргументы: шаблон — имя шаблона
           список — список выражений
Результат: логическая истина

Это внутренняя функция, используемая функцией write. Она применяет заданный шаблон к заданному списку значений и заносит сформатированный результат в специальную переменную $^A (аккумулятор форматного вывода).

Функция printf

Синтаксис: printf файл? формат, список
Аргументы: файл — описатель файла
           формат — спецификация формата
           список — список выражений

Эта функция эквивалентна выражению print файл sprintf(формат, список) с единственным отличием: в конец выводимой строки не добавляется разделитель выходных записей $\. Пример:

printf STDOUT "Версия PERL: v%vd\n", $^V; # "Версия PERL: v5.6.0"

Функция sprintf

Синтаксис: sprintf формат, список
Аргументы: формат — спецификация формата
           список — список выражений
Результат: строковое значение

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

Форматная строка является комбинацией обычных символов и специальных полей спецификации формата. Поле спецификации формата состоит из символа % и латинской буквы, задающей тип преобразования. Между символом % и буквой типа могут размещаться уточняющие флаги, описанные ниже. Если после символа % стоит буква, неизвестная функции sprintf, то символ % игнорируется, а буква воспринимается как обычный символ; в частности, для вывода в результирующую строку самого символа % можно использовать поле %%. PERL поддерживает следующие типы преобразований:

Поле | Аргумент | Результат
%c | Число | Символ с данным кодом.
%s | Строка | Строка символов.
%d | Число | Целое десятичное число со знаком.
%u | Число | Целое десятичное число без знака.
%b | Число | Целое двоичное число без знака.
%o | Число | Целое восьмеричное число без знака.
%x | Число | Целое шестнадцатеричное число без знака.
%X | Число | То же, но с прописными буквами.
%e | Число | Плавающее число в научной нотации вида [-]1.2345e±678.
%E | Число | То же, но с прописным E.
%f | Число | Плавающее число в формате с десятичной точкой вида [-]1234.5678.
%g | Число | Плавающее число в наиболее компактном из форматов %e или %f.
%G | Число | То же, но %E или %f.
%p | Переменная | Указатель (шестнадцатеричный адрес переменной).
%n | Переменная | Сохраняет количество символов, выведенных в результирующую строку к этому моменту, в следующей переменной списка аргументов.
%i | Число | Устаревший синомим для %d.
%D | Число | Устаревший синомим для %ld.
%U | Число | Устаревший синомим для %lu.
%O | Число | Устаревший синомим для %lo.
%F | Число | Устаревший синомим для %f.

Между символом % и буквой типа могут указываться следующие флаги:

Флаг | Значение
пробел | Начинать положительные числа с символа пробел.
+ | Начинать положительные числа с символа +.
- | Выравнивание результата по левому краю.
0 | Использовать нули, а не пробелы, для выравнивания по правому краю.
# | Начинать ненулевые восьмеричные числа с "0", ненулевые шестнадцатеричные числа с "0x".
число | Минимальная ширина поля.
.число | Для плавающих чисел — число знаков после запятой, для строк — максимальная длина, для целых чисел — минимальная длина.
l | Интрепретировать число как переменную типа long или unsigned long языка C.
h | Интрепретировать число как переменную типа short или unsigned short языка C.
h | Интрепретировать число как переменную типа short или unsigned short языка C.
V | Интрепретировать число как переменную стандартного целого типа языка PERL.
v | Интрепретировать строку как вектор кодов символов, при выводе разделять точками.
*v | Интрепретировать строку как вектор кодов символов, при выводе разделять следующим аргументом из списка.

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

Примеры форматирования строк:

%s = sprintf "%#0.8x\n", 256;           # %s = "0x00000100"
%s = sprintf "%+10E\n", 256;            # %s = "+2.560000E+002"
%s = sprintf "Версия PERL: %vd\n", $^V; # %s = "Версия PERL: 5.6.0"

Функция write

Синтаксис: write файл?
Аргументы: файл — описатель файла

Эта функция выводит форматированную запись в указанный файл, используя шаблон, ассоциированный с данным файлом. По умолчанию этот шаблон имеет то же имя, что и описатель файла, но шаблон, ассоциированный с файлом, принятым для вывода по умолчанию, может иметь любое имя; для связи его с файлом достаточно занести имя шаблона в переменную $~. Пример вызова этой функции см. в описании функции format.

6.11.3. Функции управления файлами

Функция | Описание
-attr | Возвращает заданный атрибут файла.
chmod | Изменяет атрибуты файлов.
glob | Возвращает список имен файлов, соответствующих образцу.
link | Связывает новый файл с существующим.
lstat | Возвращает информацию о символической ссылке.
rename | Переименовывает файл.
stat | Возвращает информацию о файле.
unlink | Удаляет заданные файлы.
utime | Изменяет время последнего доступа и модификации файлов.

Функция -attr

Синтаксис: -attr файл
Аргументы: attr — буква, задающая атрибут файла
           файл — описатель файла
Результат: логическое значение

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

Атрибут | Значение
-r | Файл доступен для чтения пользователю с данным эффективным UID.
-w | Файл доступен для записи пользователю с данным эффективным UID.
-x | Файл доступен для исполнения пользователю с данным эффективным UID.
-o | Файл принадлежит пользователю с данным эффективным UID.
-R | Файл доступен для чтения пользователю с данным реальным UID.
-W | Файл доступен для записи пользователю с данным реальным UID.
-X | Файл доступен для исполнения пользователю с данным реальным UID.
-O | Файл принадлежит пользователю с данным реальным UID.
-e | Файл существует.
-z | Файл имеет нулевой размер.
-s | Файл имеет ненулевой размер (возвращается размер файла).
-f | Это обычный файл.
-d | Это каталог.
-l | Это символическая ссылка.
-p | Это канал ввода-вывода (pipe).
-S | Это сокет.
-b | Это специальный блочный файл.
-c | Это специальный посимвольный файл.
-t | Это терминал (tty).
-u | У файла установлен бит setuid.
-g | У файла установлен бит setgid.
-k | У файла установлен бит sticky.
-T | Это текстовый файл.
-B | Это двоичный файл.
-M | Возраст файла в днях на момент запуска сценария.
-A | Возраст последнего доступа к файлу в днях на момент запуска сценария.
-C | Возраст последнего обновления файла в днях на момент запуска сценария.

Пример:

print "Файл доступен для чтения\n" if -r FILE;

Функция chmod

Синтаксис: chmod маска, список
Аргументы: маска — числовое выражение
           список — список имен файлов
Результат: числовое значение

Функция chmod изменяет маску прав доступа к файлам, указанным в списке, на заданную, и возвращает количество файлов, у которых это изменение прошло успешно. Маска задается числом или символической константой из модуля Fcntl (нужна директива use Fcntl ':mode'). По традиции Unix элементы маски задаются восьмеричными числами, поэтому в следующей таблице значения символических констант приведены в восьмеричном виде:

Символическое имя | Число | Операция
_S_IXOTH | 00001 | Разрешается выполнение (для файлов) и поиск (для каталогов) прочим пользователям.
_S_IWOTH | 00002 | Разрешается запись прочим пользователям.
_S_IROTH | 00004 | Разрешается чтение прочим пользователям.
_S_IXGRP | 00010 | Разрешается выполнение (для файлов) и поиск (для каталогов) членам группы.
_S_IWGRP | 00020 | Разрешается запись членам группы.
_S_IRGRP | 00040 | Разрешается чтение членам группы.
_S_IEXEC | 00100 | Разрешается выполнение (для файлов) и поиск (для каталогов) владельцу.
_S_IWRITE | 00200 | Разрешается запись владельцу.
_S_IREAD | 00400 | Разрешается чтение владельцу.
_S_ISVTX | 01000 | Бит принадлежности.
_S_ISGID | 02000 | Установить группе права на выполнение.
_S_ISUID | 04000 | Установить пользователю права на выполнение.

В Windows поддерживаются только флаги _S_IEXEC, _S_IWRITE и _S_IREAD. Пример:

use Fcntl ':mode';
chmod _S_IREAD | _S_WRITE, 'myfile.txt';

Функция glob

Синтаксис: glob образец?
Аргументы: образец — строковое выражение
Результат: список строк

Функция glob возвращает список имен файлов, соответствующих заданному образцу. Если образец опущен, то используется содержимое специальной переменной $_. Строка считается образцом, если она содержит хотя бы один из специальных символов "?", "*" или "[". Раскрытие образца — это операция, преобразующая образец в список соответствующих ему полных имен файлов. Правила соответствия определены следующим образом:

  • "?" (не в квадратных скобках) соответствует любому одиночному символу.
  • "*" (не в квадратных скобках) соответствует любой строке, включая пустую строку.

Квадратные скобки используются для задания групп символов так же, как в регулярных выражениях PERL. Можно задавать группы одиночных символов ("[abc]"), диапазоны символов ("[a-z0-9]") и все символы, кроме указанных ("[!abc]"). Для включения в образец специального символа как обычного перед ним ставится обратная косая черта "\". Примеры:

@list = glob '*.c';         # возвращает имена всех файлов, оканчивающихся на ".c"
@list = glob '*';           # возвращает имена всех файлов
                              (кроме тех, что начинаются с точки!)
@list = glob 'dir/%[0-9]*'; # возвращает имена всех файлов в каталоге dir, у которых
                              второй символ имени — цифра

В DOS и Windows использование этой функции с именами каталогов затруднительно, поскольку там имена каталогов разделяются не косой чертой "/", а обратной косой чертой "\", которая в glob имеет специальное назначение. Поэтому для этих систем существует специальный модуль File::DosGlob, который входит в стандартный дистрибутив PERL.

Функция link

Синтаксис: link старое имя, новое имя
Аргументы: старое имя, новое имя — строковые выражения
Результат: логическое значение

Функция link создает файл с новым именем и связывает его с существующим файлом, имеющим старое имя. Возвращает ненулевое значение при удачном завершении и нуль при неудаче. В Windows реализована только для файловой системы NTFS (Windows NT/2000).

Функция lstat

Синтаксис: lstat файл?
Аргументы: файл — описатель файла или имя файла
Результат: список значений

Функция lstat возвращает ту же информацию о файле, что и функция stat, но эта информация возвращается о символической ссылке, а не о файле, на который эта ссылка указывает. Если операционная система не поддерживает символические файловые ссылки, то эта функция эквивалентна stat. Если файл опущен, то используется содержимое специальной переменной $_.

Функция rename

Синтаксис: rename старое имя, новое имя
Аргументы: старое имя, новое имя — строковые выражения
Результат: логическое значение

Функция link переименовыает файл со старым именем, присваивая ему новое имя. Возвращает ненулевое значение при удачном завершении и нуль при неудаче. Пример:

rename 'myfile.txt', 'mynewfile.txt';

Функция stat

Синтаксис: stat файл?
Аргументы: файл — описатель файла или имя файла
Результат: список значений

Функция stat возвращает массив информации о заданном файле. Если файл опущен, то используется содержимое специальной переменной $_. При неудаче возвращается нулевое значение. Информационный массив имеет следующее строение:

Индекс | Содержимое
0 | Номер устройства в файловой системе.
1 | Номер узла (inode).
2 | Режим файла (тип и маска прав доступа).
3 | Число жестких ссылок на файл.
4 | UID владельца файла.
5 | GID владельца файла.
6 | Идентификатор устройства (для специальных файлов).
7 | Размер файла в байтах.
8 | Время последнего доступа к файлу.
9 | Время последнего изменения файла.
10 | Время изменения узла (inode).
11 | Размер блока файловой системы.
12 | Количество блоков, выделенных файлу.

Все времена в этом массиве хранятся как количество секунд с начала эпохи, за которую принято 00:00 по Гринвичу 1 января 1970 г. В Windows поля 0, 1 и 10 лишены смысла. Типичный пример:

($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size, $atime, $mtime, $ctime,
 $blksize, $blocks) = stat('myfile.txt');

Если параметром файл является символ _, то возвращается массив данных от последнего вызова stat. В скалярном контексте возвращается логическое значение, означающее успех или неудачу, и в случае удачи заполняется внутренний массив, который может быть считан вызовом stat(_).

Функция unlink

Синтаксис: unlink список?
Аргументы: список — список строковых выражений
Результат: логическое значение

Функция unlink удаляет файлы, имена которых перечислены в списке. Если список опущен, то используется содержимое специальной переменной $_. Возвращается количество успешно удаленных файлов. Примеры:

$count = unlink 'a.txt', 'b.txt', 'c.txt';
unlink @list;
unlink <*.bak>;

Для удаления каталогов следует пользоваться функцией rmdir.

Функция utime

Синтаксис: utime список?
Аргументы: список — список строковых выражений
Результат: логическое значение

Функция utime изменяет время последнего доступа и последнего изменения у файлов, имена которых перечислены в списке. Новые значения этих времен должны быть первыми двумя элементами списка. Если список опущен, то используется содержимое специальной переменной $_. Возвращается количество успешно измененных файлов. Пример:

$now = time;
utime $now, $now, 'myfile.txt';

В Windows 95/98 с файловой системой FAT время последнего доступа к файлу не поддерживается, поэтому данная функция изменяет только время последнего изменения заданных файлов.

6.11.4. Функции управления каталогами

Функция | Описание
chdir | Изменяет текущий каталог.
closedir | Закрывает каталог.
mkdir | Создает новый каталог.
opendir | Открывает заданный каталог.
readdir | Считывает очередной элемент каталога.
rewinddir | Возвращается к началу каталога.
rmdir | Удаляет заданный каталог.
seekdir | Изменяет текущую позицию в каталоге.
telldir | Возвращает текущую позицию в каталоге.

Функция chdir

Синтаксис: chdir имя?
Аргументы: имя — строковое выражение
Результат: логическое значение

Функция chdir изменяет текущий рабочий каталог на каталог с заданным именем. Если имя опущено, то используется каталог, заданный в переменной среды $ENV{HOME}; если такой переменной нет, то используется каталог, заданный в переменной среды $ENV{LOGDIR}; если и ее нет, то не делается ничего. Возвращается истина при успешной смене текущего каталога и ложь при неудаче. Пример:

chdir "c:\\windows\\temp" or die "Не могу сменить каталог: $!\n";

Функция closedir

Синтаксис: closedir каталог
Аргументы: каталог — описатель каталога
Результат: логическое значение

Функция closedir закрывает каталог, ранее открытый функцией opendir. Возвращается истина при успешном закрытии каталога и ложь при неудаче. Пример см. в описании opendir.

Функция mkdir

Синтаксис: mkdir имя, маска?
Аргументы: имя — строковое выражение
           маска — числовое выражение
Результат: логическое значение

Функция mkdir создает новый каталог с заданным именем и заданной маской прав доступа. Права доступа задаются так же, как в функции umask; если маска опущена, то ее значение принимается равным 0777. Возвращается истина при успешной смене текущего каталога и ложь при неудаче. Пример:

mkdir "c:\\mydir" or die "Не могу создать каталог: $!\n";

Функция opendir

Синтаксис: opendir каталог, имя
Аргументы: каталог — описатель каталога
           имя — строковое выражение
Результат: логическое значение

Функция opendir открывает каталог с заданным именем и заносит его описатель в переменную каталог. Возвращается истина при успешном открытии каталога и ложь при неудаче. Описатели открытых каталогов используются функциями readdir, telldir, seekdir, rewinddir и closedir. Следует помнить, что описатели каталогов имеют собственное пространство имен, не совпадающее с пространством имен описателей файлов.

Приведем пример, который выводит на экран имена всех файлов в текущем каталоге Windows с расширением '.pl':

opendir(DIR, '.');
@files = grep {!(/^\./) && /\.pl$/} readdir(DIR);
closedir(DIR);
print "$_\n" foreach @files;

Функция readdir

Синтаксис: readdir каталог
Аргументы: каталог — описатель каталога
Результат: строка или список строк

Функция readdir считывает очередной элемент каталога, открытого функцией opendir и возвращает его. В списочном контексте возвращается список всех элементов каталога с текущего элемента и до конца. Если каталог просмотрен до конца, то возвращается undef в скалярном контексте и нулевой список в списочном контексте. Пример см. в описании opendir.

Функция rewinddir

Синтаксис: rewinddir каталог
Аргументы: каталог — описатель каталога

Функция rewinddir "перематывает" заданный каталог в начало. Она используется совместно с функцией readdir для многократного просмотра элементов каталога.

Функция rmdir

Синтаксис: rmdir имя?
Аргументы: имя — строковое выражение
Результат: логическое значение

Функция rmdir удаляет каталог с заданный именем. Если аргумент опущен, то используется содержимое специальной переменной $_. Удаление каталога возможно только тогда, когда в нем нет файлов. Возвращается истина при успешном удалении каталога и ложь при неудаче. Пример:

rmdir "c:\\mydir" or die "Не могу удалить каталог: $!\n";

Функция seekdir

Синтаксис: seekdir каталог, позиция
Аргументы: каталог — описатель каталога
           позиция — числовое выражение

Функция seekdir устанавливает текущую позицию в заданном каталоге равной заданной позиции. Позиция должна быть значением, ранее полученным вызовом функции telldir.

Функция telldir

Синтаксис: telldir каталог
Аргументы: каталог — описатель каталога
Результат: числовое значение

Функция telldir возвращает текущую позицию в заданном каталоге. Это значение может быть в дальнейшем использовано для вызова функции seekdir.


WDH: PERL - Процессы и сокеты

Глава 6.12. Процессы и сокеты

6.12.1. Функции управления процессами

Функция | Описание
exec | Передает управление заданной системной команде.
fork | Запускает копию текущей программы.
kill | Посылает сигнал завершения списку процессов.
pipe | Создает канал межпроцессной коммуникации.
readpipe | Выполняет системную команду.
sleep | Приостановка работы программы.
system | Запускает системную программу и ждет ее завершения.
umask | Изменяет маску доступа к процессу.
wait | Ожидает завершения процесса-потомка.
waitpid | Ожидает завершения процесса с заданным PID.

Функция exec

Синтаксис: exec список
Аргументы: список — список строковых выражений

Функция exec вызывает заданную аргументами системную команду и передает ей управление. После выполнения этой команды управление в perl не возвращается; для вызова системных команд с возвратом управления нужно пользоваться функцией system. Возврат управления в perl происходит только в том случае, когда запрошенной команды не существует.

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

exec('echo ha-ha-ha') or print STDERR "Не могу выполнить echo: $!";

Функция fork

Синтаксис: fork
Результат: целое значение

В Unix функция fork создает новый процесс, который является копией текущего. Она возвращает PID дочернего процесса родительскому процессу, 0 дочернему процессу и undef, если вызов функции звкочился неудачей.

В Windows нет системной поддержки для создания копий процессов, поэтому данная функция эмулируется запуском нового интерпретатора perl в отдельном потоке. Это приводит к ряду несовместимостей с Unix, которые мы здесь не рассматриваем.

Функция kill

Синтаксис: kill сигнал, список
Аргументы: сигнал — числовое или строковое выражение
           список — список числовых выражений
Результат: целое значение

В Unix функция kill посылает заданный сигнал завершения процессам, чьи PID перечислены в списке, и возвращает количество процессов, отреагировавших на этот сигнал. Сигнал задается либо числовым идентификатором, либо именем в кавычках (имена сигналов и соответствующие числовые значения хранятся в глобальном массиве %SIG). Если сигнал является отрицательным числом, то он передается не процессам, а группам процессов. Если сигнал равен нулю, то никакого сигнала не посылается; такая форма функции позволяет проверить, что процесс с заданным PID существует.

В Windows нет сигналов, поэтому здесь данная функция имеет вид kill($sig, $pid) и вызывает немедленное завершение процесса с номером $pid, при этом статус завершения процесса равен $sig. Как и в Unix, если $sig равно нулю и заданный процесс существует, то функция вернет 1, не завершая процесс.

Функция pipe

Синтаксис: pipe ввод, вывод
Аргументы: ввод, вывод — описатели файлов

Функция pipe создает два взаимосвязанных конвейера, один на чтение из файла ввод, а второй на запись в файл вывод. Самостоятельно используется очень редко, см. документацию на PERL IPC (interprocess communication).

Функция readpipe

Синтаксис: readpipe выражение
Аргументы: выражение — строковое выражение
Результат: строка или массив строк

Функция readpipe вызывает системную команду, заданную выражением и возвращает все, что последняя выведет на стандартное устройство вывода (stdout). В скалярном контексте результат вывода возвращается как одна строка, в списочном контексте — как массив строк. Эта функция является внутренней для функции qx(), но может быть вызвана и непосредственно из программы.

Функция sleep

Синтаксис: sleep выражение?
Аргументы: выражение — числовое выражение
Результат: целое значение

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

sleep 10; # подождать 10 секунд

Функция system

Синтаксис: system список
Аргументы: список — список строковых выражений
Результат: целое значение

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

system('echo ha-ha-ha');

В Windows должна вызывается в формате system(1, @args), где @args состоит из имени запускаемой программы и ее аргументов.

Функция umask

Синтаксис: umask выражение?
Аргументы: выражение — числовое выражение
Результат: целое значение

Функция umask изменяет маску прав текущего процесса на новую, заданную выражением. Если выражение опущено, то возвращает маску прав текущего процесса. Структуру маски прав см. в описании функции chmod. В Windows игнорируется и всегда возвращает 0.

Функция wait

Синтаксис: wait
Результат: целое значение

Функция wait ждет завершения дочернего процесса и возвращает его PID или -1, если дочерних процессов нет. В Windows применима только к процессам, запущенных вызовом system(1, @args).

Функция waitpid

Синтаксис: waitpid pid, флаги
Аргументы: pid, флаги — числовые выражения
Результат: целое значение

Функция waitpid ждет завершения дочернего процесса с заданным pid и возвращает его PID или -1, если дочерних процессов нет. Допустимые значения параметра флаги зависят от операционной системы, но нулевое значение флагов поддерживается везде. В Windows применима только к процессам, запущенных вызовом system(1, @args).

6.12.2. Функции управления сокетами

Описанные в этом разделе функции выполняют базовые операции над сокетами. Сокет (socket) — это понятие, соответствующее временному соединению двух компьютеров сети, которые в этом случае принято называть хостами (hosts). Сокеты оказались удобной абстракцией для описания сетевых сессий, позволяющей программисту писать программы передачи данных по сети, не опускаясь на уровень сетевых и транспортных протоколов, поэтому они поддерживаются сегодня и в Unix, и в Windows, а также во многих современных языках программирования.

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

Функция | Описание
accept | Создает новый сокет для сессии.
bind | Связывает сокет с сетевым адресом.
connect | Устанавливает связь с удаленным сокетом.
getpeername | Возвращает адрес удаленного конца сокета.
getsockname | Возвращает адрес локального конца сокета.
getsockopt | Возвращает параметры сокета.
listen | Запускает прослушивание заданного сокета.
recv | Принимает сообщение от сокета.
send | Посылает сообщение сокету.
setsockopt | Задает параметры сокета.
shutdown | Разрывает соединение сокета.
socket | Создает новый сокет.

Функция accept

Синтаксис: accept новый, старый
Аргументы: новый, старый — описателb файлов
Результат: адрес сокета

Функция accept принимает входящее соединение от существующего сокета старый. В случае успешного соединения в параметр новый заносится описатель нового сокета и возвращается упакованный адрес соединения; в противном случае возвращается 0.

Функция bind

Синтаксис: bind сокет, имя
Аргументы: сокет — описатель файла
           имя — сетевой адрес
Результат: логическое значение

Функция connect связывает локальный сокет с сетевым адресом, заданным именем. Она возвращает истину при успешном соединении и ложь при неудаче. Имя должно содержать упакованный сетевой адрес; для его формирования проще всего использовать функции модуля Socket. Например, для прослушивания (случайно выбранного) порта 2345 по протоколу TCP мы можем написать:

use Socket;
$proto = getprotobyname('tcp');
socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
bind(SOCK, sockaddr_in(2345, INADDR_ANY)) || die "bind: $!";
listen(SOCK, SOMAXCONN) || die "listen: $!";

Функция connect

Синтаксис: connect сокет, имя
Аргументы: сокет — описатель файла
           имя — адрес удаленного сокета
Результат: логическое значение

Функция connect пытается установить связь локального сокета с удаленным сокетом, заданным именем. Она возвращает истину при успешном соединении и ложь при неудаче. Имя должно содержать упакованный адрес удаленного сокета; для его формирования проще всего использовать функции модуля Socket. Например, для связи с удаленным сокетом на том же компьютере по протоколу TCP через (случайно выбранный) порт 2345 мы можем написать:

use Socket;
$iaddr = inet_aton('localhost') || die "no localhost";
$paddr = sockaddr_in(2345, $iaddr);
$proto = getprotobyname('tcp');
socket(SOCK, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
connect(SOCK, $paddr) || die "connect: $!";

Функция getpeername

Синтаксис: getpeername сокет
Аргументы: сокет — описатель файла
Результат: адрес сокета

Функция getpeername возвращает упакованный адрес удаленного конца соединения, заданого локальным сокетом. Если сокет не имеет соединения, то возникает фатальная ошибка. Для распаковки полученного адреса проще всего пользоваться функциями модуля Socket, например:

use Socket;
$remoteaddr = getpeername(SOCK);
($port, $iaddr) = sockaddr_in($remoteaddr);
$remotehostname = gethostbyaddr($iaddr, AF_INET); // имя удаленного хоста
$remoteaddr = inet_ntoa($iaddr); // строковый адрес удаленного хоста

Функция getsockname

Синтаксис: getsockname сокет
Аргументы: сокет — описатель файла
Результат: адрес сокета

Функция getsockname возвращает упакованный адрес локального конца соединения, заданого локальным сокетом. Если сокет не имеет соединения, то возникает фатальная ошибка. Для распаковки полученного адреса проще всего пользоваться функциями модуля Socket, например:

use Socket;
$mysockaddr = getsockname(SOCK);
($port, $iaddr) = sockaddr_in($mysockaddr);
$myhostname = gethostbyaddr($iaddr, AF_INET); // имя локального хоста
$myaddr = inet_ntoa($iaddr); // строковый адрес локального хоста

Функция getsockopt

Синтаксис: getsockopt сокет, уровень, имя
Аргументы: сокет — описатель файла
           уровень, имя — числовые выражения
Результат: строковое значение

Функция getsockopt возвращает текущее значение параметра имя данного сокета или undef при неудаче. Уровень определяет уровень абстракции, на котором данный параметр определен. Он может принимать значения, имеющие следующие символические имена из модуля Socket: SOL_SOCKET (уровень сокетов) и IPPROTO_TCP (уровень TCP/IP). Допустимые имена параметров и их значения зависят как от выбранного уровня, так и от операционной системы.

Функция listen

Синтаксис: listen сокет, очередь
Аргументы: сокет — описатель файла
           очередь — числовое значение
Результат: логическое значение

Функция listen переводит сокет в режим прослушивания установленного соединения. Она возвращает истину при успешном соединении и ложь при неудаче. Параметр очередь задает максимальный размер очереди отложенных соединений; если он равен SOMAXCONN, то он устанавливается максимально возможным для данного типа сокета. Пример см. в описании функции bind.

Функция recv

Синтаксис: recv сокет, буфер, длина, флаги
Аргументы: сокет — описатель файла
           буфер — скалярная переменная
           длина, флаги — числовые выражения
Результат: строковое значение

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

Функция send

Синтаксис: send сокет, сообщение, флаги, приемник?
Аргументы: сокет — описатель файла
           сообщение — текстовое выражение
           длина, флаги — числовые выражения
           приемник — адрес сокета
Результат: строковое значение

Функция send посылает сообщение удаленному сокету. Если локальный сокет не соединен с удаленным, то необходимо явно указать упакованный адрес приемника. Возвращается количество переданных символов; при ошибке возвращается undef. Допустимые значения флагов зависят от операционной системы. Эта функция предназначена для посылки датаграммных сообщений по протоколам типа UDP.

Функция setsockopt

Синтаксис: setsockopt сокет, уровень, имя, значение
Аргументы: сокет — описатель файла
           уровень, имя — числовые выражения
           значение — строковое выражение или undef
Результат: строковое значение

Функция setsockopt устанавливает новое значение параметра имя данного сокета. Уровень определяет уровень абстракции, на котором данный параметр определен. Он может принимать значения, имеющие следующие символические имена из модуля Socket: SOL_SOCKET (уровень сокетов) и IPPROTO_TCP (уровень TCP/IP). Допустимые имена параметров и их значения зависят как от выбранного уровня, так и от операционной системы.

Функция shutdown

Синтаксис: shutdown сокет, способ
Аргументы: сокет — описатель файла
           способ — числовое выражение

Функция shutdown закрывает соединение указанного сокета одним из следующих способов:

Способ | Значение
0 | Прекратить чтение данных.
1 | Прекратить запись данных.
2 | Прекратить использование данного сокета.

Функция socket

Синтаксис: socket сокет, домен, тип, протокол
Аргументы: сокет — описатель файла
           домен, тип, протокол — числовые выражения
Результат: целое значение

Функция socket создает новый сокет и заносит его описатель в сокет. Остальные аргументы определяют параметры создаваемого сокета. Для совместимости вместо числовых значений следует использовать их символические имена, доступные по директиве use Socket;. Аргумент домен задает спецификацию семейства адресов; его возможные значения зависят от операционной системы. Для связи по Интернету его значение должно быть равно PF_INET. Аргумент тип специфицирует тип сокета: SOCK_STREAM для связи по протоколу TCP и SOCK_DGRAM для связи по протоколу UDP. Наконец, аргумент протокол указывает конкретный протокол, который будет использоваться сокетом. Пример создания сокета для связи по протоколу TCP см. в описании функции connect.

6.12.3. Информационные функции

Функция | Описание
gethostbyaddr | Возвращает информацию о хосте, заданном адресом.
gethostbyname | Возвращает информацию о хосте, заданном именем.
getlogin | Возвращает имя пользователя.
getprotobyname | Возвращает информацию о протоколе по его имени.
getprotobynumber | Возвращает информацию о протоколе по его номеру.
getservbyname | Возвращает информацию о сервисе по его имени.
getservbyport | Возвращает информацию о сервисе по номеру порта.

Функция gethostbyaddr

Синтаксис: gethostbyaddr адрес, тип
Аргументы: адрес, тип — числовые выражения
Результат: массив значений

Функция gethostbyaddr возвращает информацию о хосте, заданном своим адресом. Аргумент тип задает спецификацию семейства адресов; его возможные значения зависят от операционной системы. Для связи по Интернету его значение должно быть равно AF_INET (символическое имя, доступное по директиве use Socket;). Возвращаемый массив устроен так:

Номер элемента | Описание
0 | Официальное имя хоста.
1 | Альтернативные имена хоста.
2 | Тип адреса.
3 | Длина адреса в байтах.
4 | Массив упакованных адресов.

В скалярном контексте возвращается официальное имя хоста. Следующий пример:

use Socket;
$iaddr = inet_aton("127.0.0.1");
($name, $aliases, $addrtype, $length, @addrs) = gethostbyaddr($iaddr, AF_INET);
$straddr = inet_ntoa($addrs[0]);
print "$name $straddr\n";

выведет на экран имя и IP-адрес локального хоста: localhost 127.0.0.1.

Функция gethostbyname

Синтаксис: gethostbyname имя
Аргументы: имя — строковое выражение
Результат: массив значений

Функция gethostbyname возвращает информацию о хосте, заданном своим именем. В скалярном контексте возвращается упакованный адрес хоста, а в списочном — такой же массив, как в функции gethostbyaddr. Следующий пример:

use Socket;
($name, $aliases, $addrtype, $length, @addrs) = gethostbyname('localhost');
$straddr = inet_ntoa($addrs[0]);
print "$name $straddr\n";

выведет на экран имя и IP-адрес локального хоста: localhost 127.0.0.1.

Функция getlogin

Синтаксис: getlogin
Результат: строковое значение

Функция getlogin возвращает имя текущего пользователя. В Unix лучше пользоваться функцией getpwuid($<).

Функция getprotobyname

Синтаксис: getprotobyname имя
Аргументы: имя — строковое выражение
Результат: массив значений

Функция getprotobyname возвращает информацию о протоколе, заданном своим именем. Возвращаемый массив устроен так:

Номер элемента | Описание
0 | Официальное название протокола.
1 | Альтернативные названия протокола.
2 | Номер протокола.

В скалярном контексте возвращается номер протокола. Следующий пример:

($name, $aliases, $proto) = getprotobyname('tcp');
print "$name $proto\n";

выведет на экран строку: tcp 6.

Функция getprotobynumber

Синтаксис: getprotobynumber номер
Аргументы: номер — числовое выражение
Результат: массив значений

Функция getprotobynumber возвращает информацию о протоколе, заданном своим номером. В скалярном контексте возвращается официальное имя протокола, а в списочном — такой же массив, как в функции getprotobyname. Следующий пример:

($name, $aliases, $proto) = getprotobynumber(6);
print "$name $proto\n";

выведет на экран строку: tcp 6.

Функция getservbyname

Синтаксис: getservbyname имя, протокол
Аргументы: имя, протокол — строковые выражения
Результат: массив значений

Функция getservbyname возвращает информацию о сервисе, заданном именем и протоколом. Возвращаемый массив устроен так:

Номер элемента | Описание
0 | Официальное название сервиса.
1 | Альтернативные имена сервиса.
2 | Номер порта.
3 | Название протокола.

В скалярном контексте возвращается номер порта. Следующий пример:

$port = getservbyname('smtp', 'tcp');
print "$port\n";

выведет на экран номер порта 25.

Функция getservbyport

Синтаксис: getservbyport порт, протокол
Аргументы: порт — числовое выражение
           протокол — строковое выражение
Результат: массив значений

Функция getservbyport возвращает информацию о сервисе, заданном номером порта и протоколом. В скалярном контексте возвращается официальное название сервиса, а в списочном — такой же массив, как в функции getservbyname. Следующий пример:

$name = getservbyport(25, 'tcp');
print "$name\n";

выведет на экран строку smtp.


WDH: VML - Введение в язык VML

Часть X.
Векторная графика: языки VML и SVG

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

Адольф Гитлер

Глава 10.1. Введение в язык VML

10.1.1. VML и SVG

VML (Vector Markup Language) — это XML-приложение, разработанное корпорацией Microsoft для кодирования двумерной векторной графики. Поддержка VML в настоящее время осуществляется только обозревателем Internet Explorer 5.x и пакетом Microsoft Office 2000.

Microsoft передал в мае 1998 г. спецификацию этого языка W3C в качестве предложения для стандартизации, однако W3C предложил в качестве стандарта собственную спецификацию SVG (Scalable Vector Graphics). Полной программной реализации SVG пока нет, но этот язык несомненно будет в ближайшее время поддержан многими системами. Поэтому мы решили дать описание обоих языков векторной графики — и VML, и SVG. VML описан в первых пяти главах этой части, а SVG — начиная с гл. 10.6.

Приведенное ниже описание VML соответствует его описанию в MSDN Library Внешняя ссылка. Мы описываем только те возможности VML, которые поддерживаются Веб-обозревателем; расширения VML, добавленные в Microsoft Office 2000, не рассматриваются. Для того, чтобы видеть, как элементы VML отображаются на экране, эту и последующие главы следует просматривать в обозревателе Internet Explorer 5.x.

10.1.2. Включение VML в HTML-документы

Как мы уже сказали, VML — это XML-приложение, т. е. специализированный язык, построенный по правилам XML. Для включения элементов VML в свою HTML-страницу мы должны сделать две вещи.

Во-первых, нужно задать пространство имен VML, чтобы анализатор HTML мог понять, когда ему вызывать XML-процессор для разбора конструкций VML. Для этого тег HTML нашей страницы нужно записать так:

<html xmlns:v="urn:schemas-microsoft-com:vml">

Теперь префикс v: в теге будет означать, что этот тег описывает VML-, а не HTML-элемент.

Во-вторых, мы должны указать обозревателю, как отображать обнаруженные в документе элементы VML. VML реализован в Microsoft Internet Explorer как встроенная реакция (default behavior). Поэтому в заголовок документа нужно включить следующие строки:

<style>
v\:* { behavior: url(#default#VML) }
</style>

Эта таблица стилей указывает, что теги с префиксом v: обрабатываются встроенной реакцией VML.

10.1.3. Краткий обзор VML

VML имеет всего два основных элемента: shape и group. Элемент shape описывает отдельную графическую фигуру, а элемент group позволяет объединять несколько фигур в группу с тем, чтобы в дальнейшем применять к этой группе различные преобразования. Элемент shape может иметь атрибут path, который задает форму фигуры как набор отрезков и плавных кривых, и дополнительные атрибуты, задающие рамку фигуры, ее заливку, текст и т. п. Кроме того, основные элементы могут содержать подэлементы, которые задают содержимое фигур и групп.

Помимо названных, в VML включены еще несколько элементов верхнего уровня. Таковы элемент shapetype, позволяющий описать некую фигуру, а затем многократно отображать ее на экране, и элементы, реализующие основные графические примитивы: line (отрезок), polyline (ломаная), curve (кривая Безье), rect (прямоугольник), roundrect (прямоугольник со скругленными углами), oval (эллипс), arc (дуга эллипса) и image (внешний графический образ).

Поясним введенные понятия примером. Следующий элемент задает отображение прямоугольника со скругленными углами, залитого желтым цветом и имеющего синюю рамку. (При написании VML-элементов важно помнить, что их синтаксис должен следовать синтаксическим правилам XML, а не HTML.)

<v:roundrect style='position:relative; left: 3em; top: 0; width: 200px; height: 75px'
  arcsize="0.25" fillcolor="yellow" strokecolor="blue" strokeweight="2px"/>

Отображаться этот прямоугольник будет так:

10.1.4. Каскадные стили

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

10.1.4.1. Поворот фигуры: свойство rotation

Синтаксис:  rotation: <угол>
Начально:   0
Применимо:  ко всем элементам VML
Сценарии:   элемент.rotation = "выражение"

Свойство rotation задает угол поворота фигуры. Его значением является угол в диапазоне от -360deg до 360deg, при этом положительный угол означает поворот по часовой стрелке. Отметим, что после поворота фигура позиционируется заново в соответствии с новыми координатами объемлющего ее прямоугольника. Кроме того, обратите внимание, что в сценариях это свойство является свойством не атрибута style, а самого элемента.

Пример: при добавлении к стилям описанного выше прямоугольника свойства rotation: 10deg получим:

10.1.4.2. Опрокидывание фигуры: свойство flip

Синтаксис:  flip: x | y | xy | yx
Начально:   нет
Применимо:  ко всем элементам VML
Сценарии:   элемент.style.flip = "выражение"

Свойство flip задает опрокидывание фигуры. Значение x означает опрокидывание относительно оси y, а y — опрокидывание относительно оси x. Оба эти значения могут быть заданы одновременно.

Пример: добавим к стилям нашего прямоугольника еще и свойство flip: x:

10.1.5. Локальные координаты

Элементы shape и group являются объемлющими прямоугольниками для своего содержимого. Внутри этого прямоугольника мы можем определить локальную систему координат с помощью атрибутов coordsize и coordorigin. В этом случае все позиционирующие свойства CSS будут задаваться в локальных координатах, т. е. в числах, а не в единицах размеров CSS.

Атрибут coordsize задает ширину и высоту объемлющего прямоугольника в локальных координатах, а атрибут coordorigin задает локальные координаты его верхнего левого угла. Пусть, например, группа задана следующим образом:

<v:group style='width: 300px; height: 250px' coordsize="100,1000"
  coordorigin="-50,-500"> … </v:group>

Здесь объемлющий прямоугольник имеет ширину 300px и высоту 250px. Все это пространство преобразуется в локальную систему координат, в которой ось x принимает значения от -50 до +50, а ось y — от -500 до +500. Начало локальных координат (0, 0) находится в центре прямоугольника. Теперь размеры и позиции всех графических объектов внутри этой группы будут задаваться в локальных координатах. Это позволяет нам в дальнейшем изменить размеры объемлющего прямоугольника, не изменяя значений атрибутов расположенных в нем объектов, и получить правильное отображение измененной группы.

На практике рекомендуется задавать значения coordsize пропорциональными ширине и высоте объемлющего прямоугольника, поскольку в противном случае отображение будет искажено из-за анизотропности координатных осей. Если атрибут coordorigin не задан, то координатами левого верхнего угла прямоугольника является точка (0, 0).

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

10.1.6. Атрибуты элементов VML

10.1.6.1. Типы атрибутов

Атрибуты элементов VML имеют следующие базовые типы:

Тип | Описание
Boolean | Атрибут принимает значения true (истина) и false (ложь).
Number | Числовые значения (целые или дробные) и размеры CSS.
String | Строковые значения, которые обычно ограничены определенным набором возможных значений.
Vector2D | Двумерная координата вида "x,y" или "x y". В сценариях доступна либо целиком, как строка, либо как объект со свойствами x и y.
Vector3D | Трехмерная координата вида "x,y,z" или "x y z". В сценариях доступна либо целиком, как строка, либо как объект со свойствами x, y и z.

Примечание. Цвета являются разновидностью строковых значений и задаются так же, как в CSS, но с одним важным отличием: дополнительные имена цветов из Таблицы П9.2 в VML не распознаются.

10.1.6.2. Общие атрибуты

Ряд атрибутов применим ко всем базовым элементам VML. Сюда относятся:

  • базовые атрибуты HTML class, id, style и title;
  • атрибуты HTML alt (альтернативный текст, который выводится вместо элемента), href (URI ресурса, который загружается при щелчке мыши на объекте) и target (фрейм, в который загружается этот ресурс);
  • атрибуты coordsize и coordorigin, задающие локальную систему координат.

10.1.7. Объектная модель VML

Элементы VML доступны в объектной модели HTML-документа так же, как и остальные элементы дерева документа. Например, мы можем включить в документ следующий текст:

<div id="myDiv"></div>

<script language="JScript">
var r = myDiv.appendChild(document.createElement("v:rect"));
r.style.position = "absolute";
r.style.top = 50;
r.style.left = 50;
r.style.width = 100;
r.style.height = 100;
r.fillcolor = "red";
</script>

Приведенный сценарий создаст элемент rect, настроит его атрибуты и выведет внутри элемента DIV:

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

r.skew.matrix = "1,0.5,0,0.7,0,0";
r.skew.on = true;

В результате получим:


WDH: VML - Базовые элементы

Глава 10.2. Базовые элементы

10.2.1. Фигуры общего вида: элемент shape

Синтаксис: <v:shape>…</v:shape>
Стили:     flip, height, left, margin-bottom, margin-left, margin-right, margin-top,
           position, rotation, top, visibility, width, z-index
Атрибуты:  id, class, style, title, alt, href, target, coordsize, coordorigin
           adj = string (список выравнивающих значений)
           fillcolor = цвет (цвет заливки фигуры)
           filled = boolean (заливка цветом)
           path = string (описание формы фигуры)
           strokecolor = цвет (цвет рамки фигуры)
           stroked = boolean (вывод рамки фигуры)
           strokeweight = размер (ширина рамки фигуры)
           type = string (указатель на shapetype)

Элемент shape описывает геометрическую фигуру общего вида. Он может использоваться самостоятельно или внутри элемента group. Для отображения фигуры мы должны, как минимум, задать позицию и размер ее объемлющего прямоугольника (свойства стилей position, left, top, height и width) и форму фигуры (атрибут path). Пример простой фигуры без внутренних элементов:

<v:shape style='position: relative; top: 0; left: 3em; width: 175; height: 175'
  strokecolor="red" strokeweight="2px" fillcolor="blue"
  coordorigin="0 0" coordsize="175 175"
  path="m 8,65 l 72,65,92,11,112,65,174,65,122,100,142,155,92,121,42,155,60,100 x e"
/>

Поясним назначение атрибутов этого элемента.

  • Атрибут path определяет форму фигуры. Он подробно описан в п. 10.4.1 (атрибут v элемента path).
  • Атрибут type является закладкой и указывает на id элемента shapetype, определяющего свойства данной фигуры (см. пример в п. 10.2.2).
  • Атрибут adj задает список выравнивающих значений для формул. Он подробно описан в п. 10.4.2.
  • Если атрибут filled равен true, то fillcolor задает цвет заливки фигуры. Если он равен false, то заливка не производится.
  • Если атрибут stroked равен true, то strokecolor задает цвет рамки фигуры, а strokeweight — ее ширину. Если он равен false, то фигура выводится без рамки.

Элемент shape может содержать графические примитивы и следующие внутренние элементы: extrusion, fill, formulas, handles, imagedata, path, shadow, skew, stroke, textbox и textpath. При этом элементы fill, path и stroke переопределяют значения соответствующих атрибутов shape.

10.2.2. Заготовка фигуры: элемент shapetype

Синтаксис: <v:shapetype>…</v:shapetype>
Атрибуты:  id, class, style, title, alt, href, target, coordsize, coordorigin
           adj = string (список выравниваний для формул)
           fillcolor = цвет (цвет заливки фигуры)
           filled = boolean (заливка цветом)
           path = string (описание формы фигуры)
           strokecolor = цвет (цвет рамки фигуры)
           stroked = boolean (вывод рамки фигуры)
           strokeweight = размер (ширина рамки фигуры)

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

<v:shapetype id="star"
  strokecolor="red" strokeweight="2px" fillcolor="blue"
  coordorigin="0 0" coordsize="175 175"
  path="m 8,65 l 72,65,92,11,112,65,174,65,122,100,142,155,92,121,42,155,60,100 x e"
/>
<v:shape style='position: relative; top: 0; left: 3em; width: 175; height: 175'
  type="#star" />
<v:shape style='position: relative; top: 0; left: 3em; width: 100; height: 100'
  type="#star" />

Здесь создается заготовка фигуры с идентификатором star, а затем применяется для создания двух одинаковых фигур разного размера. Обратите внимание, что свойства CSS элемента shapetype не наследуются, а потому задаются не в нем, а в элементах shape, использующих данную заготовку.

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

10.2.3. Группы фигур: элемент group

Синтаксис: <v:group>…</v:group>
Стили:     flip, height, left, margin-bottom, margin-left, margin-right, margin-top,
           position, rotation, top, visibility, width, z-index
Атрибуты:  id, class, style, title, alt, href, target, coordsize, coordorigin

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

<v:group style='position:relative; left:3em; top:0; width:200pt; height:200pt'
  coordsize="1000,1000" coordorigin="-500,-500">
  <v:oval style='position:absolute; left:0; top:0; width:400; height:300'
    fillcolor="red" />
  <v:roundrect style='position:absolute; left:0; top:0; width:250; height:200'
    fillcolor="green" />
</v:group>

10.2.4. Фреймы: элемент vmlframe

Синтаксис: <v:vmlframe>…</v:vmlframe>
Атрибуты:  id, class, style, title
           clip = boolean (обрезка графического образа)
           origin = vector2d (начало координат)
           size = vector2d (размер фрейма)
           src = string (гиперссылка на содержимое фрейма)

Элемент vmlframe определяет фрейм в окне обозревателя. Содержимое фрейма задается атрибутом src, который должен содержать гиперссылку. Гиперссылка может быть либо закладкой, указывающей на объект, содержащийся в текущем HTML-документе, либо указателем на внешний файл. В последнем случае внешний файл должен быть XML-файлом, например:

<v:vmlframe src="ext.vml#img01"
  style='position:relative; top:0; left:0; width:50; height:50'>
/>

EXT.VML:

<xml xmlns:v = "urn:schemas-microsoft-com:vml">
<v:image id="img01" src="photo.jpg"
  style='height:100; width:100; top:50; left:50'
/>
</xml>

Способ отображения объекта во фрейме задается атрибутом clip. Если clip равно true, то объект отображается без масштабирования, а его части, выходящие за пределы фрейма обрезаются. В этом случае начало координат задается атрибутом origin, а размер фрейма атрибутом size. Если же clip равно false, то производится масштабирование объекта так, чтобы он целиком поместился во фрейм. В этом случае атрибуты origin и size игнорируются. По умолчанию clip равно false.В следующем примере мы сначала рисуем овал, а затем отображаем его в двух фреймах: первый раз с обрезкой, второй раз с масштабированием.

<!-- исходная фигура -->
<v:oval id="oval01"
   style='width:100pt; height:50pt'
   fillcolor="green" strokecolor="red" strokeweight="2pt"
/>
<!-- фрейм с обрезкой -->
<v:vmlframe src="#oval01" clip="true" size="50pt,50pt" origin="0,0"
  style='border:2pt solid; width:50pt; height:50pt'
/>
<!-- фрейм с масштабированием -->
<v:vmlframe src="#oval01" clip="false"
  style='border:2pt solid; width:50pt; height:50pt'
/>

10.2.5. Фон: элемент background

Синтаксис: <v:background>…</v:background>
Атрибуты:  id
           fillcolor = цвет (цвет заливки фигуры)
           filled = boolean (заливка цветом)

Элемент background предназначен для заливки фона страницы. Атрибуты filled и fillcolor задают заливку фона и имеют тот же смысл, что в элементе shape. Кроме того, этот элемент может содержать подэлемент fill, задающий более сложные варианты заливки. Пример:

<v:background fillcolor="red">
  <v:fill type="gradient" />
</v:background>


WDH: VML - Графические примитивы

Глава 10.3. Графические примитивы

Графические примитивы — это конкретные фигуры, чаще всего употребляющиеся при рисовании. Они имеют все атрибуты элемента shape, за исключением атрибута type. При этом атрибуты shape, не имеющие смысла для данного примитива, игнорируются. Кроме того, каждый из графических примитивов имеет собственные атрибуты в зависимости от создаваемой им фигуры. Графические примитивы могут содержать те же внутренние элементы, что и элемент shape.

10.3.1. Отрезки: элемент line

Синтаксис: <v:line>…</v:line>
Стили:     flip, left, position, rotation, top, visibility, z-index
Атрибуты:  id, class, style, title, alt, href, target, coordsize, coordorigin
           from = vector2d (начальная точка)
           strokecolor = цвет (цвет линии)
           stroked = boolean (вывод линии)
           strokeweight = размер (толщина линии)
           to = vector2d (конечная точка)

Элемент line выводит отрезок прямой. Начальная и конечная точка отрезка задаются соответственно атрибутами from и to, а цвет и толщина линии — атрибутами strokecolor и strokeweight. Пример:

<v:line style='position:relative; left:3em; top:0'
   strokecolor="red" strokeweight="2px" from="0 0" to="100 0"
/>

10.3.2. Ломаные: элемент polyline

Синтаксис: <v:polyline>…</v:polyline>
Стили:     flip, left, position, rotation, top, visibility, z-index
Атрибуты:  id, class, style, title, alt, href, target, coordsize, coordorigin
           fillcolor = цвет (цвет заливки)
           filled = boolean (заливка цветом)
           points = string (массив координат ломаной)
           strokecolor = цвет (цвет линии)
           stroked = boolean (вывод линии)
           strokeweight = размер (толщина линии)

Элемент polyline выводит ломаную, т. е. серию соединенных отрезков. Координаты точек задаются атрибутом points, который имеет вид "x1 y1 … xN yN", а цвет и толщина линий — атрибутами strokecolor и strokeweight. Если задан атрибут fillcolor, то производится заливка полученной фигуры. Пример:

<v:polyline style='position:relative; left:3em; top:0' fillcolor="blue"
  strokecolor="red" strokeweight="2px" points="0 0 20 20 40 0 60 20"
/>

10.3.3. Кривые Безье: элемент curve

Синтаксис: <v:curve>…</v:curve>
Стили:     flip, left, position, rotation, top, visibility, z-index
Атрибуты:  id, class, style, title, alt, href, target, coordsize, coordorigin
           control1 = vector2d (первая управляющая точка)
           control2 = vector2d (вторая управляющая точка)
           fillcolor = цвет (цвет заливки)
           filled = boolean (заливка цветом)
           from = vector2d (начальная точка)
           strokecolor = цвет (цвет линии)
           stroked = boolean (вывод линии)
           strokeweight = размер (толщина линии)
           to = vector2d (конечная точка)

Элемент curve выводит кубическую кривую Безье. Кривая задается четырьмя точками from, control1, control2 и to. Цвет и толщина линии задаются атрибутами strokecolor и strokeweight. Если задан атрибут fillcolor, то производится заливка полученной фигуры. Пример:

<v:curve style='position:relative; left:3em; top:0'
  fillcolor="blue" strokecolor="red" strokeweight="2px"
  from="10pt,10pt" to="100pt,10pt" control1="40pt,30pt" control2="70pt,30pt"
/>

10.3.4. Прямоугольники: элемент rect

Синтаксис: <v:rect>…</v:rect>
Стили:     flip, height, left, margin-bottom, margin-left, margin-right, margin-top,
           position, rotation, top, visibility, width, z-index
Атрибуты:  id, class, style, title, alt, href, target, coordsize, coordorigin
           fillcolor = цвет (цвет заливки фигуры)
           filled = boolean (заливка цветом)
           strokecolor = цвет (цвет рамки фигуры)
           stroked = boolean (вывод рамки фигуры)
           strokeweight = размер (ширина рамки фигуры)

Элемент rect выводит прямоугольник. Положение и размер прямоугольника задаются стилями CSS. Цвет и толщина рамки задаются атрибутами strokecolor и strokeweight. Если задан атрибут fillcolor, то производится заливка полученной фигуры. Пример:

<v:rect style='position:relative; left:3em; top:0; height:100px; width:100px'
  strokecolor="red" strokeweight="2px" fillcolor="blue"
/>

10.3.5. Прямоугольники со скругленными углами: элемент roundrect

Синтаксис: <v:roundrect>…</v:roundrect>
Стили:     flip, height, left, margin-bottom, margin-left, margin-right, margin-top,
           position, rotation, top, visibility, width, z-index
Атрибуты:  id, class, style, title, alt, href, target, coordsize, coordorigin
           arcsize = number (скругление)
           fillcolor = цвет (цвет заливки фигуры)
           filled = boolean (заливка цветом)
           strokecolor = цвет (цвет рамки фигуры)
           stroked = boolean (вывод рамки фигуры)
           strokeweight = размер (ширина рамки фигуры)

Элемент roundrect выводит прямоугольник со скругленными углами. Положение и размер прямоугольника задаются стилями CSS. Скругление улов задается атрибутом arcsize, который должен быть числом от 0 до 1 и понимается как процент от половины меньшей стороны прямоугольника. Если его значение равно 0, то углы будут квадратными, если он равен 1, то меньшая сторона образует полукруг. Цвет и толщина рамки задаются атрибутами strokecolor и strokeweight. Если задан атрибут fillcolor, то производится заливка полученной фигуры. Пример:

<v:roundrect style='position:relative; left:3em; top:0; height:50px; width:100px'
  strokecolor="red" strokeweight="2px" fillcolor="blue" arcsize="30%"
/>

10.3.6. Эллипсы: элемент oval

Синтаксис: <v:oval>…</v:oval>
Стили:     flip, height, left, margin-bottom, margin-left, margin-right, margin-top,
           position, rotation, top, visibility, width, z-index
Атрибуты:  id, class, style, title, alt, href, target, coordsize, coordorigin
           fillcolor = цвет (цвет заливки фигуры)
           filled = boolean (заливка цветом)
           strokecolor = цвет (цвет рамки фигуры)
           stroked = boolean (вывод рамки фигуры)
           strokeweight = размер (ширина рамки фигуры)

Элемент oval выводит эллипс. Положение и размер эллипса задаются стилями CSS. Цвет и толщина рамки задаются атрибутами strokecolor и strokeweight. Если задан атрибут fillcolor, то производится заливка полученной фигуры. Пример:

<v:oval style='position:relative; left:3em; top:0; height:50px; width:100px'
  strokecolor="red" strokeweight="2px" fillcolor="blue"
/>

10.3.7. Эллиптические дуги: элемент arc

Синтаксис: <v:arc>…</v:arc>
Стили:     flip, height, left, margin-bottom, margin-left, margin-right, margin-top,
           position, rotation, top, visibility, width, z-index
Атрибуты:  id, class, style, title, alt, href, target, coordsize, coordorigin
           endangle = number (конечный угол)
           fillcolor = цвет (цвет заливки фигуры)
           filled = boolean (заливка цветом)
           startangle = number (начальный угол)
           strokecolor = цвет (цвет рамки фигуры)
           stroked = boolean (вывод рамки фигуры)
           strokeweight = размер (ширина рамки фигуры)

Элемент arc выводит дугу эллипса. Положение и размер эллипса задаются стилями CSS, а начало и конец дуги задаются атрибутами startangle и endangle. Цвет и толщина рамки задаются атрибутами strokecolor и strokeweight. Если задан атрибут fillcolor, то производится заливка полученной фигуры. Пример:

<v:arc style='position:relative; left:3em; top:0; height:50px; width:100px'
  strokecolor="red" strokeweight="2px" fillcolor="blue" startangle="-90" endangle="90"
/>

10.3.8. Внешние графические образы: элемент image

Синтаксис: <v:image>…</v:image>
Стили:     flip, height, left, margin-bottom, margin-left, margin-right, margin-top,
           position, rotation, top, visibility, width, z-index
Атрибуты:  id, class, style, title, alt, href, target, coordsize, coordorigin
           bilevel = boolean (черно-белое изображение)
           blacklevel = number (интенсивность черного цвета)
           chromakey = цвет (прозрачный цвет)
           cropbottom = number (обрезка снизу)
           cropleft = number (обрезка слева)
           cropright = number (обрезка справа)
           croptop = number (обрезка сверху)
           fillcolor = цвет (цвет заливки фигуры)
           filled = boolean (заливка цветом)
           gain = number (интенсивность белого цвета)
           gamma = number (контрастность)
           grayscale = boolean (изображение в серой гамме)
           src = string (гиперссылка на графический файл)
           strokecolor = цвет (цвет рамки фигуры)
           stroked = boolean (вывод рамки фигуры)
           strokeweight = размер (ширина рамки фигуры)

Элемент image выводит графический образ из внешнего графического файла, заданного атрибутом src. Положение и размер образа задаются стилями CSS. Цвет и толщина рамки задаются атрибутами strokecolor и strokeweight (stroked должно быть установлено в true). Если filled равно true и задан атрибут fillcolor, то прозрачные точки заливаются заданным цветом. Пример:

<v:image style='position:relative; left:3em; top:0; height:50px; width:35px'
  src="images/leaf.gif"
/>

Остальные атрибуты имеют следующее назначение.

  • Если bilevel равно true, то изображение преобразуется в черно-белое.
  • Атрибут blacklevel задает интенсивность черного цвета. По умолчанию он равен 0. Значение -0.5 преобразует все цвета в черный, а значение +0.5 в белый.
  • Атрибут chromakey указывает, какой цвет должен считаться прозрачным.
  • Атрибуты cropbottom, cropleft, cropright и croptop принимают значение от -1 до 1 и по умолчанию равны 0. Положительные значения этих атрибутов означают обрезку соответствующего процента изображения снизу, слева, справа или сверху. Отрицательные значения сжимают изображение, добавляя к нему пустое пространство соответствующего размера.
  • Атрибут gain управляет яркостью белого цвета в диапазоне от 0 до бесконечности. По умолчанию он равен 1; значения, меньшие 1, делают изображение более серым, а большие 1 — более светлым.
  • Атрибут gamma управляет контрастностью изображения в диапазоне от 0 до бесконечности. По умолчанию он равен 0; значения, меньшие 1, повышают контрастность, а большие 1 ее понижают. Осмысленные значения этого атрибута варьируются от 0.3 до 3.
  • Если grayscale равно true, то изображение преобразуется в серую гамму.


WDH: VML - Вспомогательные элементы

Глава 10.4. Вспомогательные элементы

Описанные в этой главе элементы VML употребляются внутри элементов shape, shapetype и графических примитивов и определяют их графическое содержимое.

10.4.1. Форма фигуры: элемент path

Синтаксис: <v:path>…</v:path>
Атрибуты:  id
           arrowok = boolean (вывод стрелок)
           fillok = boolean (заливка фигуры)
           gradientshapeok = boolean (градиентная заливка)
           limo = vector2d (точка вытягивания фигуры)
           shadowok = boolean (вывод тени)
           strokeok = boolean (вывод рамки)
           textboxrect = string (текстовый прямоугольник)
           textpathok = boolean (вывод текста)
           v = string (форма фигуры)

Элемент path может употребляться в элементах shape и shapetype для задания формы фигуры. Форма фигуры задается атрибутом v, который эквивалентен атрибуту path базовых элементов. Этот атрибут является строкой, содержащей следующие команды движения пера по экрану (cpx и cpy обозначают координаты текущей точки):

Команда | Название | Параметры | Описание
m | moveto | 2 | Начинает новый подпуть с заданной точки (x,y).
l | lineto | 2* | Рисует отрезок от текущей точки до заданной точки (x,y), которая становится новой текущей точкой. Может содержать несколько пар (x,y), задавая рисование ломаной.
c | curveto | 6* | Рисует кубическую кривую Безье от текущей точки. Параметры имеют вид: первая управляющая точка, вторая управляющая точка, конечная точка. Конечная точка становится новой текущей точкой.
x | close | 0 | Замыкает текущий подпуть, проводя отрезок из текущей точки в начальную точку, заданную командой moveto.
e | end | 0 | Заканчивает текущий набор подпутей и заливает его. Последующие наборы подпутей заливаются независимо от данного.
t | rmoveto | 2* | Начинает новый подпуть с точки (cpx+x,cpy+y).
r | rlineto | 2* | Рисует отрезок от текущей точки до точки (cpx+x,cpy+y), которая становится новой текущей точкой. Может содержать несколько пар относительных координат, задавая рисование ломаной.
v | rcurveto | 6* | Рисует кубическую кривую Безье от текущей точки. Параметры задают координаты относительно (cpx,cpy).
nf | nofill | 0 | Текущий набор путей не будет заливаться.
ns | nostroke | 0 | Текущий набор путей не будет иметь рамки.
ae | angleellipseto | 6* | Рисует сегмент эллипса. Параметры имеют вид: центр (x,y), ширина, высота, начальный угол, конечный угол. Из текущей точки в начальную точку сегмента проводится отрезок.
al | angleellipse | 6* | То же, что angleellipseto, но без рисования отрезка.
at | arcto | 8* | Рисует дугу эллипса. Первые четыре параметра задают описанный прямоугольник эллипса, а вторые четыре — начальный и конечный радиальные вектора. Из текущей точки в начальную точку дуги проводится отрезок. Дуга рисуется против часовой стрелки.
ar | arc | 8* | То же, что arcto, но без рисования отрезка.
wa | clockwisearcto | 8* | То же, что arcto, но дуга рисуется по часовой стрелке.
wr | clockwisearc | 8* | То же, что arc, но дуга рисуется по часовой стрелке.
qx | ellipticalqaudrantx | 2* | Рисует квадрант эллипса из текущей точки в заданную, начиная с горизонтального направления.
qy | ellipticalquadranty | 2* | Рисует квадрант эллипса из текущей точки в заданную, начиная с вертикального направления.
qb | quadraticbezier | 2+2* | Определяет одну или несколько квадратичных кривых Безье. Параметры имеют вид: управляющая точка*, конечная точка. Промежуточные точки на кривой получаются интерполяцией между управляющими точками, как в спецификации шрифтов OpenType.

Параметры могут отделяться пробелами или запятыми. Пример:

<v:shape coordorigin="0 0" coordsize="200 200"  fillcolor="green"
  strokecolor="red" style='position:relative; left:3em; top:0; width:50; height:50'>
  <v:path v="m 1,1 l 1,200, 200,200, 200,1 x e"/>
</v:shape>

Опишем назначение остальных атрибутов.

  • Если arrowok равно true и рамка имеет стрелки, то стрелки будут рисоваться. Этот атрибут перекрывает все атрибуты, связанные со стрелками, в родительском элементе и элементе stroke. По умолчанию он равен false. Пример:
    • <v:line from="40 0" to="200 0" strokecolor="black">
  <v:stroke startarrow="block" endarrow="block"/>
  <v:path arrowok="true"/>
</v:line>
  • Если fillok равно false, то заливка фигуры не производится. Этот атрибут перекрывает все атрибуты, связанные с заливкой, в родительском элементе и элементе fill. По умолчанию он равен true.
  • Если gradientshapeok равно true, то производится концентрическая градиентная заливка фигуры. По умолчанию этот атрибут равен false. Он имеет смысл только для элемента fill, имеющего type, равный gradientradial. Пример:
    • <v:rect strokecolor="red"
  style='position:relative; top:0; left:3em; width:50; height:50'>
  <v:fill type="gradientradial" color="blue" color2="yellow"/>
  <v:path gradientshapeok="true"/>
</v:rect>
  • Атрибут limo определяет точку вытягивания на границе фигуры; по умолчанию он равен (0, 0). Точка вытягивания указывает, где и как пользователь может вытягивать фигуру в графическом редакторе.
  • Если shadowok равно true и фигура имеет тень, то тень выводится. Этот атрибут перекрывает все атрибуты, связанные с тенью, в родительском элементе и элементе shadow. По умолчанию он равен true. Пример:
    • <v:rect strokecolor="red" fillcolor="green"
  style='position:relative; top:0; left:3em; width:50; height:50'>
  <v:shadow on="true" offset="5pt,5pt" color="blue"/>
  <v:path shadowok="true"/>
 </v:rect>
  • Если strokeok равно true, то будет рисоваться рамка фигуры. Этот атрибут перекрывает все атрибуты, связанные с рамкой, в родительском элементе и элементе stroke. По умолчанию он равен true.
  • Атрибут textboxrect определяет текстовые прямоугольники для использования элементом textbox. Каждый прямоугольник задается четырьмя координатами; определения прямоугольников разделяются точкой с запятой.
    • <v:shape strokecolor="red" coordorigin="0 0" coordsize="200 200"
  style='position:relative; top:0; left:3em; width:50; height:50'>
  <v:path v="m 1,1 l 1,200, 200,200, 200,1 x e" textboxrect="10 70 190 190"/>
  <v:textbox>VML</v:textbox>
</v:shape>
    VML
  • Если textpathok равно true и родительский элемент содержит textpath, то он будет рисоваться. По умолчанию этот атрибут равен false.

10.4.2. Формулы: элемент formulas

Синтаксис: <v:formulas>…</v:formulas>

Элемент formulas может употребляться в элементах shape и shapetype для задания формул. Он не имеет атрибутов и состоит из набора подэлементов вида <v:f eqn="operation v p1 p2"/>. Каждый такой подэлемент задает одну формулу, которая состоит из названия операции и аргументов (от 1 до 3), которые принято обозначать v, p1 и p2.

Операция | Параметры | Результат | Описание
val | 1 | v | Определяет одно значение через другое.
sum | 3 | v + p1 - p2 | Используется для сложения и вычитания.
product | 3 | v * p1 / p2 | Используется для умножения и деления.
mid | 2 | (v + p1) / 2 | Среднее значение.
abs | 1 | abs(v) | Абсолютное значение.
min | 2 | min(v, p1) | Наименьшее из двух чисел.
max | 2 | max(v, p1) | Наибольшее из двух чисел.
if | 3 | v > 0 ? p1 : p2 | Проверка условия.
mod | 3 | sqrt(v^2 + p1^2 + p2^2) | Длина вектора.
atan2 | 2 | atan2(p1, v) | Полярный угол. Результат в градусах·216.
sin | 2 | v * sin(p1) | Синус, аргумент в градусах·216.
cos | 2 | v * cos(p1) | Косинус, аргумент в градусах·216.
cosatan2 | 3 | v * cos(atan2(p2, p1) | Операция с повышенной точностью в промежуточных вычислениях.
sinatan2 | 3 | v * sin(atan2(p2, p1) | Операция с повышенной точностью в промежуточных вычислениях.
sqrt | 1 | sqrt(v) | Положительное значение квадратного корня.
sumangle | 3 | v + p1*216 + p2*216 | v — угол в градусах (умноженный на 216), p1 и p2 — углы в градусах.
ellipse | 3 | p2 * sqrt(1-(v/p1)^2) | Эллипс.
tan | 2 | v * tan(p1) | Тангенс, аргумент в градусах·216.

Результатом вычисления формулы всегда является 32-битовое целое число. Аргументами формул могут быть либо целые числа в диапазоне от 0 до 65535 (т. е. беззнаковые 16-битовые числа), либо результаты предыдущих формул, либо выравнивающие значения, заданные в атрибуте adj элемента shape, либо предопределенные константы. Синтаксис аргументов следует следующим правилам:

Аргумент | Описание
@n | Значение формулы n, где n должно быть меньше номера текущей формулы, считая с 0. Общее число формул в элементе не более 128.
#n | Выравнивающее значение n, где n должно быть числом от 0 до 7.
width | Ширина, заданная атрибутом coordsize.
height | Высота, заданная атрибутом coordsize.
xcenter | Абсцисса центра локальных координат, coordorigin.x + coordsize.w/2.
ycenter | Ордината центра локальных координат, coordorigin.y + coordsize.h/2.
xlimo | Абсцисса атрибута limo.
ylimo | Ордината атрибута limo.
hasstroke | 1, если образ имеет рамку, и 0 в противном случае. (Значение атрибута on элемента stroke.)
hasfill | 1, если образ имеет заливку, и 0 в противном случае. (Значение атрибута on элемента fill.)
pixellinewidth | Толщина линии в пикселях.
pixelwidth | Ширина фигуры в пикселях.
pixelheight | Высота фигуры в пикселях.
emuwidth | Ширина coordsize в EMU.
emuheight | Высота coordsize в EMU.
emuwidth2 | Половина ширины coordsize в EMU.
emuheight2 | Половина высоты coordsize в EMU.

Здесь EMU (English Metrical Unit) — наименьшая единица измерения, используемая в VML для внутреннего хранения данных. Она определяется так: 1 сантиметр = 360000 EMU.

Пример использования формул:

<v:shape style='position:relative; top:0; left:3em; width:1in; height:1in'
  strokecolor="red" strokeweight="2pt" coordsize="21600,21600" adj="17520"
  path="m 10800,0 qx 0,10800, 10800,21600, 21600,10800, 10800,0 x e
        m 7340,6445 qx 6215,7570, 7340,8695, 8465,7570, 7340,6445 x nf e
        m 14260,6445 qx 13135,7570, 14260,8695, 15385,7570, 14260,6445 x nf e
        m 4960,@0 c 8853,@3, 12747,@3, 16640,@0 nf e">
  <v:formulas>
    <v:f eqn="sum 33030 0 #0"/>
    <v:f eqn="prod #0 4 3"/>
    <v:f eqn="prod @0 1 3"/>
    <v:f eqn="sum @1 0 @2"/>
  </v:formulas>
</v:shape>

10.4.3. Настройки: элемент handles

Синтаксис: <v:handles>…</v:handles>

Элемент handles может употребляться в элементах shape и shapetype для задания пользовательских настроек. Точнее говоря, он позволяет определить несколько участков фигуры, за которые пользователь может потянуть в графическом редакторе, чтобы изменить значения атрибута adj. Этот элемент не имеет атрибутов и состоит из набора подэлементов h (от одного до четырех), каждый из которых описывает один участок настройки.

Синтаксис: <v:h/>
Атрибуты:  invx = boolean (инвертировать абсциссу)
           invy = boolean (инвертировать ординату)
           map = vector2d (область отображения)
           polar = vector2d (центр полярных координат)
           position = vector2d (координаты настройки)
           radiusrange = vector2d (диапазон полярного радиуса)
           switch = boolean (обмен координат)
           xrange = vector2d (диапазон абсцисс)
           yrange = vector2d (диапазон ординат)

Опишем подробно назначение этих атрибутов.

Атрибут | Тип | По умолчанию | Описание
position | vector2d | 0, 0 | Позиция настройки (x,y). Значения могут быть константами, формулами, выравнивающими значениями или ключевыми словами center, topleft, bottomright. Если значение задано константой, формулой или ключевым словом, то позиция настройки в данном измерении фиксирована. Если же значение задано выравнивающим значением (например, #2), то настройка может двигаться в данном измерении, и соответствующее настроечное значение определяется позицией настройки. Если задан атрибут polar, то данный атрибут содержит радиус и угол вместо x и y.
polar | vector2d |  | Этот атрибут указывает, что настройка имеет полярные координаты и задает их центр.
map | vector2d | 0, 1000 | Позиция (x,y) настройки отображается из диапазона coordsize в данный диапазон.
invx | boolean | false | Позиция настройки по оси x инвертируется, т. е. x = coordorigin.x + coordsize.x - x.
invy | boolean | false | Позиция настройки по оси y инвертируется, т. е. y = coordorigin.y + coordsize.y - y.
switch | boolean | false | Если высота фигуры больше ее ширины, то координаты (x,y) позиции настройки меняются местами. Это полезно для фигур, имеющих атрибут limo.
xrange | vector2d | 0,0 | Диапазон значений, в которых может меняться настройка по оси x. Каждое значение может быть константой или формулой. Если значение опущено, то настройка может двигаться в данном направлении без ограничений.
yrange | vector2d | 0,0 | Диапазон значений, в которых может меняться настройка по оси y. Каждое значение может быть константой или формулой. Если значение опущено, то настройка может двигаться в данном направлении без ограничений.
radiusrange | vector2d | 0,0 | Диапазон значений, в которых может меняться радиус настройки. Каждое значение может быть константой или формулой. Если значение опущено, то настройка может двигаться в данном направлении без ограничений. Этот атрибут имеет смысл только при заданном атрибуте polar.

Пример использования настроек:

<v:shape style='position:relative; top:0; left:3em; width:90pt; height:54pt'
  strokecolor="red" strokeweight="2pt" coordsize="21600,21600" adj="16200,5400"
  path="m @0,0 l @0,@1, 0,@1, 0,@2, @0,@2, @0,21600, 21600,10800 x e">
  <v:formulas>
     <v:f eqn="val #0"/>
     <v:f eqn="val #1"/>
     <v:f eqn="sum height 0 #1"/>
     <v:f eqn="sum 10800 0 #1"/>
     <v:f eqn="sum width 0 #0"/>
     <v:f eqn="prod @4 @3 10800"/>
     <v:f eqn="sum width 0 @5"/>
   </v:formulas>
   <v:handles>
     <v:h position="#0,#1" xrange="0,21600" yrange="0,10800"/>
   </v:handles>
</v:shape>

10.4.4. Заливка фигуры: элемент fill

Синтаксис: <v:fill>…</v:fill>
Атрибуты:  id
           alignshape = boolean (выравнивание заливки)
           angle = number (угол градиентной заливки)
           aspect = string (сохранение пропорций)
           color = цвет (цвет заливки)
           color2 = цвет (второй цвет заливки)
           colors = string (массив цветов для градиентной заливки)
           focus = number (центр линейной градиентной заливки)
           focusposition = vector2d (центр радиальной градиентной заливки)
           focussize = vector2d (размер фокуса радиальной градиентной заливки)
           method = string (метод градиентной заливки)
           on = boolean (вывод заливки)
           opacity = number (прозрачность цвета заливки)
           origin = vector2d (центр образа заливки)
           position = vector2d (позиция образа заливки)
           size = vector2d (размер образа заливки)
           src = string (гиперссылка на графический файл)
           type = string (тип заливки)

Элемент fill может употребляться в элементах shape, shapetype, background и большинстве графических примитивов для задания заливки фигуры. Тип заливки задается атрибутом type, который может принимать следующие значения:

Значение | Описание | Пример
solid | Сплошная заливка цветом. Принято по умолчанию. |
gradient | Линейная градиентная заливка. |
gradientradial | Радиальная градиентная заливка. |
tile | Заполнение фигуры изображением. |
pattern | Заполнение изображением с учетом цветов заливки. |
frame | Изображение растягивается для заполнения фигуры. |

Все типы заливки делятся на три группы: сплошная заливка (solid), градиентная заливка (gradient и gradientradial) и заливка изображением (tile, pattern и frame). Атрибуты, определяющие заливку, соответственно можно также разбить на три группы: общие для всех типов, относящиеся к градиентной заливке и относящиеся к заливке изображением.

Общими атрибутами являются:

Атрибут | Тип | По умолчанию | Описание
on | boolean | true | Разрешает или запрещает вывод заливки. Этот атрибут перекрывает атрибут filled родительского элемента.
color | цвет | "white" | Основной цвет заливки. Этот атрибут перекрывает атрибут fillcolor родительского элемента.
opacity | number | 1.0 | Прозрачность заливки в диапазоне от 0 до 1.
color2 | цвет | "white" | Второй цвет заливки. Имеет смысл для градиентной заливки и для типа pattern.

Атрибуты градиентной заливки:

Атрибут | Тип | По умолчанию | Описание
colors | string | null | Массив промежуточных цветов заливки и их относительные позиций вдоль градиента, например "30% red, 70% blue, 90% green". Цвет color соответствует 0%, color2 соответствует 100%.
angle | number | 0 | Угол градиента. 0 соответствует горизонтали слева направо, положительные углы отсчитываются против часовой стрелки.
focus | number | 0 | Центр линейной заливки в диапазоне от -100% до 100%. Значение 100% (или -100%) меняет местами color и color2, значение 50% означает цвет color на обоих концах и color2 в середине, а значение -50% означает цвет color2 на обоих концах и color в середине.
focusposition | vector2d | 0,0 | Центр фокуса радиальной заливки в процентах от ширины и высоты фигуры. 50%,50% соответствуют центру фигуры.
focussize | vector2d | 0,0 | Размер фокуса радиальной заливки в процентах от ширины и высоты фигуры.
method | string | "sigma" | Способ генерации градиентной заливки. Принимает значения "none", "linear", "sigma" и "any".

Атрибуты заливки изображением:

Атрибут | Тип | По умолчанию | Описание
src | string | null | Гиперссылка на графический файл, содержащий изображение.
size | vector2d | фактический размер | Размер изображения.
origin | vector2d | центр изображения | Центр изображения относительно его верхнего левого угла в процентах от его размеров.
position | vector2d | центр фигуры | Позиция изображения внутри фигуры в процентах от его размеров.
aspect | string | "ignore" | Сохранение пропорций изображения. Принимает значения "ignore" (игнорировать пропорции), "atleast" (изображение не меньше, чем size) и "atmost" (изображение не больше, чем size).
alignshape | boolean | true | true означает выравнивание изображения вдоль фигуры, false — выравнивание вдоль окна.


WDH: VML - Вспомогательные элементы (продолжение)

Глава 10.5. Вспомогательные элементы (продолжение)

10.5.1. Рамка фигуры: элемент stroke

Синтаксис: <v:stroke>…</v:stroke>
Атрибуты:  id
           color = цвет (цвет рамки)
           color2 = цвет (второй цвет рамки)
           dashstyle = string (стиль линии рамки)
           endarrow = string (начальная стрелка)
           endarrowlength = string (длина начальной стрелки)
           endarrowwidth = string (толщина начальной стрелки)
           endcap = string (форма конца отрезков)
           fill = string (тип заливки)
           imagealignshape = boolean (выравнивание изображения при заливке)
           imageaspect = string (сохранение пропорций изображения)
           imagesize = vector2d (размер изображения заливки)
           joinstyle = string (способ соединения отрезков рамки)
           linestyle = string (тип линии рамки)
           miterlimit = number (сглаживание соединений отрезков)
           on = boolean (вывод рамки)
           opacity = number (прозрачность рамки)
           src = string (гиперссылка на графический файл)
           startarrow = string (конечная стрелка)
           startarrowlength = string (длина конечной стрелки)
           startarrowwidth = string (толщина конечной стрелки)
           weight = number (толщина рамки)

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

Атрибут | Тип | По умолчанию | Описание
on | boolean | true | Разрешает или запрещает вывод рамки. Этот атрибут перекрывает атрибут stroked родительского элемента.
weight | number | 1pt | Толщина рамки. Этот атрибут перекрывает атрибут strokeweight родительского элемента.
color | цвет | "black" | Цвет рамки. Этот атрибут перекрывает атрибут strokecolor родительского элемента.
opacity | number | 1.0 | Прозрачность рамки в диапазоне от 0 до 1.
linestyle | string | "single" | Тип линии рамки. Возможные значения: "single" (одна обычная линия), "thinthin" (две тонкие линии), "thinthick" (тонкая и жирная линии), "thickthin" (жирная и тонкая линии), "thickbetweenthin" (жирная линия между двух тонких).
joinstyle | string | "round" | Способ соединения отрезков рамки. Возможные значения: "round" (скругленное соединение), "bevel" (косоугольное соединение), "miter" (соединение в ус).
miterlimit | number | 8.0 | Максимальное расстояние между внутренней и внешней точками соединения отрезков. Имеет смысл, когда joinstyle равно "miter".
endcap | string | "round" | Форма концов отрезков рамки. Возможные значения: "flat" (плоские), "square" (квадратные), "round" (скругленные).
dashstyle | string | "solid" | Стиль линии рамки. Возможные значения: "solid" (сплошная), "dot" (пунктир), "dash" (штрих), "dashdot" (штрих-пунктир), "longdash" (длинный штрих), "longdashdot" (длинный штрих-пунктир), "longdashdotdot" (длинный штрих-пунктир-пунктир), "shortdash" (короткий штрих), "shortdashdot" (короткий штрих-пунктир), "shortdashdotdot" (короткий штрих-пунктир-пунктир). Возможно также задание собственных стилей, описанное ниже.
startarrow, endarrow | string | "none" | Форма стрелок в начале и конце линии. Возможные значения: "none" (нет стрелки), "block" (блочная), "classic" (классическая), "diamond" (ромбическая), "oval" (овальная), "open" (линейная).
startarrowlength, endarrowlength | string | "medium" | Длина стрелок в начале и конце линии. Возможные значения: "short" (короткая), "medium" (средняя), "long" (длинная).
startarrowwidth, endarrowwidth | string | "medium" | Толщина стрелок в начале и конце линии. Возможные значения: "narrow" (узкая), "medium" (средняя), "wide" (широкая).
filltype | string | "solid" | Тип заливки рамки. Возможные значения: "solid", "tile", "pattern", "frame" (см. атрибут type элемента fill).
src | string | null | Гиперссылка на графический файл, содержащий изображение заливки.
imagesize | vector2d | фактический размер | Размер изображения заливки (см. атрибут size элемента fill).
imageaspect | string | "ignore" | Сохранение пропорций изображения (см. атрибут aspect элемента fill).
imagealignshape | boolean | true | Выравнивание изображения заливки (см. атрибут alignshape элемента fill).
color2 | цвет | null | Второй цвет заливки. Имеет смысл для типа заливки pattern.

При желании мы можем определить свой стиль рамки. Пользовательские стили задаются как наборы пар чисел; первое число определяет длину штриха, а второе — длину пробела после него. Все длины задаются относительно толщины линии рамки. Штрих длины 0 означает точку. К каждому штриху и точке применяется атрибут endcap. Приведем пример:

<v:rect style='position:relative; left:3em; top:0; height:100px; width:100px'
  strokecolor="black" strokeweight="3pt">
  <v:stroke endcap="flat" dashstyle="2 2 0 2"/>
</v:rect>

10.5.2. Тени: элемент shadow

Синтаксис: <v:shadow/>
Атрибуты:  id
           color = цвет (цвет тени)
           color2 = цвет (второй цвет тени)
           matrix = string (преобразование тени)
           obscured = boolean (дымка тени)
           offset = vector2d (смещение тени)
           offset2 = vector2d (второе смещение тени)
           on = boolean (вывод тени)
           opacity = number (прозрачность тени)
           origin = vector2d (центр тени)
           type = string (тип тени)

Элемент shadow может употребляться в элементах shape, shapetype и большинстве графических примитивов для задания тени фигуры. Он имеет следующие атрибуты:

Атрибут | Тип | По умолчанию | Описание
on | boolean | false | Разрешает или запрещает вывод тени.
type | string | "single" | Тип тени. Возможные значения: "single" (одинарная), "double" (двойная), "emboss" (рельефная), "perspective" (перспективная).
obscured | boolean | false | Если true, то фигура видна сквозь тень (если нет заливки).
color | цвет | rgb(128,128,128) | Основной цвет тени.
color2 | цвет | rgb(203,203,203) | Второй цвет тени или высвечивание для рельефной тени.
opacity | number | 1.0 | Прозрачность тени в диапазоне от 0 до 1.
offset | vector2d | 2pt,2pt | Смещение тени от фигуры в абсолютных единицах или в процентах от ширины и высоты фигуры (от -0.5 до 0.5).
offset2 | vector2d | 0,0 | Второе смещение тени от фигуры в абсолютных единицах или в процентах от ширины и высоты фигуры (от -0.5 до 0.5).
origin | vector2d | 0,0 | Центр тени относительно фигуры в процентах от ширины и высоты фигуры (от -0.5 до 0.5).
matrix | string | null | Матрица преобразования перспективной тени вида "sxx,sxy,syx,syy,px,py", где s=scale (масштаб), p=perspective (перспектива). Если offset задан в абсолютных единицах, то px и py задаются в 1/EMU; в противном случае они являются обратными дробями от размера фигуры.

Примеры теней всех четырех типов:

single | double | emboss | perspective

10.5.3. Искажение фигуры: элемент skew

Синтаксис: <v:skew/>
Атрибуты:  id
           matrix = string (матрица преобразования фигуры)
           offset = vector2d (смещение преобразования от фигуры)
           on = boolean (вывод рамки)
           origin = vector2d (начальная точка преобразования)

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

Атрибут | Тип | По умолчанию | Описание
on | boolean | false | Разрешает или запрещает вывод преобразования.
offset | vector2d | 2pt,2pt | Смещение преобразования от фигуры в абсолютных единицах или в процентах от ширины и высоты фигуры (от -0.5 до 0.5).
origin | vector2d | 0,0 | Начальная точка преобразования относительно фигуры в процентах от ширины и высоты фигуры (от -0.5 до 0.5).
matrix | string | null | Матрица перспективного преобразования вида "sxx,sxy,syx,syy,px,py", где s=scale (масштаб), p=perspective (перспектива). Если offset задан в абсолютных единицах, то px и py задаются в 1/EMU; в противном случае они являются обратными дробями от размера фигуры.

Пример искажения прямоугольника:

<v:rect style='position:relative; left:3em; top:0; height:50px; width:50px'>
  <v:skew on="true" matrix="1,-0.5,0,0.75,0,0"/>
</v:rect>

10.5.4. Внешние графические образы: элемент imagedata

Синтаксис: <v:imagedata/>
Атрибуты:  id
           bilevel = boolean (черно-белое изображение)
           blacklevel = number (интенсивность черного цвета)
           chromakey = цвет (прозрачный цвет)
           cropbottom = number (обрезка снизу)
           cropleft = number (обрезка слева)
           cropright = number (обрезка справа)
           croptop = number (обрезка сверху)
           gain = number (интенсивность белого цвета)
           gamma = number (контрастность)
           grayscale = boolean (изображение в серой гамме)
           src = string (гиперссылка на графический файл)

Элемент imagedata может употребляться в элементах shape, shapetype и графических примитивах для вывода графического образа из внешнего графического файла, заданного атрибутом src. Его атрибуты совпадают с атрибутами элемента image. Пример:

<v:rect style='position:relative; left:3em; top:0; height:60px; width:40px'
  strokecolor="blue" strokeweight="2pt">
  <v:imagedata src="images/leaf.gif" />
</v:rect>

10.5.5. Текст: элемент textbox

Синтаксис: <v:textbox>текст</v:textbox>
Атрибуты:  id, style
           inset = string (отступы от границ прямоугольника)

Элемент textbox выводит заданный текст в прямогольник, заданный атрибутом textboxrect элемента path. Расположение и формат текста задается стилями CSS. Кроме того, отступ текста от границ прямоугольника может быть задан атрибутом inset вида "x1,y1,x2,y2", который содержит отступы от левой, верхней, правой и нижней границ прямоугольника.

Если textboxrect не задан, то текст выводится в объемлющий прямоугольник фигуры. Пример:

<v:rect style='position:relative; left:3em; top:0; width:200px; height:30px'
  fillcolor="yellow">
  <v:textbox style="text-align: center">Это мой текст!</v:textbox>
</v:rect>
Это мой текст!

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

10.5.6. Фигурный текст: элемент textpath

Синтаксис: <v:textpath/>
Стили:     font-family, font-size, font-style, font-variant, font-weight, font,
           text-align, text-decoration, trim, v-rotate-letters, v-same-letter-heights,
           v-text-align, v-text-kern, v-text-reverse, v-text-spacing-mode,
           v-text-spacing, xscale
Атрибуты:  id
           fitpath = boolean (следовать форме фигуры)
           fitshape = boolean (заполнять всю фигуру)
           on = boolean (вывод текста)
           string = string (выводимый текст)

Элемент textpath может употребляться в элементах shape, shapetype и графических примитивах для вывода фигурного текста. Строка текста задается атрибутом string, стили отображения текста задаются свойствами CSS и собственными свойствами данного элемента, а именно:

Свойство | Тип | По умолчанию | Описание
trim | boolean | false | Если true, то неиспользованное пространство над и под текстом, выделенное для элементов букв, выступающих за пределы основного шрифта, освобождается.
v-rotate-letters | boolean | false | Если true, то буквы текста поворачиваются на 90°.
v-same-letter-heights | boolean | false | Если true, то строчные буквы вытягиваются до высоты прописных.
v-text-align | string | "left" | Выравнивание текста. Аналогично свойству text-align, но имеет два дополнительных значения: "letter-justify" (вытягивание промежутков между буквами) и "stretch-justify" (вытягивание букв).
v-text-kern | boolean | false | Если true, то включается кернинг текста, т. е. выравнивание промежутков между буквами разной ширины.
v-text-reverse | boolean | false | Если true, то строки выводятся в обратном порядке. Используется при вертикальном выводе теста.
v-text-spacing-mode | string | "tightening" | Режим вывода промежутков между буквами. Возможные значения: "tightening" (удаление промежутков) и "tracking" (добавление промежутков). Величина изменения промежутков задается свойством v-text-spacing.
v-text-spacing | number | 100 | Величина изменения промежутков между буквами в свойстве v-text-spacing-mode.
xscale | boolean | false | Если true, то текст выводится горизонтально вдоль нижнего края фигуры. По умолчанию, вывод текста следует форме фигуры.

Кроме того, данный элемент имеет следующие атрибуты:

Атрибут | Тип | По умолчанию | Описание
on | boolean | false | Разрешает или запрещает вывод текста.
fitpath | boolean | false | Если true, то вывод текста следует форме фигуры.
fitshape | boolean | false | Если true, то текст масштабируется так, чтобы заполнить всю фигуру.

Пример вывода фигурного текста:

<v:arc style='position:relative; left:3em; top:0; height:50px; width:200px'
  strokecolor="blue" strokeweight="1px" fillcolor="blue" startangle="-90" endangle="90">
  <v:path textpathok="true"/>
  <v:textpath on="true" string="Фигурный текст" style='v-text-align: letter-justify'/>
</v:arc>

10.5.7. Экструзия фигуры: элемент extrusion

Синтаксис: <v:extrusion/>
Атрибуты:  id
           autorotationcenter = boolean (геометрический центр экструзии)
           backdepth = number (глубина экструзии позади объекта)
           brightness = number (яркость сцены)
           color = цвет (цвет экструзии)
           colormode = string (цветовой режим)
           diffusity = number (рассеяние отраженного света)
           edge = number (скос углов экструзии)
           facet = number (число аппроксимирующих граней)
           foredepth = number (глубина экструзии перед объектом)
           lightface = boolean (реакция фаса на смену освещенности)
           lightharsh = boolean (размытость основного источника света)
           lightharsh2 = boolean (размытость вторичного источника света)
           lightlevel = number (интенсивность основного источника света)
           lightlevel2 = number (интенсивность вторичного источника света)
           lightposition = vector3d (положение основного источника света)
           lightposition2 = vector3d (положение вторичного источника света)
           lockrotationcenter = boolean (использовать угол вращения)
           metal = boolean (имитация металлической поверхности)
           on = boolean (вывод экструзии)
           orientation = vector3d (вектор вращения фигуры)
           orientationangle = number (угол вращения)
           plane = string (плоскость, перпендикулярная экструзии)
           render = string (режим отображения экструзии)
           rotationangle = vector2d (угол вращения по осям x и y)
           rotationcenter = vector3d (вектор вращения фигуры)
           shininess = number (концентрация отраженного света на поверхности экструзии)
           skewamt = number (величина наклона экструзии)
           skewangle = number (угол наклона экструзии)
           specularity = number (отражающая способность экструзии)
           type = string (тип проекции)
           viewpoint = vector3d (позиция наблюдателя)
           viewpointorigin = vector2d (позиция наблюдателя относительно фигуры)

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

Атрибут | Тип | По умолчанию | Описание
on | boolean | false | Разрешает или запрещает вывод экструзии.
type | string | "parallel" | Тип проекции. Возможные значения: "parallel" (параллельные проекция) и "perspective" (перспективная проекция).
render | string | "solid" | Режим отображения. Возможные значения: "solid" (заливка цветом), "wireframe" (проволочная рамка фигуры) и "boundingcube" (проволочная рамка объемлющего куба).
plane | string | "xy" | Плоскость, перпендикулярная экструзии. Возможные значения: "xy", "zx" и "yz".
backdepth | number | 36pt | Глубина экструзии позади объекта.
foredepth | number | 0 | Глубина экструзии перед объектом.
skewamt | number | 50% | Величина наклона экструзии в диапазоне от 0 до 100%. Имеет смысл только для параллельной проекции
skewangle | угол | 45deg | Угол наклона экструзии. Имеет смысл только для параллельной проекции
colormode | string | "auto" | Цветовой режим экструзии. Возможные значения: "auto" (использовать fillcolor фигуры) и "custom" (использовать color экструзии).
color | цвет | цвет заливки | Цвет экструзии. Используется, если colormode равен "custom".
edge | number | 1pt | Видимый скос углов экструзии.
facet | number | 30000 | Количество граней, аппроксимирующих поверхность экструзии.
brightness | number | 20000 | Общая яркость сцены.
diffusity | number | 0 | Степень рассеяния света, отраженного от поверхности экструзии. Обычно ее значение лежит между 0 и 1.
shininess | number | 5 | Концентрация отраженного света на поверхности экструзии. Типичные значения от 4 до 7. Большие значения (8 - 10) создают эффект зеркальной поверхности, а меньшие (2 - 3) — эффект неоднородной поверхности.
specularity | number | 0 | Отражающая способность поверхности экструзии. Обычно ее значение лежит между 0 и 1.
metal | boolean | false | Если true, то поверхность экструзии имитирует металлическую поверхность. Для большей достоверности рекомендуется увеличить specularity (примерно до 1.2) и уменьшить diffusity (примерно до 0.6).
lightface | boolean | true | Если false, то лицевая поверхность экструзии не реагирует на изменения освещенности.
lightharsh | boolean | true | Если false, то границы тени от основного источника света размываются.
lightharsh2 | boolean | true | Если false, то границы тени от вторичного источника света размываются.
lightlevel | number | 38000 | Интенсивность основного источника света.
lightlevel2 | number | 38000 | Интенсивность вторичного источника света.
lightposition | vector3d | 50000,0,10000 | Положение основного источника света.
lightposition2 | vector3d | -50000,0,10000 | Положение вторичного источника света.
viewpoint | vector3d | 0,0,0 | Положение наблюдателя.
viewpointorigin | vector2d | 0,0 | Положение наблюдателя в объемлющем прямоугольнике фигуры. Координаты меняются от -50% до 50%.
autorotationcenter | boolean | false | Если true, то центром вращения будет геометрический центр экструзии. По умолчанию, центр вращения задается атрибутом rotationcenter.
lockrotationcenter | boolean | true | Если true, то вращение задается атрибутом rotationangle. Если false, то вращение задается атрибутами orientation и orientationangle. Примечание: <v:extrusion lockrotationcenter="false" orientationangle="45" orientation="(0,1,0)"/> эквивалентно <v:extrusion lockrotationcenter="true" rotationangle="45"/>.
orientation | vector3d | 100,0,0 | Вектор, вокруг которого вращается фигура.
orientationangle | угол | 0 | Угол вращения фигуры вокруг вектора orientation.
rotationcenter | vector3d | 0,0,0 | Вектор, вокруг которого вращается фигура, в процентах от размера фигуры.
rotationangle | vector2d | 0, 0 | Угол вращения фигуры вокруг вектора rotationcenter по осям y и x. Угол вращения по оси z задается атрибутом стилей rotation.

Типичные примеры экструзии:

<v:oval fillcolor="lime" style="position:relative; top:0; left:3em; width:50; height:50">
  <v:extrusion on="true"/>
</v:oval>

<v:oval fillcolor="lime" style="position:relative; top:0; left:3em; width:50; height:50">
  <v:extrusion on="true" render="wireframe"/>
</v:oval>

<v:oval fillcolor="lime" style="position:relative; top:0; left:3em; width:50; height:50">
  <v:extrusion on="true" render="boundingcube"/>
</v:oval>

<v:oval fillcolor="lime" style="position:relative; top:0; left:3em; width:50; height:50">
  <v:extrusion on="true" type="perspective"/>
</v:oval>

<v:oval fillcolor="lime" style="position:relative; top:0; left:3em; width:50; height:50">
  <v:extrusion on="true" render="wireframe" type="perspective"/>
</v:oval>

<v:oval fillcolor="lime" style="position:relative; top:0; left:3em; width:50; height:50">
  <v:extrusion on="true" render="boundingcube" type="perspective"/>
</v:oval>


WDH: VRML - Введение в язык VRML

Часть XI.
Виртуальная реальность: язык VRML

Документ в процессе разработки!

Глава 11.1. Введение в язык VRML

11.1.1. Что такое VRML?

VRML (Virtual Reality Modelling Language) — это международный стандарт формата файлов, описывающих интерактивные виртуальные миры для Интернета. Под виртуальными мирами здесь понимается трехмерное представление визуальных данных, которое пользователь может просматривать, двигаясь по набору специально спроектированных сцен. Первоначальный вариант языка VRML быд разработан корпорацией Silicon Graphics, но в дальнейшем он был существенно усовершенствован. Действующим стандартом является VRML 97, известный как ISO/IEC 14772.


WDH: XML - Введение в язык XML

Часть VIII.
Объекты данных: язык XML

"В жизни все не так, как на самом деле."

Станислав Ежи Лец

Глава 8.1. Введение в язык XML

8.1.1. Что такое XML?

XML (eXtensible Markup Language) — это упрощенный диалект языка SGML, предназначенный для описания иерархических структур данных в World Wide Web. Он разрабатывается рабочей группой W3C с 1996 г.; в настоящее время принятой рекомендацией является вторая редакция языка XML 1.0 (октябрь 2000 г.), на которую и ориентируется дальнейшее изложение.

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

HTML не выражает смысла документов.
Язык HTML был создан для описания структуры документов (название, заголовки, списки, абзацы и т. п.) и, в некоторой степени, правил их отображения (полужирный шрифт, курсивный шрифт и т. п.). Он ни в коей мере не предназначен для описания смысла написанных на нем документов, а во многих случаях именно данные составляют существо документа, будь-то биржевая сводка или научная публикация. Поэтому появилась необходимость в языке описания данных, причем данных, организованных в иерархические структуры.
HTML громоздок и негибок.
За последние годы HTML превратился в нагромождение тегов, которые часто дублируют друг друга и отнюдь не вносят ясности в текст документа. Если добавить сюда еще и нестандартные расширения HTML, которыми грешат все разработчики обозревателей, то создание мало-мальски сложных HTML-документов становится серьезной задачей. С другой стороны, раз и навсегда зафиксированный набор тегов часто оказывается недостаточно гибким для выражения нужного нам содержания.
Концепция Веб-обозревателя слишком ограничена.
С появлением Java-аплетов, сценарных языков и элементов ActiveX Веб-обозреватели перестали быть простыми "отображателями" HTML-документов; сегодня скорее они выглядят как программы, запускающие конкретные приложения. Тем не менее, сама концепция обозревателя накладывает излишние ограничения на пользователя; во многих случаях нам нужны Веб-ориентированные приложения, т. е. программы, способные читать специализированную информацию с Веб-узлов и выдавать нам ее в привычном виде, например, в виде электронных таблиц.
Поиск документов возвращает слишком много ссылок.
Все мы постоянно пользуемся поисковыми системами и постоянно клянем их за неудобство работы. Допустим, что мне нужны все тексты книг Сергея Довлатова, имеющиеся в Сети. Попытка поиска по имени автора приведет к тому, что я получу список всех ссылок с этим именем, включая воспоминания о Довлатове, рецензии на его книги и т. д. Намного удобнее было бы воспользоваться специальным тегом <AUTHOR>, чтобы указать, что именно я ищу.
Невозможно найти взаимосвязанные ресурсы.
Допустим теперь, что я все же нашел несколько рассказов Довлатова, которые явно составляют единый сборник. Хорошо, если они содержат ссылку на оглавление, но часто это не так. Поэтому необходим способ указания того, что данная группа страниц составляет единый ресурс и должна обрабатываться соответственно. Для этого необходима стандартизованная и развитая система метаописателей Веб-страниц.

XML — это попытка решить перечисленные проблемы путем создания простого языка разметки, описывающего произвольные структурированные данные. Точнее говоря, это метаязык, на котором пишутся специализированные языки, описывающие данные определенной структуры. Такие языки называются XML-словарями. В отличие от HTML, XML не содержит никаких указаний на то, как описанные в XML-документе данные должны отображаться. Способ отображения данных для различных устройств задается языком описания стилей XSL, который играет для XML примерно ту же роль, что CSS дл HTML. Другое принципиальное его отличие от HTML состоит в том, что XML может содержать любые теги, которые сочтут нужным использовать создатели XML-словаря. Приведем список лишь нескольких специализированных языков на базе XML, которые сегодня находятся в разных стадиях разработки рабочими группами W3C:

  • MathML — язык математических формул;
  • SMIL — язык интеграции и синхронизации мультимедийных средств;
  • SVG — язык двумерной векторной графики;
  • RDF — язык метаописаний ресурсов;
  • XHTML — переформулировка HTML в терминах XML.

Процесс обработки XML-документа состоит в следующем. Его текст анализируется специальной программой, которая называется XML-процессором. XML-процессор ничего не знает о семантике данных в документе; он только производит синтаксический разбор (parsing) текста документа и проверяет его правильность с точки зрени правил XML. Если документ правильно оформлен (well-formed), то результаты разбора текста передаются XML-процессором прикладной программе, которая выполняет их содержательную обработку; если же документ оформлен неверно, т. е. содержит синтаксические ошибки, то XML-процессор должен сообщить о них пользователю.

8.1.2. Применения XML

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

Традиционная обработка данных
Перечисленные выше возможности позволяют рассматривать XML как платформо-независимый стандарт хранения и представления информации, который в сочетании с другими современными технологиями (в частности, с технологиями Java) способен стать основой для создания любых машинно-независимых приложений, в т. ч. для обмена данными между сервером и клиентом. Кроме того, активно разрабатываемые сегодня языки запросов на базе XML могут составить серьезную конкуренцию языку SQL.
Программирование, управляемое документом
XML-документы могут служить контейнерами для построения приложений из существующих интерфейсов и компонентов. В этом случае документ состоит из ссылок на компоненты пользовательского интерфейса и модули обработки данных, которые связываются в процессе отображения страницы на экране.
Архивирование компонентов
Современное программирование базируется на использовании компонентов, которые в идеале должны легко собираться в единое целое с помощью несложного дополнительного кодирования. Основой для этого служит архивирование компонентов, которое, в свою очередь, требует единообразного подхода к их хранению и последующему использованию. Есть все основания полагать, что в ближайшем будущем XML-документы окажутся альтернативой распространенному сегодня хранению компонентов в виде двоичных модулей.
Внедрение данных
После того, как мы определили структуру данных XML, принципиально несложно написать генератор кода, обрабатывающего эти данные. По мере развития подобных программных средств вся рутинная обработка данных (включая проверку их правильности, представление в нужном формате и т. п.) может быть автоматизирована, позволяя разработчикам сосредоточиться на нестандартных частях создаваемого продукта.

8.1.3. Структура XML-документа

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

8.1.3.1. Элементы и атрибуты

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

Элемент состоит из трех частей: начального тега, содержимого и конечного тега. Тег — это текст, заключенный в угловые скобки "<" и ">". Конечный тег имеет то же имя, что начальный тег, но начинается с косой черты "/". Пример XML-элемента:

<author>Сергей Довлатов</author>

Имена элементов зависят от регистра, т. е. <author>, <Author> и <AUTHOR> — это имена различных элементов. Наличие закрывающего тега всегда обязательно. Если тег является пустым, т. е. не имеет содержимого и закрывающего тега, то он имеет специальную форму:

<элемент/>

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

имя_атрибута="значение_атрибута"

Аттрибут обязан иметь значение, которое всегда должно быть заключено в одинарные или двойные кавычки. Имена атрибутов также зависят от регистра. Пример элемента, имеющего атрибут:

<author country="USA">Сергей Довлатов</author>

Элементы должны либо следовать друг за другом, либо быть вложены один в другой:

<books>
  <book isbn="5887821192">
    <title>Часть речи</title>
    <author>Бродский, Иосиф</author>
    <present/>
  </book>
  <book isbn="0345374827">
    <title>Марш одиноких</title>
    <author>Довлатов, Сергей</author>
    <present/>
  </book>
</books>

Здесь элемент books (книги) содержит два вложенных элемента book (книга), которые, в свою очередь, имеют атрибут isbn и содержат три последовательных элемента: title (название), author (автор) и present (есть в наличии), причем последний пуст, т. к. в данном случае соответствует логическому флажку.

Из приведенного описания видно, что синтаксис XML напоминает синтаксис HTML (что естественно, т. к. оба они являются диалектами одного языка SGML), но требования к оформлению правильных XML-документов выше. Еще одним очень важным отличием XML от HTML является то, что содержимое элементов, т. е. все, что содержится между начальным и конечным тегами, считается данными. Это означает, что XML не игнорирует символы пробела и разрыва строк, как это делает HTML.

8.1.3.2. Пролог и директивы

Любой XML-документ состоит из пролога и корневого элемента, например:

<?xml version="1.0"?>
<books>
  <book isbn="0345374827">
    <title>Марш одиноких</title>
    <author>Довлатов, Сергей</author>
    <present/>
  </book>
</books>

В этом примере пролог сводится к единственной директиве (первая строка документа), указывающей версию XML. За ней следует XML-элемент с уникальным именем, который содержит в себе все остальные элементы и называется корневым. Директива (processing instruction) — это выражение, заключенное в специальные теги "<?" и "?>", которое содержит указания программе, обрабатывающей XML-документ.

Стандарт XML резервирует только одну директиву <?xml version="1.0"?>, указывающую на версию языка XML, которой соответствует данный документ (второй версии XML пока нет). В действительности, эта директива несколько богаче и в самом общем виде выглядит так:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

Здесь атрибут encoding задает кодировку символов документа. По умолчанию считается, что XML-документы должны создаваться в формате UTF-8 или UTF-16. Если же используется какая-либо другая кодировка символов, то ее название согласно Таблицы П7.1 должно быть указано в данном атрибуте, как показано в примере. Атрибут standalone говорит о том, содержит ли данный документ внешние разделы. Значение yes означает, что таких разделов нет, значение no — что они есть.

В общем случае, пролог может содержать также декларации типа документа.

8.1.3.3. Комментарии

XML-документы могут содержать комментарии, которые игнорируются приложением, обрабатывающим документ. Комментарии строятся по тем же правилам, что и в HTML:

  • начинайте комментарий с символов "<!--",
  • завершайте комментарий символами "-->",
  • не используйте внутри комментария символов "--".

Пример комментариев:

<!-- это комментарий -->
<!-- а вот еще комментарий,
     занимающий более одной строки -->

8.1.3.4. Имена и данные

Все имена элементов, атрибутов и разделов должны начинаться с буквы Unicode и состоять из букв, цифр, символов точки (.), подчеркивания (_) и дефиса (-). Единственное ограничение состоит в том, что они не должны начинаться с комбинации букв xml в любом регистре; подобные имена зарезервированы для будущих расширений языка. Существенно, что стандарт допускает использование в именах не только английских букв, но и любых других, хотя существующие XML-процессоры часто ограничены теми системами кодировок, которые в них заложены создателями. Поэтому мы в своих примерах пишем имена по-английски.

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

8.1.3.5. Специальные символы

Ряд символов в языке XML зарезервирован и должен представляться специальным образом:

левая угловая скобка ("<") | &lt;
правая угловая скобка (">") | &gt;
амперсант ("&") | &amp;
двойная кавычка (") в значениях атрибутов | &quot;
одинарная кавычка (') в значениях атрибутов | &apos;

При желании можно пользоваться числовой кодировкой символов в стандарте Unicode. При этом символ может быть задан своим десятичным кодом (&#код;) или шестнадцатеричным кодом (&#xкод;). Например &#169; представляет символ авторского права ©, а &#x410; – русскую букву А. Как мы увидим в дальнейшем, XML гораздо богаче, чем HTML, в использовании подобных конструкций, поскольку позволяет осуществлять подстановку в текст документов любых символьных выражений.

8.1.3.6. Секции CDATA

Еще одним способом включения в содержимое XML-элементов недопустимых символов является использование т. н. секций CDATA (сокр. от Character DATA, т. е. символьные данные). Допустим, что мы хотим сделать содержимым элемента layout фрагмент HTML-текста, например:

<layout>
  <H1>Заголовок</H1>
</layout>

Подобная конструкция неверна, т. к. HTML-тег H1 будет в данном случае воспринят как тег XML. Для того, чтобы все содержимое элемента layout воспринималось как данные, мы должны заключить его в секцию CDATA:

<layout>
  <![CDATA[<H1>Заголовок</H1>]]>
</layout>

Как мы видим из этого примера, секция CDATA заключается в ограничители <![CDATA[ и ]]>. Все внутри этой секции считается символьными данными; в частности, секции CDATA не могут вкладываться друг в друга.

8.1.4. Разделы и их декларации

8.1.4.1. Разделы XML-документа

Физически XML-документ может состоять из несколько разделов (entities). При этом корневой элемент документа также является разделом, который называется разделом документа, хотя он никак специально не оформлен. Все разделы имеют содержимое; все они, кроме раздела документа и внешней DTD, имеют имя.

С точки зрения синтаксического разбора документа разделы подразделяются на анализируемые и неанализируемые. Неанализируемый раздел (unparsed entity) — это ресурс, содержимое которого XML-процессор воспринимает как внешние данные без их синтаксического анализа (например, текст, не являющийся XML-документом). Неанализируемые разделы всегда имеют нотацию, указывающую на их формат. Анализируемые разделы (parsed entities) предназначены для текстовой подстановки: всякий раз, когда XML-процессор встречает в документе имя такого раздела, он заменяет его на содержимое этого раздела.

8.1.4.2. Внутренние разделы

Декларации разделов подразделяются на внутренние и внешние. Декларация внутреннего раздела выглядит так:

<!ENTITY имя значение>

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

<!DOCTYPE spec [
  <!ENTITY pr "проза">
  <!ENTITY po "поэзия">
]>
<books>
  <book genre="&po;">
    <title>Часть речи</title>
    <author>Бродский, Иосиф</author>
  </book>
  <book genre="≺">
    <title>Марш одиноких</title>
    <author>Довлатов, Сергей</author>
  </book>
</books>

Из этого примера видно, что ссылка на раздел (entity reference) выглядит точно так же, как ссылка на специальный символ, т. е. имеет вид &имя;. На самом деле, специальные символы — это точно такие же ссылки, но соответствующие разделы заданы неявно во внутренней декларации языка XML. Подобные текстовые подстановки удобны для задания сокращений, позволяющих уменьшить объем документа, и для введения обозначений для часто изменяемых полей документа. Так, например, мы можем вынести во внутренний раздел дату очередной ревизии публикации и затем изменять только значение этого раздела.

8.1.4.3. Внешние разделы

Существуют два варианта деклараций внешнего раздела:

<!ENTITY имя SYSTEM URI [NDATA нотация]?>
<!ENTITY имя PUBLIC строка? URI [NDATA нотация]?>

Первый вариант называется системным разделом, второй — публичным разделом. Они оба связывают имя раздела с внешним ресурсом, заданным своим URI, который должен иметь кодированную форму и не содержать закладок. URI внешнего ресурса называется системным идентификатором раздела. Использование внешнего ресурса зависит от нескольких факторов:

  • Если декларация содержит параметр NDATA, задающий нотацию раздела, то раздел является неанализируемым.
  • Если параметр NDATA не задан, то раздел анализируемый, и соответствующий ресурс должен быть XML-документом. Это означает, что вместо ссылки на раздел в текст документа будет включаться текст соответствующего ресурса.
  • Публичный раздел может содержать строку, задающую публичный идентификатор раздела. XML-процессор может использовать этот идентификатор для генерации альтернативного URI данного раздела. Если ему это не удалось, то он должен использовать системный идентификатор для загрузки содержимого раздела.

Примеры деклараций внешних ресурсов:

<!-- неанализируемый ресурс: GIF-образ -->
<!ENTITY photo SYSTEM "images/photo.gif" NDATA gif>
<!-- системный анализируемый ресурс -->
<!ENTITY hatch SYSTEM "http://www.textuality.com/boilerplate/hatch.xml">
<!-- публичный анализируемый ресурс -->
<!ENTITY hatch PUBLIC "-//Textuality//TEXT Standard hatch boilerplate//EN"
  "http://www.textuality.com/boilerplate/hatch.xml">

Внешний анализируемый раздел должен начинаться с директивы <?xml …?>, которая может не содержать номера версии, но обязана содержать кодировку символов. Эта директива не входит в состав подставляемого текста.

8.1.5. Декларация типа документа

Декларация типа XML-документа (document type declaration) содержит определение типа документа (document type definition, DTD) или указывает на него. DTD — это специальная грамматика, описывающая синтаксис определенного класса документов; правила создания DTD рассмотрены в гл. 8.2. Здесь же приводится только описание деклараций, которые обеспечивают доступ к DTD. Декларация типа документа, как и декларация раздела, может быть внутренней или внешней. Внутренняя декларация имеет вид:

<!DOCTYPE имя [ тело ]>

а внешняя — те же два варианта, что и внешние разделы:

<!DOCTYPE имя SYSTEM URI [ тело ]>
<!DOCTYPE имя PUBLIC строка? URI [ тело ]>

Таким образом, отличие декларации типа документа от декларации раздела состоит только в том, что:

  • она начинается с ключевого слова !DOCTYPE, а не !ENTITY;
  • она может иметь тело, заключенное в квадратные скобки.

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

<!DOCTYPE spec SYSTEM "xml/1998/06/xmlspec-v20.dtd">
<!DOCTYPE spec PUBLIC "-//W3C//DTD Specification V2.0//EN"
  "/XML/1998/06/xmlspec-v20.dtd">

Отметим, что внешняя декларация типа документа может содержать и ссылку на DTD, которая называется внешним подмножеством DTD, и тело, которое описывает дополнения к внешней DTD (оно называется внутренним подмножеством DTD).

8.1.6. Пример XML-документа

Чтобы собрать все описанные выше понятия в единое целое, приведем пример законченного XML-документа, содержащего прейскурант книжного магазина.

<?xml version='1.0' encoding="windows-1251" standalone="yes"?>
<!DOCTYPE bookstore [
  <!ENTITY po "поэзия">
  <!ENTITY pr "проза">
  <!ENTITY dr "драматургия">
]>
<!-- Этот файл содержит фрагмент базы данных книжного магазина -->
<bookstore>
  <book genre="≺">
    <title>Марш обреченных</title>
    <author>
      <first-name>Сергей</first-name>
      <last-name>Довлатов</last-name>
    </author>
    <price>60.00</price>
  </book>
  <book genre="&po;">
    <title>Часть речи</title>
    <author>
      <first-name>Иосиф</first-name>
      <last-name>Бродский</last-name>
    </author>
    <price>55.00</price>
  </book>
  <book genre="&dr;">
    <title>Антигона</title>
    <author>
      <name>Софокл</name>
    </author>
    <price>103.50</price>
  </book>
</bookstore>


WDH: XML - Определение типа документа

Глава 8.2. Определение типа документа

8.2.1. Общие сведения

В предыдущей главе мы неоднократно подчеркивали, что интерес к XML обусловлен, в первую очередь, возможностью создания на его основе специализированных языков, имеющих собственные наборы тегов. Однако, описанная там структура XML-документа и разбор его XML-процессором позволяют произвести только простую проверку того, что документ является правильно оформленным. Для создания на этой основе специализированных языков необходимы дополнительные средства описания этих языков. XML поддерживает два механизма подобных описаний: определения типа документа (document type definition, DTD) и XML-схемы (XML schema). Схемы будут описаны в гл. 8.6, здесь же мы приводим подробное описание правил создания DTD.

Синтаксис DTD соответствует правилам языка SGML, поэтому DTD в XML по сути своей те же, что DTD в HTML. Однако, описывая HTML, мы ограничились простой констатацией их существования, поскольку для практической работы с HTML-документами формальное описание DTD не нужно. Совершенно по-другому обстоят дела в XML. Здесь DTD служит той основой, на которой базируется синтаксический анализ XML-документа. Именно DTD позволяет XML-процессору проверить не только, правильно ли оформлен документ, но и соответствует ли он описанию конкретного языка. По отношению к DTD все XML-процессоры делятся на верифицирующие (validating) и неверифицирующие (non-validating). Неверифицирующий процессор проверяет документ только на правильность оформления; верифицирующий, кроме того, проверяет его на соответствие заданной в декларации типа документа DTD. Документ, прошедший такую проверку, называется правильным (valid).

DTD представляет собой набор деклараций, которые могут быть

  • декларациями типов элементов;
  • декларациями списков атрибутов;
  • декларациями разделов;
  • декларациями нотаций;

Эти декларации могут содержаться (все или частично) в параметрических разделах.

8.2.2. Декларации типов элементов

Синтаксис: <!ELEMENT имя спецификация>

Декларация типа элемента определяет, какое содержимое может иметь элемент с данным именем. Возможное содержимое элемента задается спецификацией, которая может быть:

  • ключевым словом EMPTY, означающим, что элемент пуст, т. е. не может иметь содержимого;
  • ключевым словом ANY, означающим, что элемент может иметь любое содержимое;
  • списком элементом-детей;
  • смешанным описателем.

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

  • плюс (+) означает, что данный элемент может встречаться один или более раз;
  • звездочка (*) означает, что данный элемент может встречаться нуль или более раз;
  • вопросительный знак (?) означает, что данный элемент может встречаться нуль или один раз;
  • отсутствие специального символа означает, что данный элемент должен присутствовать ровно один раз.

Например, для элементов book и bookstore из предыдущей главы мы можем написать такие декларации типов:

<!ELEMENT book (title, author+, price, present?)>
<!ELEMENT bookstore (book*)>

Здесь указано, что элемент book состоит из одного элемента title, одного или нескольких элементов author, элемента price и необязательного элемента present, а элемент bookstore состоит из любого количества элементов book.

Элемент author имеет более сложное строение: он может состоять либо из двух элементов first-name и last-name, либо из единственного элемента name. Подобные варианты включаются в списки элементов с помощью разделителя вертикальная черта (|), например, в данном случае:

<!ELEMENT author ((first-name, last-name) | name)>

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

<!ELEMENT title (#PCDATA)>

Ключевое слово #PCDATA происходит от словосочетания "parsed character data", т. е. произвольные символьные данные, понимаемые XML-процессором. В некоторых случаях элемент может иметь символьное содержимое вперемешку с элементами. Например, описывая упрощенный диалект языка HTML, мы могли бы определить элемент P (абзац), как текст, фрагменты которого могут быть выделены курсивным или полужирным шрифтом (элементы I и B соответственно). Тогда его декларация имела бы следующий вид:

<!ELEMENT P (#PCDATA|B|I)*>

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

Примеры использования ссылок на параметрические разделы в списках элементов приведены ниже.

8.2.3. Декларации списков атрибутов

Синтаксис: <!ATTLIST имя спецификация_атрибута*>
           спецификация_атрибута: имя тип параметры

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

8.2.3.1. Типы атрибутов

Атрибуты в XML бывают трех типов: строковые, именные (tokenized) и списочные.

  • Строковые атрибуты могут принимать любые текстовые значения и обозначаются ключевым словом CDATA.
  • На именные типы наложены определенные лексические и семантические ограничения. Эти типы задаются следующими ключевыми словами:
    • ID — уникальный идентификатор элемента. Элемент может иметь не более одного атрибута этого типа; параметры для него должны иметь значение #IMPLIED или #REQUIRED.
    • IDREF — значение атрибута типа ID другого элемента.
    • IDREFS — список значений типа IDREF, разделенных пробелами.
    • ENTITY — имя неанализируемого раздела, объявленного в DTD.
    • ENTITIES — список значений типа ENTITY, разделенных пробелами.
    • NMTOKEN — любое имя.
    • NMTOKENS — список значений типа NMTOKEN, разделенных пробелами.
  • Списочные атрибуты могут принимать значения только из заданного списка. Они подразделяются на:
    • Перечисление: список имен, разделенных пробелами, заключенный в круглые скобки; возможно задание вариантов с помощью разделителя вертикальная черта (|).
    • Список нотаций: ключевое слово NOTATION, за которым следует перечисление имен нотаций. Элемент может иметь не более одного атрибута этого типа; значениями атрибута могут быть только имена нотаций, объявленных в DTD.

8.2.3.2. Дополнительные параметры атрибутов

Параметры атрибутов могут принимать следующие значения:

  • #REQUIRED — означает, что атрибут является обязательным;
  • #IMPLIED — означает, что атрибут не имеет значения по умолчанию;
  • значение — задает значения атрибута по умолчанию;
  • #FIXED значение — означает, что атрибут всегда имеет значение по умолчанию.

8.2.3.3. Примеры описания атрибутов

В качестве примера рассмотрим список атрибутов элемента button в языке XHTML.

<!ATTLIST button
  id          ID             #IMPLIED
  class       CDATA          #IMPLIED
  style       CDATA          #IMPLIED
  title       CDATA          #IMPLIED
  lang        NMTOKEN        #IMPLIED
  xml:lang    NMTOKEN        #IMPLIED
  dir         (ltr|rtl)      #IMPLIED
  name        CDATA          #IMPLIED
  value       CDATA          #IMPLIED
  type        (button|submit|reset) "submit"
  disabled    (disabled)     #IMPLIED
  tabindex    CDATA          #IMPLIED
  accesskey   CDATA          #IMPLIED
  >

В этом списке атрибут id является уникальным идентификатором элемента, lang и xml:lang задаются кодом языка, dir может принимать значения ltr или rtl, а type — значения button, submit и reset, причем его значением по умолчанию является submit. Все остальные атрибуты являются строковыми и не имеют значений по умолчанию.

В нашем примере с книжным магазином элемент book имеет один обязательный атрибут genre. Поэтому его декларация атрибутов будет иметь вид:

<!ATTLIST book genre CDATA #REQUIRED>

8.2.4. Декларации нотаций

Нотации — это имена, идентифицирующие формат неанализируемых разделов, формат элементов, имеющих атрибут нотации, или прикладную программу, которой адресована директива. Декларация нотации имеет две формы:

<!NOTATION имя SYSTEM URI>
<!NOTATION имя PUBLIC строка URI?>

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

Пример использования нотации:

<!NOTATION gif SYSTEM "gifview.exe">
...
<!ENTITY photo SYSTEM "photo.gif" NDATA gif>

В этом примере указано, что для обработки разделов в формате gif следует вызывать программу отображения GIF-образов gifview.exe.

8.2.5. Пример DTD

Теперь мы можем оформить в виде законченной DTD правила описания нашей книжной базы данных. С учетом всего сказанного выше она будет иметь вид:

<!DOCTYPE bookstore [
  <!ELEMENT first-name (#PCDATA)>
  <!ELEMENT last-name (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT price (#PCDATA)>
  <!ELEMENT present EMPTY>
  <!ELEMENT author ((first-name, last-name) | name)>
  <!ELEMENT book (title, author+, price, present?)>
  <!ATTLIST book genre CDATA #REQUIRED>
  <!ELEMENT bookstore (book*)>
  <!ENTITY po "поэзия">
  <!ENTITY pr "проза">
  <!ENTITY dr "драматургия">
]>

8.2.6. Параметрические разделы

Параметрические разделы (parameter entities) — это макроопределения, обеспечивающие более сложные текстовые подстановки, чем обычные анализируемые разделы. Параметризованный раздел декларируется следующим образом:

<!ENTITY % имя значение>

Таким образом, отличие его декларации от обычного раздела состоит только в наличии символа процента (%) перед именем раздела. Для ссылок на параметрические разделы используется конструкция %имя; (а не &имя;, как в обычных ссылках). Параметрические разделы применяются исключительно в DTD, причем в двух целях: во-первых, они позволяют включать в состав DTD другие DTD-файлы, во-вторых, они используются как сокращения для повторяющихся деклараций. Пусть, например, DTD книжного магазина хранится в файле bookstore.dtd. Тогда для ее включения в другую DTD мы могли бы использовать следующий синтаксис:

<!ENTITY % bookstore SYSTEM "bookstore.dtd">
%bookstore;

Для уменьшения объема DTD мы могли бы создать параметрический раздел text вида

<!ENTITY % text "(#PCDATA)">

и затем изменить приведенные выше декларации так:

<!ELEMENT first-name %text;>
<!ELEMENT last-name %text;>

8.2.7. Условные секции

XML позволяет включать во внешнюю DTD т. н. условные секции (conditional sections), которые либо обрабатываются, либо игнорируются XML-процесором. Эта возможность особенно полезна при отладке DTD, т. к. позволяет нам включать и выключать отдельные фрагменты DTD, не изменяя ее содержания. Условных секций две:

<![IGNORE[ декларации ]]>
<![INCLUDE[ декларации ]]>

Первая из них указывает XML-процессору, что ее содержимое должно им игнорироваться, а вторая — что ее содержимое должно обрабатываться обычным образом. Содержимым этих секций могут быть любые синтаксически законченные декларации, допустимые в DTD. Поясним использование условных секций на примере. Допустим, что в процессе отладки bookstore.dtd мы решили создать два варианта этой DTD: отладочный (draft) и окончательный (final). Тогда для отладки мы можем написать следующее:

<!ENTITY % draft 'INCLUDE'>
<!ENTITY % final 'IGNORE'>

<![%draft;[
<!ELEMENT book (comments*, title, author+, price, present?)>
]]>
<![%final;[
<!ELEMENT book (title, author+, price, present?)>
]]>

Теперь процессор будет включать в DTD первую из приведенных деклараций элемента book и игнорировать вторую. После завершения отладки нам достаточно изменить только декларации разделов draft и final:

<!ENTITY % draft 'IGNORE'>
<!ENTITY % final 'INCLUDE'>


WDH: XML - Пространства имен

Глава 8.3. Пространства имен

8.3.1. Постановка проблемы

Из самого определения языка XML вытекает, что основным его достоинством является возможность определять собственные имена элементов и их атрибутов. Набор таких имен, определенных в DTD специализированного XML-языка, называется его словарем. Однако, произвольность создания словарей приводит к тому, что они зачастую содержат одинаковые имена для различных сущностей. Рассмотрим следующий пример:

<book>
  <title>Антигона</title>
  <author>Софокл</author>
  <price title="рубль">103.50</price>
</book>

Здесь присутствуют элемент title (название книги) и атрибут title (название денежной единицы), которые явно относятся к разным словарям. Но то, что очевидно для человеческого глаза, недоступно XML-процессору, проводящему формальный анализ документа. Для того, чтобы избежать двусмысленностей в XML-документе, который пользуется несколькими словарями, и были введены пространства имен (namespaces), описанные в этой главе.

По существу, пространство имен XML — это словарь, идентифицируемый ссылкой на URI ресурса, содержащего описание данного словаря. Каждому такому словарю приписывается префикс пространства имен, уникальный в пределах данного документа. Теперь, чтобы избежать двусмысленности, мы можем использовать полные формы имен элементов и атрибутов, которые состоят из префикса, указывающего на пространство имен, двоеточия и собственно имени. Такое ограниченное имя (qualified name) однозначно идентифицирует элемент или атрибут и указывает, к какому пространству имен он относится.

8.3.2. Декларация простанства имен

Существует два способа декларации пространства имен: декларация по умолчанию и явная декларация. Декларация по умолчанию объявляет пространство имен для всех элементов и их атрибутов, которые содержатся в данном элементе. Она имеет вид:

xmlns=URI

где xmlns — ключевое слово XML, а URI — это адрес ресурса, содержащего соответствующий словарь. В следующем примере элемент book и все элементы и атрибуты внутри него будут браться XML-анализатором из пространства имен "http://www.booker.com/schema".

<book xmlns="http://www.booker.com/schema">
  <title>Антигона</title>
  <author>Софокл</author>
  <price>103.50</price>
</book>

Явная декларация имеет вид:

xmlns:имя=URI

Как мы видим, она отличается наличием имени, которое задает префикс данного пространства имен. Рассмотрим следующий пример:

<book xmlns:bk="http://www.booker.com/schema"
      xmlns:money="http://www.finance.org/money">
  <bk:title>Антигона</bk:title>
  <bk:author>Софокл</bk:author>
  <money:price money:title="рубль">103.50</money:price>
</book>

Здесь элемент book содержит декларации двух пространств имен: первое из них имеет префикс bk, второе — money. При этом содержащиеся в нем элементы title и author относятся к первому пространству имен, а price и его атрибут title ко второму.

Из приведенных примеров видно, что декларация пространства имен выглядит как обычный атрибут со специальным именем xmlns, но может содержать дополнительно префикс, который позволяет нам уточнять, к какому пространству относится то или иное имя. Как отмечено выше, имена с префиксом (типа bk:author) называются ограниченными. При этом имя, следующее за двоеточием, называется локальным. Элементы и атрибуты, чьи имена не содержат префикса, считаются относящимися к пространству имен по умолчанию.

Следует также отметить, что URI пространства имен не обязан указывать на реальный ресурс (фактически, содержимое URI извлекается процессором только в случае схем); в большинстве случаев он просто служит идентификатором данного пространства, т. к. два пространства имен считаются одинаковыми тогда и только тогда, когда их URI текстуально совпадают.

Существует особый префикс xml, который не требует декларации. Он зарезервирован для расширений языка XML и всегда относится к пространству имен "http://www.w3.org/XML/1998/namespace". Пример использования этого префикса приведен ниже.

8.3.3. Область действия пространства имен

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

<Trees>
  <!-- объявим пространством имен по умолчанию имена HTML -->
  <table xmlns="http://www.w3.org/TR/REC-html40">
    <tr><td>Название</td><td>Классификация</td><td>Описание</td></tr>
    <tr>
      <td><author xmlns="http://flora.com/trees">осина</author></td>
      <td><title xmlns="http://flora.com/trees">род тополь</title></td>
      <td>
        <details xmlns="http://flora.com/trees">
          <areal>леса и степи Северной Евразии</areal>
          <use>производство целлюлозы и спичек</use>
        </details>
      </td>
    </tr>
  </table>
</Trees>

В этом примере имена элементов не ограничены, т. е. не имеют префиксов. Поэтому элемент Trees не относится ни к какому пространству имен, элементы tr и td относятся к пространству имен "http://www.w3.org/TR/REC-html40", а все остальные элементы к пространству имен "http://flora.com/trees".

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

8.3.4. Базовые URI фрагментов XML-документа

Пространства имен в XML были, в частности, использованы для задания в XML-документе базового URI любого из его фрагментов. Как мы помним, в HTML для этого используется элемент BASE, однако он относится к HTML-документу в целом. XML в этом отношении более гибок; в нем мы можем задать базовый URI любого элемента с помощью атрибута xml:base следующего вида (напомним, что префикс xml относится к пространству имен "http://www.w3.org/XML/1998/namespace"):

xml:base=URI

Рассмотрим такой пример:

<?xml version="1.0"?>
<doc xml:base="http://example.org/today/">
  <head>
    <title>Виртуальная библиотека</title>
  </head>
  <body>
    <para>Прочти горячие новости дня!</para>
    <olist xml:base="/hotpicks/">
      <item xml:base="pick1.xml">Горячая новость №1</item>
      <item xml:base="pick2.xml">Горячая новость №2</item>
      <item xml:base="pick3.xml">Горячая новость №3</item>
    </olist>
  </body>
</doc>

Здесь корневой элемент doc содержит указание на свой базовый URI "http://example.org/today/", а относительные URI вложенных в него элементов будут разрешаться так:

  • базовым URI элемента olist является "http://example.org/today/hotpicks";
  • базовым URI элементов item являются "http://example.org/today/hotpicks/pick1.xml" и т. п.

Тепеь мы можем сформулировать строгие правила описания базовых URI. Во-первых, их синтаксис и семантика сооответствуют общим правилам, принятым для URI (см. Приложение 2). Во-вторых, действуют следующие соглашения о присвоении элементам базовых URI:

  • если элемент имеет атрибут xml:base, то это базовый URI элемента; в противном случае
  • если предок элемента имеет атрибут xml:base, то это базовый URI элемента; в противном случае
  • базовым URI элемента является URI раздела документа или внешнего раздела, содержащего данный элемент.

Наконец, в-третьих, относительные URI разрешаются в полные так же, как все относительные URI, но со следующими уточнениями:

  • базовым URI для ссылки внутри текста является базовый URI содержащего этот текст элемента;
  • базовым URI для ссылки внутри атрибута xml:base является базовый URI предка этого элемента;
  • базовым URI для ссылки внутри любого другого атрибута является базовый URI этого элемента;
  • базовым URI для ссылки внутри директивы является базовый URI предка этой директивы.


WDH: XSL - Введение в язык XSL

Часть IX.
Таблицы стилей для объектов данных: язык XSL

"Есть вещи настолько серьезные, что по их поводу можно только шутить."

Нильс Бор

Документ в процессе разработки!

Глава 9.1. Введение в XSL

9.1.1. Что такое XSL?

XSL (eXtensible Stylesheet Language) — это язык описания стилей отображения для XML-документов. Он позволяет нам описать способ отображения документов для различных носителей, будь то окно Веб-обозревателя, устройство печати или генератор речи. XSL-процессор принимает данные в формате XML и таблицу стилей в формате XSL и на их основе создает отображение данных в соответствии с заданными стилями. Процесс отображения данных состоит из двух этапов. Сначала строится результирующее дерево на базе исходного дерева XML-документа (этот процесс назвается преобразованием), а затем это дерево преобразуется в видимый или слышимый результат (этот процесс называется форматированием).


WDH: Хроника обновлений

Хроника обновлений

14 мая 2002 г. (версия 1, ревизия 8)
Закончены гл. 11 — 12 части VI (PERL) и приложения 19 — 24.
Закончена разбивка частей справочника на главы.
Учтена интересная ошибка MSIE в динамической подкачке фрагментов страниц.
Справочник получил собственный домен wdh.suncloud.ru.
1 февраля 2002 г. (версия 1, ревизия 7)
Добавлены гл. 12 — 14 части IV (Dynamic HTML). Эта часть закончена.
Добавлены (недописанные) гл. 11 — 13 части VI (PERL).
Закончен алфавитный указатель к части III.
28 августа 2001 г. (версия 1, ревизия 6)
Добавлены гл. 1 — 5 части X (язык VML).
Открыт новый раздел веб-мастерской Санклауда WDH+.
31 июня 2001 г. (версия 1, ревизия 5)
Добавлены гл. 1 — 10 части VI (PERL) и четыре приложения к ним (пока ненумерованные).
Ранее выставленные документы отредактированы с учетом обнаруженных неточностей.
В рассылке «Солнечный ветер» завершено описание приемов, используемых при загрузке и отображении справочника.
4 апреля 2001 г. (версия 1, ревизия 4)
Добавлены гл. 9 — 11 части IV (Dynamic HTML) и приложения 16 — 18.
Оптимизирована загрузка оглавления путем динамической подкачки его фрагментов.
Страницы справочника проверены на соответствие стандартам HTML и CSS.
В рассылке «Солнечный ветер» начато подробное описание приемов, используемых при загрузке и отображении справочника.
18 февраля 2001 г. (версия 1, ревизия 3)
Добавлены гл. 6 — 8 части IV (Dynamic HTML).
Введена автоматическая генерация таблицы ссылок.
Проведена дополнительная настройка фреймового просмотра.
17 января 2001 г. (версия 1, ревизия 2)
Запущена почтовая рассылка для ИТ-профессионалов «Солнечный ветер». В ней Вы найдете примеры использования технологий, описанных в нашем справочнике.
Добавлены гл. 1 — 5 части IV (Dynamic HTML).
Закончен алфавитный указатель к частям I — II.
28 декабря 2000 г. (версия 1, ревизия 1)
Добавлены гл. 1 — 4 части V (Java) и гл. 1 — 3 части VIII (XML).
Введена автоматическая генерация оглавления и перечня таблиц.
Ранее выставленные документы отредактированы с учетом обнаруженных опечаток.
Проведена настройка отображения справочника для Netscape 6 (Gecko).
13 ноября 2000 г. (версия 1, ревизия 0)
Выставлены в Сеть части I — III (HTML, CSS и JavaScript) и приложения 1 — 15.


WDH: Авторское право

Сведения об авторских правах

Все упомянутые в данном издании товарные знаки и зарегистрированные товарные знаки принадлежат своим законным владельцам.

Охраняется Законом РФ об авторском праве. Репродуцирование (воспроизведение) любым способом данного издания или любой его части без письменного согласия автора и издателя запрещается. Любые попытки нарушения закона будут преследоваться в судебном порядке.

Автор справочника:

Лукач Юрий Саулович.

1958 г. р., живет в Екатеринбурге.

По образованию математик, стаж программирования более 20 лет.

Консультации, разработка программ и справочников.

E-mail: yury@suncloud.ru.

Copyright © 2000, 2001, 2002 Ю. С. Лукач.
Copyright © 2000, 2001, 2002 Suncloud.Ru.
Все права зарегистрированы.


WDH: ASP - Объектная модель

Документ в процессе разработки!

Глава 7.2. Объектная модель


WDH: ASP - Работа с базами данных

Документ в процессе разработки!

Глава 7.3. Работа с базами данных


WDH: ASP - Создание своих серверных компонент

Документ в процессе разработки!

Глава 7.4. Создание своих серверных компонент


WDH: JSP - Основные понятия

Документ в процессе разработки!

Глава 7.6. Основные понятия


WDH: JSP - Стандартные действия

Документ в процессе разработки!

Глава 7.8. Стандартные действия


WDH: JSP - Создание собственных действий

Документ в процессе разработки!

Глава 7.9. Создание собственных действий


WDH: JSP - Взаимодействие с сервлетами

Документ в процессе разработки!

Глава 7.10. Взаимодействие с сервлетами


WDH: JSP - Пакетирование JSP-страниц

Документ в процессе разработки!

Глава 7.11. Пакетирование JSP-страниц


WDH: PERL - CGI-программирование

Документ в процессе разработки!

Глава 6.13. CGI-программирование

6.13.1. Общие принципы


WDH: SVG - Введение в язык SVG

Документ в процессе разработки!

Глава 10.6. Введение в язык SVG

10.6.1. Основные понятия


WDH: SVG - Основные типы данных и интерфейсы

Документ в процессе разработки!

Глава 10.7. Основные типы данных и интерфейсы


WDH: SVG - Структура SVG-документа

Документ в процессе разработки!

Глава 10.8. Структура SVG-документа


WDH: SVG - Использование таблиц стилей

Документ в процессе разработки!

Глава 10.9. Использование таблиц стилей


WDH: SVG - Системы координат

Документ в процессе разработки!

Глава 10.10. Системы координат


WDH: SVG - Задание формы фигур

Документ в процессе разработки!

Глава 10.11. Задание формы фигур


WDH: SVG - Графические примитивы

Документ в процессе разработки!

Глава 10.12. Графические примитивы


WDH: SVG - Отображение текста

Документ в процессе разработки!

Глава 10.13. Отображение текста


WDH: SVG - Цвета и простые заливки

Документ в процессе разработки!

Глава 10.14. Цвета и простые заливки


WDH: SVG - Сложные заливки

Документ в процессе разработки!

Глава 10.15. Сложные заливки


WDH: SVG - Обрезка и маскирование

Документ в процессе разработки!

Глава 10.16. Обрезка и маскирование


WDH: SVG - Гиперссылки, события, сценарии

Документ в процессе разработки!

Глава 10.18. Гиперссылки, события, сценарии


WDH: SVG - Анимация

Документ в процессе разработки!

Глава 10.19. Анимация


WDH: SVG - Шрифты

Документ в процессе разработки!

Глава 10.20. Шрифты


WDH: SVG - Прочие возможности

Документ в процессе разработки!

Глава 10.21. Прочие возможности


WDH: VRML - Основные понятия

Документ в процессе разработки!

Глава 11.2. Основные понятия


WDH: VRML - Лексические соглашения

Документ в процессе разработки!

Глава 11.3. Лексические соглашения


WDH: VRML - Структура графов сцен

Документ в процессе разработки!

Глава 11.4. Структура графов сцен


WDH: VRML - Семантика узлов

Документ в процессе разработки!

Глава 11.5. Семантика узлов


WDH: VRML - Поля и события

Документ в процессе разработки!

Глава 11.6. Поля и события


WDH: VRML - Прототипы

Документ в процессе разработки!

Глава 11.7. Прототипы


WDH: VRML - Реальное время

Документ в процессе разработки!

Глава 11.8. Реальное время


WDH: VRML - Сценарии

Документ в процессе разработки!

Глава 11.9. Сценарии


WDH: VRML - Навигация

Документ в процессе разработки!

Глава 11.10. Навигация


WDH: XML - Адресация частей документа: языки XPath и XPointer

Документ в процессе разработки!

Глава 8.4. Адресация частей документа: языки XPath и XPointer

8.4.1. Общее описание языка XPath


WDH: XML - Связи и ссылки: язык XLink

Документ в процессе разработки!

Глава 8.5. Связи и ссылки: язык XLink

8.5.1. Общее описание языка XLink


WDH: XML - Основные структуры XML-схем

Документ в процессе разработки!

Глава 8.6. Основные структуры XML-схем

8.6.1. Общее описание языка XML Schema


WDH: XML - Типы данных XML-схем

Документ в процессе разработки!

Глава 8.7. Типы данных XML-схем

8.7.1. Обзор типов данных


WDH: XML - Метаописатели ресурсов: язык RDF

Документ в процессе разработки!

Глава 8.8. Метаописатели ресурсов: язык RDF


WDH: XML - Веб-сервисы: протокол SOAP

Документ в процессе разработки!

Глава 8.9. Веб-сервисы: протокол SOAP


WDH: XML - Веб-сервисы: язык WSDL

Документ в процессе разработки!

Глава 8.10. Веб-сервисы: язык WSDL


WDH: XSL - Основные понятия преобразований

Документ в процессе разработки!

Глава 9.2. Основные понятия преобразований


WDH: XSL - Шаблоны преобразований

Документ в процессе разработки!

Глава 9.3. Шаблоны преобразований


WDH: XSL - Построение результирующего дерева

Документ в процессе разработки!

Глава 9.4. Построение результирующего дерева


WDH: XSL - Переменные и параметры

Документ в процессе разработки!

Глава 9.6. Переменные и параметры


WDH: XSL - Прочие возможности XSLT

Документ в процессе разработки!

Глава 9.7. Прочие возможности XSLT


WDH: XSL - Основные понятия форматирования

Документ в процессе разработки!

Глава 9.8. Основные понятия форматирования


WDH: XSL - Обработка значений свойств

Документ в процессе разработки!

Глава 9.9. Обработка значений свойств


WDH: XSL - Форматирование объектов

Документ в процессе разработки!

Глава 9.10. Форматирование объектов


WDH: XSL - Описание свойств

Документ в процессе разработки!

Глава 9.11. Описание свойств


WDH: XSL - Описание свойств (продолжение)

Документ в процессе разработки!

Глава 9.12. Описание свойств (продолжение)