Использование диалога XUL в расширении Firefox - PullRequest
2 голосов
/ 02 декабря 2011

Мне нужно открыть модальное диалоговое окно после запуска расширения Firefox, а затем закрыть его после определенных условий.

Я определил диалог с id = 'myWindowName' в XUL-файле, а затем запустил его, используя window.openDialog('xul url', 'myWindowName', ...) напрямую, без назначения какой-либо переменной.

Затем я определяю y = document.getElementById('myWindowName') в более поздней функции и использую y.cancelDialog(), чтобы закрыть ее.

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

Возвращает ли * 1013 ту же ссылку, что и y=document.getElementByID('myWindowName')?

Кроме того, почему window.cancelDialog() не работает?Является ли window.close() лучшим вариантом для автоматического закрытия диалога?

1 Ответ

3 голосов
/ 04 декабря 2011

Чтение Работа с окнами в коде Chrome .

Кажется, вы не знаете, что в Firefox есть больше, чем одна «область» (и на обычных веб-страницах). Я имею в виду следующее: каждое окно, вкладка и iframe имеют собственный набор объектов (глобальный объект, который является Window объектом, документом и т. Д.). Кроме того, иногда существуют «области» с собственным глобальным объектом, но без DOM (без window или document) - компоненты XPCOM, модули jsm, рабочие, песочницы.

openDialog возвращает объект окна нового диалога. Элемент <dialog id='myWindowName'> может быть доступен в документе этого окна, синтаксис зависит от того, где выполняется скрипт, который хочет получить к нему доступ: если он запускается в диалоговом окне, он может использовать document.getElementById(), тогда как скрипт в другом окне должен получить к нему доступ через ссылку на окно диалога (скажем, dialogWindow): dialogWindow.document.getElementById().

cancelDialog - это метод для элемента XUL <dialog> , тогда как close() - это метод для окна, поэтому window.cancelDialog () не делает не работает, а window.close () работает.

Что из диалогового окна . cancelDialog или window.close() "лучше": cancelDialog делает больше, чем просто window.close () (см. его код в mxr ) - те же шаги, что и при нажатии кнопки «Отмена» в диалоговом окне. Поэтому, прежде чем закрыть окно, он проверяет, отключена ли кнопка «Отмена» в диалоговом окне, затем запускает событие ondialogcancel, позволяющее заинтересованному коду предотвратить это, а затем, если все в порядке, закрывает окно с помощью window.close().

...