Опубликован: 10.12.2007 | Уровень: специалист | Доступ: платный
Лекция 15:

XBL-связки

15.2.7. Тег <handlers>

Тег <handlers> - простой контейнер, содержащий все обработчики событий XBL-связки. Он не имеет собственных специальных атрибутов. Он содержит один или более тегов <handler>. Каждый тег handler отвечает за исполнение некоторого кода JavaScript в ответ на событие DOM 2 граничного тега.

Связки XBL в директории chrome содержат более 500 разных обработчиков событий. Множество обработчиков событий в стандартных приложениях - результат действия связок XBL, а не специального кода.

Обработчики событий, определяемые в XBL, - один из четырех источников обработчиков событий в Mozilla. "События" , "События", описывает поддержку обработчиков в стиле "on...". Там также описывается тег <key>. Его синтаксис очень похож на синтаксис тега <handler>. Последний тип обработчиков зарыт в самой глубине платформы. Эти обработчики написаны на C/C++ и автоматически устанавливаются платформой при первом открытии окна.

Этот последний тип обработчиков - обработчики по умолчанию, которые действуют, если ничто иное не установлено. Платформа Mozilla создает специальный контроллер команд для обработки фокуса и точно так же устанавливает ряд специальных обработчиков для наиболее типичных событий. Когда добавляются обработчики <key>, они пристраиваются на верхушку группы фундаментальных обработчиков, так же, как определенные в приложении обработчики onclick пристраиваются на верхушку XBL-связок. Когда добавляются обработчики <handler>, они располагаются рядом с фундаментальными обработчиками, как если бы и те, и другие были зарегистрированы с помощью addEventListener().

Хотя последний, наиболее фундаментальный тип обработчиков реализован как часть XBL системы, они недоступны для прикладных программистов. Главное, на что следует обратить внимание, это то, что есть обработчики, лежащие ниже XBL системы, и поиск в chrome не обнаружит кода, ответственного за них.

15.2.7.1. Тег <handler>

Тег <handler> очень похож на XUL-тег <key>. Он определяет одну цель события (event target) и одно действие для одного точно определенного события. Действие - либо фрагмент скрипта, либо команда.

Тег <handler> реализует действие по умолчанию для события, возникающего в граничном теге. Оно может быть переопределено в самом граничном теге с помощью обычного обработчика событий DOM 2.

Чтобы обработчик начал действовать, в граничном теге должно возникнуть соответствующее событие. Это значит, что событие должно быть создано либо действием пользователя, как последовательность изменений документа, либо с помощью метода DOM 2 dispatchEvent(). Обсуждение событий XBL следует ниже, в разделе "Скриптинг" этой лекции.

Тег <handler> имеет следующие специальные атрибуты:

event phase command modifiers clickcount key keycode charcode 
button action

Атрибут event определяет имя события для обработчика, из тех событий, которые поддерживает Mozilla. В Таблице 6.1 приведен список имен событий. Например, событие mousedown - пример события, которое не имеет значения по умолчанию.

Атрибут phase определяет, на какой стадии события в цикле DOM 2 Event действие должно начинаться. Он может иметь значения "capturing", "target" или "bubbling". По-умолчанию "bubbling".

Атрибут command определяет команду (как описано в "Команды" , "Команды"), которая будет выполняться, когда возникнет событие. Однако контроллер, используемый для поиска и выполнения команды, будет определяться тегом, имеющим фокус, а не граничным тегом связки. Это значит, что связка должна быть способна иметь фокус, как целое. Иначе придется предпринять некоторые действия, чтобы убедиться, что часть связки, имеющая фокус, имеет и подходящий контроллер. command и action - взаимоисключающие атрибуты. Атрибут command не имеет действия по умолчанию.

Атрибут modifiers имеет список значений, разделенный пробелами или запятыми, а именно shift, control, alt, meta, accel и access. Он используется, чтобы определить, какие модификаторы клавиш должны быть нажаты, чтобы клавиатурное событие имело место. Все указанные модификаторы должны быть нажаты. accel - общий, платформеннонезависимый модификатор, описываемый в "События" , "События". access соответствует случаю, когда нажимается "горячая клавиша". Горячие клавиши определяются XUL-тегом key= attribute. По умолчанию модификаторов клавиш нет.

Атрибут clickcount используется только для событий мыши. Он содержит единственную цифру, определяющую, сколько кликов мышью требуется (движение вниз-вверх клавишей мыши - один клик). Максимальное значение определяется операционной системой. Mozilla поддерживает, по крайней мере, три клика. Значения по умолчанию нет.

Атрибут key используется только для клавиатурных событий. Он содержит единственный печатаемый символ, например "A". Нужно использовать либо key, либо keycode для клавиатурных событий, но не оба атрибута вместе. Значения по умолчанию нет.

Атрибут keycode используется только для клавиатурных событий. Он содержит единственный код VK_ из списка в Таблице 6.3. Нужно использовать либо key, либо keycode для клавиатурных событий, но не оба атрибута вместе. Значения по умолчанию нет.

Атрибут charcode - устаревшее название атрибута key. Используйте key.

Атрибут button используется только для событий мыши. Он содержит единственную цифру, определяющую, какая клавиша мыши нажата. Число клавишей мыши определяется операционной системой, Mozilla поддерживает по крайней мере три клавиши. Первая клавиша - клавиша 0. По умолчанию - любая клавиша. На двух- или трехкнопочных мышах правая клавиша - 2.

Атрибут action содержит скрипт, который должен выполняться, когда возникнет событие. Атрибуты action и command - взаимоисключающие. Значения по умолчанию нет.

Если не определены ни command, ни action, можно пометить обработчик событий на JavaScript между началом и концом тега <handler>. Вот пример:

<handler event="click" phase="target" clickcount="1" button="0">
this.do_custom_click(); // a <method> of the binding 
</handler>

Отныне это будет действием по умолчанию для события: "единичный клик левой кнопкой мыши". Метод do_custom_click() определен где-то в связке, так что он может быть вызван прямо в DOM-объекте граничного тега.

15.2.8. Неиспользуемые теги и атрибуты

Система XBL имеет ресурс тегов, которых нет, но кажется, что они существуют. Следующее описание применимо к версиям до 1.4.

Атрибут type для тегов <bindings>, <method> и иных.

Атрибут applyauthorsheets тега <content>.

Атрибут applybindingsheets тега <children>.

Тег <element> и все ссылающиеся на него.

Следующие события не поддерживаются:

contentgenerated, contentdestroyed, bindingattached, 
bindingdetached.

Следующие два атрибута сохранились от ранних версий XBL и их следует избегать: атрибут includes при использовании с тегом <content> и атрибут charcode при использовании с тегом <handler>.

Тег <script> не является частью XBL и в чистом XBL работать не будет.

Следующие атрибуты ничего не делают:

attachto applyauthorstyles styleexplicitcontent
Дмитрий Гуменюк
Дмитрий Гуменюк
Россия, Звенигород
Konstantin Grishko
Konstantin Grishko
Россия, Москва, Московский финансово-промышленный университет "Синергия", Москва