Xpoint
   [напомнить пароль]

Хранение информации независимо от окон Firefox

2006-11-29 12:51:47 [обр] KML [досье]
Можно ли из своего расширения как-то отслеживать запуск новых инстансов Firefox-а?
спустя 9 часов [обр] Владимир Палант [досье]
Что значит "запуск новых инстансов"? С MOZ_NO_REMOTE что-ли? Как же их отслеживать, если их сам Firefox не отслеживает...
спустя 16 часов [обр] KML [досье]
Наверное я неправильно выразился насчет инстансов. Например из одного окна FF я открыл ссылку в новом окне (а не в новом табе). Вот меня и интересует могут ли эти два окна как-то обмениваться информацией или нет. Т.е. простой пример, расширение является обычным будильником и должно что-то сделать в час N. Если открыть два окна - будет два будильника или в первом окне будильник будет, а во втором нет (в зависимости от реализации).
Можно ли обработать эту ситуацию в расширении?
спустя 13 минут [обр] KML [досье]
В своем примере я имел ввиду, что независимо от количества открытых окон FF должен быть активен только один будильник. И если окно с активным будильником закрывают, то расширение как-то должно обработать эту ситуацию в одном из оставшихся окон FF.
спустя 14 часов [обр] Владимир Палант [досье]
Вот это уже более конкретно. Но и ответ нетривиален. Узнать о существовании других окон и, к примеру, вызвать код в них, можно с помощью WindowMediator: http://developer.mozilla.org/e......ator_when_opener_is_not_enough. А вот чтобы сделать ваш код независимым от окон, лучше всего писать свою XPCOM-компоненту: http://developer.mozilla.org/e......ome_code#Advanced_data_sharing. Это, к сожалению, не слишком просто. Читайте документацию и экспериментируйте.
спустя 6 дней [обр] KML [досье]

Спасибо за наводку на XPCOM. Попутно вопрос по обмену данными между компонентой и расширением. Если объект простого типа или массив проблем нет, но если хочется передать какую-то специфическую структуру напрмер объект:

function obj(){
  this.fieldA = "A";
  this.fieldB = "B";
  this.fieldC = "C";
}
...
return new obj();
...

Для передачи из расширения в компоненту более-менее ясно - передаём как nsISupports, а возможно ли передать такие данные из компоненты в расширение?

спустя 3 минуты [обр] Владимир Палант [досье]
Я вообще не определяю интерфейсов для общения с компонентой. Расширение запрашивает инстанцию компоненты как nsISupports, а потом через свойство wrappedJSObject получает исходный JavaScript-объект. А с ним общаться уже никаких проблем.
Powered by POEM™ Engine Copyright © 2002-2005