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

XBL-связки

15.8. Отладка: диагностика XBL

В связках XBL нет ничего загадочного; и объект window, и объект document доступны всем свойствам, методам, обработчикам событий, и конструкторам/деструкторам кода связки. Все техники отладки, доступные обычным скриптам, также доступны и скриптам в XBL.

Нет ничего загадочного и в работе связок с RDF. Синтаксические ошибки в документе XBL выводятся на консоль JavaScript.

Две наиболее часто возникающие проблемы при создании XBL-связки связаны с пространствами имен XML и внутренними свойствами JavaScript. Запомните о пространствах имен следующее:

XBL-свойсво inherit должно иметь префикс с идентификатором пространства имен наподобие xbl:, потому что пространство имен, используемое по умолчанию для тега, который содержит это свойство, всегда либо XUL, либо HTML.

XBL должен иметь отдельное пространство имен, потому что некоторые имена его тегов совпадают с именами тегов других приложений XML, такими как XUL, RDF и HTML.

Если применяется стандартный набор пространств имен, где по умолчанию используется XBL, каждый XUL или HTML тег в секции <content> должен будет иметь префикс соответствующего пространства имен. В противном случае никакой контент не будет выведен на экран.

В свойствах JavaScript XBL-связок допускаются две простые оплошности:

Забывают указывать префикс this для переменных связки.

Забывают, что когда простые переменные с префиксом this сохраняются, они преобразуются в строку.

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

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

Другое простое решение - добавить к каждой создаваемой связке такой тег:

<field name="loaded" readonly="true">true</field>

Перед обращением к связке из скрипта проверьте данное свойство; если оно имеет значение true, значит, связка доступна.

Более систематическое решение состоит в использовании части связки <constructor>. Вот такой кусочек кода - простая регистрационная система:

with (window.document) bindTotal = (bindTotal) ? ++bindTotal : 1;

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

Последнее, и глобальное, решение проблемы асинхронности - использовать метод loadBindingDocument().

Наконец, XBL-виджеты имеют некоторые ограничения, связанные с секретностью. Если два документа, загружаемые с двух разных URL, должны иметь полный доступ друг к другу, они должны пройти тест Mozilla, который называется "Same Origin". Этот тест требует, чтобы оба URL принадлежали одному и тому же серверу. XBL-связки также должны проходить этот тест, если они установлены там, где требования секретности могут быть нарушены. Приложение XUL с одного сервера не может стандартным способом использовать XBL-связку с другого. Чем возиться со сложной процедурой сертификации и цифровой подписи кода, обычно проще инсталлировать XBL-связку в chrome.

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

15.9. Итоги

Технология XBL делает разработку пользовательских интерфейсов более гибкой и компонентной. Она следует общей философии языков разметки, подобных HTML: она настолько проста, чтобы ее легко было использовать. Но XBL также и мощный инструмент разработки программного обеспечения - он позволяет некоторой части функциональности в коде быть изолированной, четко определенной и использоваться неоднократно.

XBL-часть платформы Mozilla обогащает платформу интерактивными, визуальными виджетами, придавая им очень гибкие и объектно- ориентированные свойства. XBL-связками являются почти каждый тег XUL и многие теги HTML. Действия по умолчанию, определенные этими связками, и делают эти теги столь простыми и гибкими в работе.

В "Объекты XPCOM" мы увидим объекты, с которыми связки XBL обычно связаны. Это объекты системы XPCOM. Мы уже видели многие из них, но есть еще множество для работы с такими технологиями как XUL и RDF. Многие XPCOM-компоненты имеют особенную функциональность, расширяющую возможности приложений Mozilla невероятным образом.

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