Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№113-11-2011 10:38:04

xterro
Участник
 
Группа: Members
Зарегистрирован: 02-11-2011
Сообщений: 24
UA: Firefox 4.0

window.openDialog() как проверить что окно уже открыто?

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

Отсутствует

 

№213-11-2011 11:46:09

xterro
Участник
 
Группа: Members
Зарегистрирован: 02-11-2011
Сообщений: 24
UA: Firefox 4.0

Re: window.openDialog() как проверить что окно уже открыто?

okkamas_knife пишет

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

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

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

Отсутствует

 

№313-11-2011 11:58:20

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 8.0

Re: window.openDialog() как проверить что окно уже открыто?

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

Отсутствует

 

№413-11-2011 12:15:51

xterro
Участник
 
Группа: Members
Зарегистрирован: 02-11-2011
Сообщений: 24
UA: Firefox 4.0

Re: window.openDialog() как проверить что окно уже открыто?

hydrolizer пишет

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

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

Отсутствует

 

№514-11-2011 00:43:19

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 8.0

Re: window.openDialog() как проверить что окно уже открыто?

hydrolizer пишет

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

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


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№614-11-2011 03:40:33

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 8.0

Re: window.openDialog() как проверить что окно уже открыто?

Infocatcher пишет

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

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

Отсутствует

 

№714-11-2011 14:17:16

xterro
Участник
 
Группа: Members
Зарегистрирован: 02-11-2011
Сообщений: 24
UA: Firefox 8.0

Re: window.openDialog() как проверить что окно уже открыто?

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

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

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

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

Отредактировано xterro (14-11-2011 14:18:38)

Отсутствует

 

№814-11-2011 14:36:25

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 9.0

Re: window.openDialog() как проверить что окно уже открыто?

xterro пишет

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

JavaScript code modules.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]