Опубликован: 10.12.2007 | Доступ: свободный | Студентов: 822 / 20 | Оценка: 5.00 / 5.00 | Длительность: 58:33:00
Лекция 6:

События

6.6. Отладка: обнаружение событий

В Mozilla обнаружение событий - тривиальный процесс.

Во-первых, необходимо убедиться, что значение настройки browser.dom.window.dump.enabled - true. Следует запустить платформу с ключом -console. Во-вторых, нужно написать однострочную функцию диагностики:

function edump(e) { dump(e.type+":"+e.target.tagName); }

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

Чтобы определять широковещательные события, нужно создать обработчики для события oncommand или просто добавить наблюдатели для объекта nsIObserverService. На данный момент в стандартной платформе нет возможности наблюдать за всеми именами изменений, которые рассылаются этими глобальными источниками событий.

В версии платформы для отладки можно создавать файл журнала всех широковещательных событий с помощью следующих переменных окружения (см. подробнее в файле исходных текстов prlog.h):

set NSPR_LOG_MODULES=ObserverService:5 set NSPR_LOGFILE=output.log
6.6.1. Проблемы с клавиатурой

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

На самом нижнем уровне может быть повреждена физическая клавиша или ее контакт. Проверьте клавишу в других приложениях (например, в vi войдите в режим вставки - i - и нажмите Control-V, а затем нажмите нужную клавишу).

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

Чтобы проверить, получает ли операционная система код клавиши корректно, запустите Windows в режиме только DOS или зайдите в Linux из терминала без запуска X11. В Windows для проверки отличных от ASCII символов можно использовать редактор Edit в символьном режиме.

Чтобы прояснить проблемы при использовании раскладок других языков, лучше всего обратиться за помощью к носителям языка. Вежливую просьбу можно поместить в одну из USENET-конференций soc.culture. Поддержка некоторых языков хуже, чем других, и пользователи, владеющие этими языками, могут прийти на помощь. В базе данных ошибок Mozilla, Bugzilla (http://bugzilla.mozilla.org), можно найти множество обсуждений вопросов интернационализации, совместимости и локализации.

Чтобы проверить, доходит ли до приложения нажатие клавиши, воспользуйтесь эмулятором терминала (например, DOS box, xterm или gnome-terminal) в режиме "raw". Этот режим доступен при запуске редактора вроде Edit или vi в таком терминале. Эмулятор терминала при получении ввода пользуется функциями графической среды (или менеджера окон, по крайней мере).

Чтобы проверить, получает ли нажатие клавиши Mozilla, просто добавьте подписчик на события для нужной клавиши объекту document окна chrome.

6.7. Итоги

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

Самая мощная и очевидная из этих систем - модель событий DOM 3 и связанные с ней HTML-события, большая часть которых применима и к XUL в Mozilla. Этой системы событий программисту достаточно для перехвата необработанных нажатий клавиш и жестов мышью.

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

Простая обработка событий достаточно примитивна. Большая часть событий связана с каким-нибудь полезным элементом управления. В "Формы и меню" мы рассмотрим самые полезные элементы управления Mozilla: формы и меню.