Заставить Firefox addon-sdk обрабатывать несколько вкладок

Я сделал надстройку для Firefox, используя SDK для сборки надстроек. Сначала он работает нормально, но затем, когда я переключаю вкладки, он начинает вести себя странно и теряет свою функциональность. Я знаю, что должен что-то упустить, и, вероятно, это связано со связью между сценариями, но я не знаю, что именно.

Вместо публикации кода я сделал расширение общедоступным, и вот ссылка .

Если вам все еще нужно, чтобы я разместил коды, ведь вы не должны этого делать, просто попросите меня, и я это сделаю. Подскажите, что мне сделать, чтобы расширение работало на многих вкладках по отдельности, но одновременно.


person Giovanni Di Toro    schedule 07.06.2013    source источник


Ответы (1)


Мне кажется, что строки 59-64 должны быть в функции attachTabWorker. Вам нужно только сохранить воркеров для панели в текущем воркерском общении.

Я бы подключил связь вашего порта следующим образом:

function attachTabWorker(tab) {
    // Attach and store
    var tabWorker = tabWorkers[tab.id] = tab.attach({
        contentScriptFile: [data.url("clear.js"),data.url("jquery.js")]
    });
    // Clean up
    tabWorker.on("detach", function() {
        if (getTabWorker(tab) === tabWorker) {
            delete tabWorkers[tab.id];
        }
    });
    tabWorker.port.on('hiderOn',function(tag){
        panel1.port.emit('hiderOn', tag);
    });
    tabWorker.port.on('hiderOff',function(tag){
        panel1.port.emit('hiderOff', tag);
    });
}

В противном случае вы получаете настройку канала связи порта для activeTab только при первом запуске, а не для каждой вкладки, как я полагаю, вы хотите. Код getActiveTabWorker().port.on... запускается один раз при запуске надстройки, которая создает прослушиватель только для активной вкладки, а не для всех вкладок. Я надеюсь, что в этом есть смысл.

person Bryan Clark    schedule 07.06.2013
comment
Спасибо, но часть моей проблемы остается, она не сбрасывает панель, когда я перезагружаю вкладку или меняю вкладки. - person Giovanni Di Toro; 10.06.2013