Firefox: Как я могу добавлять / изменять панели инструментов с помощью дополнительного пакета SDK (Jetpack)

#firefox #firefox-addon #toolbar #firefox-addon-sdk

#firefox #firefox-дополнение #панель инструментов #firefox-addon-sdk

Вопрос:

Итак, я уже несколько раз просматривал документацию по дополнительному SDK, но нигде я не могу увидеть, как создавать панели инструментов или изменять существующие. У них есть руководство по созданию значков дополнительных панелей, но это не то, что я хочу. Дополнительный SDK уже поддерживает это? Если это произойдет, кто-нибудь может связать меня с примером / руководством.

Комментарии:

1. вам нужна панель инструментов или кнопка на панели инструментов?

2. Что я хочу сделать, так это добавить кнопку на существующую панель инструментов, но не так, как вы, перейдя в View -> Toolbars -> Customize, поскольку это не позволит мне расположить ее на этой панели инструментов так, как я хочу (Googlebar Lite). Итак, да, я хочу кнопку, но стандартного элемента панели инструментов из этого меню будет недостаточно.

Ответ №1:

Это работает для меня:

 var data = require("self").data;
var {Cc, Ci} = require("chrome");
var mediator = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator);

exports.main = function(options, callbacks) {
    addToolbarButton();
    // other stuff
};

function addToolbarButton() {
    var document = mediator.getMostRecentWindow("navigator:browser").document;      
    var navBar = document.getElementById("nav-bar");
    if (!navBar) {
        return;
    }
    var btn = document.createElement("toolbarbutton");  

    btn.setAttribute('type', 'button');
    btn.setAttribute('class', 'toolbarbutton-1');
    btn.setAttribute('image', data.url('img/icon16.png')); // path is relative to data folder
    btn.setAttribute('orient', 'horizontal');
    btn.setAttribute('label', 'My App');
    btn.addEventListener('click', function() {
        // use tabs.activeTab.attach() to execute scripts in the context of the browser tab
        console.log('clicked');
    }, false)
    navBar.appendChild(btn);
}
  

Комментарии:

1. Более подробное объяснение и функцию удаления кнопки панели инструментов см. в моем сообщении в блоге

2. Я только что заметил, что эта функция будет добавлена только для активного окна. При открытии новых окон кнопки там не будет.

Ответ №2:

Это дополнение к первому ответу.

Если у вас возникли трудности, описанные dcolish в его комментарии к ответу вверху, добавьте это в main.js:

 var tim = require("timers");
intervalId = tim.setInterval(timerFn,2000);
function timerFn() {
    var win = mediator.getMostRecentWindow('navigator:browser');
    if (win)
        var document = win.document;
    else
        return;
    var isBtn = document.getElementById('myappbutton-id');
    if (!isBtn) addToolbarButton();
}
  

Это грубо, но работает.

РЕДАКТИРОВАТЬ: намного проще и чище:

 var windows = require("windows").browserWindows;
windows.on('open', function(window) {
    addToolbarButton();
});
  

На моем Mac Firefox 15 автоматически удаляет значок при закрытии окна. Так window.on('close', ...) не требуется.