Россия, Звенигород |
Окна и панели
10.4.5. Методы alert(), confirm() и prompt()
Эти три метода объекта window позволяют создавать простейшие диалоговые окна для взаимодействия с пользователем. Метод alert() создает окно с сообщением и единственной кнопкой. Метод confirm() позволяет пользователю сделать выбор, нажав одну из кнопок, а метод prompt() служит для получения от пользователя данных. Кроме того, метод alert() является простейшим способом создать точку прерывания в вашем коде на JavaScript – выполнение приостанавливается до того момента, когда окно будет закрыто.
Механизм создания этих окон был переработан в процессе создания Mozilla. В Netscape 4.x и более ранних версиях этого браузера, а также в Internet Explorer эти окна могут содержать текст, возвращаемый функцией printf() в стиле языка C. В них не поддерживаются символы Unicode. В Mozilla эти окна являются полноценными окнами XUL, как видно на рисунке 10.2.
Пунктирными контурами на рисунке показаны элементы, соответствующие тегам <description>. Чтобы изучить структуру окон, нужно добавить отладочные стили к файлу userChrome.css в каталоге профиля пользователя, а затем перезапустить платформу. Окно на рисунке было получено при помощи следующей строки кода:
alert("Line 1\nLine2");
Mozilla разбивает строку, переданную методам alert(), confirm() и prompt(), согласно символам конца строки. Каждая подстрока помещается внутрь отдельного тега <description> где, в свою очередь, может отображаться в несколько строк. Максимальная ширина тега <description> (свойство maxwidth ) – 45 em. Верхний, пустой тег <description> с id="info.header" может использоваться разработчиком.
Эти диалоговые окна определены в chrome, в файлах, имена которых начинаются с commonDialog внутри архива toolkit.jar. Для всех трех окон используется один и тот же документ XUL.
10.4.6. nsIPromptService
Методы alert(), confirm() и prompt() используют для создания диалоговых окон следующие компонент и интерфейс XPCOM:
@mozilla.org/embedcomp/prompt-service;1 nsIPromptService
Объект с помощью этой пары может быть создан лишь из документа, который считается защищенным. Этот объект позволяет создавать множество различных диалоговых окон, которые перечислены в таблице 10.1.
Интерфейс nsIPromptService содержит обширную документацию по аргументам каждого из этих методов. Создавая приложение для установки в chrome, используйте эти методы. Простые методы, например alert(), предназначены для скриптов внутри HTML-документов.
10.4.7. Специализированные диалоговые окна XPCOM
В Mozilla определены несколько специализированных диалоговых окон, которые описаны в архиве toolkit.jar в составе chrome. Определены следующие окна: окно выбора файла; окно параметров печати; окно поиска на странице; индикатор загрузки файла.
Каждое из этих окон имеет соответствующий компонент XPCOM и должно управляться при помощи интерфейсов XPCOM, а не посредством URL документов chrome.
Ниже кратко рассмотрены два из них.
10.4.7.1. FilePicker (окно выбора файла).
FilePicker представляет собой пару из компонента и интерфейса XPCOM, а также набор диалоговых окон. В некоторых случаях эти окна основаны на XUL, но могут использоваться и стандартные окна выбора файла, предоставляемые операционной системой. В последнем случае это окно не может быть исследовано при помощи Инспектора DOM.
Для создания окна используется следующая пара XPCOM:
@mozilla.org/filepicker;1 nsIFilePicker
Как легко убедиться, просмотрев соответствующий файл XPIDL, интерфейс nsIFilePicker предоставляет ряд простых методов для работы с диалоговым окном. Чтобы воспользоваться окном, нужно выполнить следующие действия:
- Создать объект FilePicker с помощью XPCOM.
- Инициализировать его при помощи метода init().
- Добавить фильтры для файлов и указать, какой из них выбран по умолчанию.
- Установить другие необходимые значения по умолчанию.
- Вызвать метод show(). При этом будет создано модальное окно; выполнение метода завершится после того, как пользователь закроет его.
- Извлечь значение, выбранное пользователем, из объекта FilePicker.
Последний этап является не вполне тривиальным, поскольку информация о выбранном файле не может быть передана в виде простой строки, содержащей путь. Это связано с тем, что в некоторых операционных системах, чтобы однозначно идентифицировать файл, следует указать не только путь, но и устройство. Специализированные объекты и интерфейсы платформы для работы с файлами описаны в "Объекты XPCOM" "Объекты XPCOM". Рекомендуется ознакомиться с ними, прежде чем приступать к использованию объекта FilePicker.
В листинге 10.2 приведен пример получения от пользователя имени файла для вывода данных при помощи объекта FilePicker.
var Cc = Components.classes; var Ci = Components.interfaces; var fp; fp = Cc["@mozilla.org/filepicker;1"]; fp = fp.createInstance(Ci.nsIFilePicker); fp.init(window, "Example File Save Dialog", fp.modeSave); fp.show(); // fp.file содержит объект nsILocalFile, указывающий на выбранный файлЛистинг 10.2. Получение объекта nsiLocalFile при помощи диалогового окна выбора файла.
10.4.7.2. PrintingPrompt.
Платформа Mozilla предоставляет ряд объектов для взаимодействия с системой печати, а также несколько диалоговых окон на основе XUL для задания параметров печати. Примерно с версии 1.3 Mozilla позволяет распечатывать документы XUL, отображаемые в окне браузера, подобно обычным HTML-документам.
Система печати Mozilla довольно сложна, и ее обсуждение выходит за рамки данной книги. В качестве отправных точек для самостоятельного изучения системы печати можно порекомендовать интерфейсы XPCOM nsIPrintingPromptService и nsIWebBrowserPrint.