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

Окна и панели

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");
Структура XUL диалогового окна alert().

Рис. 10.2. Структура XUL диалогового окна alert().

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.1. Методы интерфейса nsIPromptService
Имя метода Диалоговое окно
alert() Обычное окно alert().
alertCheck() Обычное окно alert(), но с дополнительной строкой, содержащей флажок и текст
confirm() Обычное окно confirm()
confirmCheck() Обычное окно confirm(), но с дополнительной строкой, содержащей флажок и текст
confirmEx() Полностью настраиваемое диалоговое окно, содержащее до трех кнопок со стандартными метками или метками, определенными пользователем. Дополнительно может содержать флажок и текст
prompt() Обычное окно prompt()
promptUsernameAndPassword() Диалоговое окно с полями ввода для имени пользователя и пароля. Дополнительно может содержать флажок и текст
promptPassword() Диалоговое окно с полем ввода для пароля. Дополнительно может содержать флажок и текст
select() Диалоговое окно со списком, из которого может быть выбран один элемент. Каждый элемент списка представляет собой простой текст
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 предоставляет ряд простых методов для работы с диалоговым окном. Чтобы воспользоваться окном, нужно выполнить следующие действия:

  1. Создать объект FilePicker с помощью XPCOM.
  2. Инициализировать его при помощи метода init().
  3. Добавить фильтры для файлов и указать, какой из них выбран по умолчанию.
  4. Установить другие необходимые значения по умолчанию.
  5. Вызвать метод show(). При этом будет создано модальное окно; выполнение метода завершится после того, как пользователь закроет его.
  6. Извлечь значение, выбранное пользователем, из объекта 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.

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