Доброй ночи, уважаемые форумчане.

Вот задался вопросом, как менее криво можно изобразить хранилище данных в тулбаре? У меня тулбар получает данные с сервера, а поскольку пользователь может запусть 2 Firefox - тулбара станет 2... .а копия данных должна быть одна. Сейчас у меня каждый тулбар имеет свое хранилище и после получения данных тулбар посылает уведомление обсерверам остальных тулбаров (в других процессах фф), передавая им данные. При изменении \ удалении данных тулбар сообщает всем остальным своим копиям что сделать надо ;) вообщем такой велосипед получился и он мне не нравится. Скажите, есть ли способы сделать что-то общее одно?

Если данных мало, и они не накапливаются, то nsIPrefBranch (что то вроде реестра виндоус, только для всех операционных систем). Записи в этом "реестре" можно увидеть по адресу about:config

Иначе: nsILocalFile. Просто записывать в общий фаил.

Что за данные-то хоть?

lemax пишет

Если данных мало, и они не накапливаются, то nsIPrefBranch (что то вроде реестра виндоус, только для всех операционных систем). Записи в этом "реестре" можно увидеть по адресу about:config

Иначе: nsILocalFile. Просто записывать в общий фаил.

Данных не очень много, но реализовывать свою БД на файлах желания не много. Поднимать sqlite тоже не хочется, т.к. данные быстро устаревают и нуждаются в динамичном обновлении ;(

Forest пишет

Что за данные-то хоть?

Да вообще теоретический вопрос. Сейчас данные - урлы \ ключи-хеши \ информация о страницах по урлам \ статистика всякая. Ну и нелогично когда статистика в одном тулбаре одна, а в соседнем окне другая ;(

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

Может имеет смысл покопать в сторону расширений, которые ставятся в папку приложения (и доступны во всех профилях)?
Ведь по идее у них как раз общее хранилище должно быть доступно (но не уверен).

https://developer.mozilla.org/en/Workin … ta_sharing

Forest пишет

Может имеет смысл покопать в сторону расширений, которые ставятся в папку приложения (и доступны во всех профилях)?

Это несколько не то. Т.е. расширения то доступны, но данные в них не общие.

pi.v.vitaly пишет

Попробуйте посмотреть расширение Clippings.

Посмотрел, автор сделал, как предлагает Crazy-EyE.

Crazy-EyE
Посмотрел\почитал. Примерно это меня и интересует, однако не совсем подходит в моем случае. Как я понимаю XPCOM компоненты регистрируются в момент установки расширения, подхватываясь браузером из папки /components? Не знаете, есть ли возможность зарегистрировать компонент в любой момент из любой папки и пользоваться ?

Не знаете, есть ли возможность зарегистрировать компонент в любой момент из любой папки и пользоваться ?

Такой возможности нет, и она обычно не нужна. Можно подгружать JS-скрипты через mozIJSSubScriptLoader.

А зачем вам это нужно?

Crazy-EyE пишет

Не знаете, есть ли возможность зарегистрировать компонент в любой момент из любой папки и пользоваться ?

Такой возможности нет, и она обычно не нужна. Можно подгружать JS-скрипты через mozIJSSubScriptLoader.

А зачем вам это нужно?

Хочу забиндить XBL на кнопочку, и чтобы она сразу подняла глобальное хранилище для других копий браузера (если их вдруг начнут запускать) или приципилась уже к существующему хранилищу. Вся "прелесть" в том чтобы можно было подключать XBL подтянутые из сети (изображаю "плагины" для расширений). Плагины могут быть разные и сразу не угадаешь какие будут... поэтому одинаковые хранилища для всех не подойдут. Вот ищу как это сделать без XPCOM или возможность как это сделать налету.

Тогда можно просто сделать один большой общий XPCOM-компонент, который будет управлять всеми хранилищами (просто JS-объектами).

Я бы взял код отсюда, раскомментировал строчку

Выделить код

Код:

this.wrappedJSObject = this;

а в плагине делал так:

Выделить код

Код:

var sharedObject = Components.classes["..."].getService().wrappedJSObject;
if (!sharedObject.PLUGIN_NAME) {
    // Init
    sharedObject.PLUGIN_NAME = {
        storage: {}
    };
}
var storage = sharedObject.PLUGIN_NAME.storage;

Как я понимаю XPCOM компоненты регистрируются в момент установки расширения, подхватываясь браузером из папки /components? Не знаете, есть ли возможность зарегистрировать компонент в любой момент из любой папки и пользоваться ?

Есть такая возможность.

Вся "прелесть" в том чтобы можно было подключать XBL подтянутые из сети (изображаю "плагины" для расширений). Плагины могут быть разные и сразу не угадаешь какие будут... поэтому одинаковые хранилища для всех не подойдут. Вот ищу как это сделать без XPCOM или возможность как это сделать налету.

Т. е., непривилигерованный xbl должен "поднимать" хранилище, реализованное привилегированным кодом ?
Нет, без XPCOM, скорее всего, никак.

Хотя, если код "плагинов" не обязан быть привилегированным, в FF3 и старше вроде есть какие-то средства для хранения данных web-приложений.

Есть такая возможность.

Можно из произвольной директории, но Firefox все равно придется перезапускать

Crazy-EyE

Можно из произвольной директории, но Firefox все равно придется перезапускать

Ошибаетесь, можно и без перезагрузки.

Через nsIComponentRegistrar? Может, и можно. Только нужно ли?

P.S. После таких утвердительных заявлений обычно ожидается ссылка.

Через nsIComponentRegistrar?

Верно.

После таких утвердительных заявлений обычно ожидается ссылка.

: )
Очень несложно поставить эксперимент, чтобы проверить. Но гугл недалеко, если что.