Firefox Addons SDK - Как получить доступ к простому хранилищу из сценария содержимого?

Я использую новый FireFox Addons SDK для разработки расширения. У меня есть виджет, с прикрепленной панелью. Панель используется для управления настройками, поэтому мне нужно получить доступ к API простого хранилища из скрипта содержимого панели. Мне известно, что вы не можете получить доступ к API напрямую, поэтому я попытался использовать передачу сообщений. Вот что у меня есть:

exports.main = function() {
    var panel = require('panel');
    var ss = require('simple-storage');

    var prefPanel = panel.Panel({
        contentURL: self.data.url('prefPanel.html'),
        contentScriptFile: self.data.url('prefPanel.js'),
        contentScriptWhen: 'ready',
        onMessage: function(message) {
            switch(message.method) {
                case 'setValue':
                    ss.storage[message.key] = message.value;
            }
        },
    });

    prefPanel.postMessage(ss.storage);


    require('widget').Widget({
        id: 'ml-pref-button',
        content: 'ML',
        width: 30,
        panel: prefPanel,
    })
}

и в prefPanel.js у меня есть:

self.on('message', function(storage) {

    storage.setValue = function(key, value) {
        this[key] = value;
        self.postMessage({
            method: 'setValue',
            'key': key,
            'value': value,
        });
    }

    // Do some stuff, using storage object

});

Проблема в том, что я получаю эту ошибку:

Error: An exception occurred.
Traceback (most recent call last):
  File "resource://jid0-wdemwzahwzh3bsw0kkxlcjg9e7k-at-jetpack-api-utils-lib/content/worker.js", line 405, in postMessage
    throw new Error(ERR_DESTROYED);
Error: The page has been destroyed and can no longer be used.

Я предполагаю, что это потому, что prefPanel DOM и сценарии содержимого не имеют загружено еще. Сценарии DOM и содержимого перезагружаются каждый раз, когда отображается панель, или они всегда работают в фоновом режиме?

8
задан Wladimir Palant 2 June 2012 в 22:25
поделиться