Доброго времени суток. Есть такой момент, нажимаю на кнопку, по ней делаю открытие своего окна(xul файл) через window.openDialog(...). Допустим, я второй раз нажимаю на кнопку, как мне проверить что окно уже открыто? (я хочу, если оно уже открыто, то просто добавить в него вкладку). Думал передавать в openDialog() последним параметром логическую переменную, и повешать на окнообработчик onload,в котором устанавливать её в true, и эту же переменную проверять при нажатии на кнопку, мол если она true то окно не открываем, а работаем с текущим? Только вот ещё один момент, что будет являться текущим то? Или к открытому окну можно как-то обращаться по идентификатору(или имени, оно передаётся вторым параметром в openDialog())?

okkamas_knife пишет

покопай тут
https://developer.mozilla.org/en/Code_snippets/Windows
и там еще по ссылкам

там я смотрю у окна ID наличиствует
так что можно при открытии запоминать ид и в следующий раз если ид не пустой то окно открывалось и далее ищем его по ид если находим то лезем к нему если нет то окно  уже закрыли и значит открываем новое.
подробнее с примерами не помогу - надо самому разбираться.

Спасибо за ссылку, по ней понял некоторую мысль - похоже можно использовать nsIWindowWatcher. При первоначальном создании окна задачать ему какое-нибдуь имя, и при следующем нажатии кнопки поискать окно по этому имени, если нашлось, то добавляем вкладку, если нет, то создаём новое :)

xterro
window.openDialog возвращает переменную-ссылку на это окно. Сохраните её где-нибудь после открытия окна, а перед открытием проверяйте сохраненное значение, и если оно не null/undefined - проверяйте у переменной значение свойства closed - если окно было закрыто, то оно будет равно true.

hydrolizer пишет

xterro
window.openDialog возвращает переменную-ссылку на это окно. Сохраните её где-нибудь после открытия окна, а перед открытием проверяйте сохраненное значение, и если оно не null/undefined - проверяйте у переменной значение свойства closed - если окно было закрыто, то оно будет равно true.

Благодарю, оказывается всё просто, как всегда :)

hydrolizer пишет

window.openDialog возвращает переменную-ссылку на это окно. Сохраните её где-нибудь после открытия окна, а перед открытием проверяйте сохраненное значение, и если оно не null/undefined - проверяйте у переменной значение свойства closed - если окно было закрыто, то оно будет равно true.

Причем это «где-нибудь» должн быть глобальным для всех окон, а то пользователь из другого окна сможет открыть еще одно. :)
Проще добавить окну уникальный атрибут windowtype и проверять наличие уже открытого окна через getMostRecentWindow(). Или, если такой возможности нет, можно перебирать вообще все окна или только окна с определенным windowtype через getEnumerator().

Infocatcher пишет

должн быть глобальным для всех окон, а то пользователь из другого окна сможет открыть еще одно

Разумеется. Например, поле объекта, созданного в jsm-модуле - контекст BackstagePass как раз глобален для всех окон, в отличие от контекста ChromeWindow.

hydrolizer пишет
Infocatcher пишет

должн быть глобальным для всех окон, а то пользователь из другого окна сможет открыть еще одно

Разумеется. Например, поле объекта, созданного в jsm-модуле - контекст BackstagePass как раз глобален для всех окон, в отличие от контекста ChromeWindow.

У меня эта переменная определена в самом начале js -файла. Окно одно, так что думаю проблем не возникнет :)
P.S. А если действительно понадобится переменная, которую должны видеть все окна, где её определить? :|

xterro пишет

которую должны видеть все окна, где её определить? :|

JavaScript code modules.