Добавыть в контекстное меню раширений пункт "Открыть папку расширения"(Firefox 10 +)
Автор: bunda1
Описание: Добавляет в контекстное меню расширений на странице расширений about:addons или chrome://mozapps/content/extensions/extensions.xul новый пункт "Открыть папку расширения" который дает возможность открыть папку расширения.
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.

Выделить код

Код:

// Добавыть в контекстное меню раширений пункт "Открыть папку расширения" ....
gBrowser.addEventListener("popupshowing", function(event) { 
    
     var addonPopup = gBrowser.contentWindow.document.getElementById("addonitem-popup");
     var openAddonFolder = gBrowser.contentWindow.document.getElementById("openAddonFolder");
     
     if ( addonPopup && openAddonFolder ) {
          var type = addonPopup.getAttribute("addontype");
          openAddonFolder.hidden = (type !== 'extension');
          };
    
     if ( addonPopup && !addonPopup.hasAttribute('stopRepeat') ) {
          if (addonPopup.getAttribute("addontype") !== 'extension') return;
          addonPopup.setAttribute('stopRepeat', 'true');
          var menuitem = document.createElement("menuitem");
          menuitem.setAttribute("id", "openAddonFolder");
          menuitem.setAttribute("label", "Открыть папку расширения");
          addonPopup.appendChild(menuitem);
         
             gBrowser.contentWindow.document.getElementById("openAddonFolder").addEventListener("click", function(event) { 
       
                  var addons = gBrowser.contentWindow.document.getElementById('addon-list').childNodes;
                  for( var i=0; i < addons.length; i++ ) {
                       if ( addons[i].getAttribute('current') == 'true' ) {
                            var value = addons[i].getAttribute('value');
                            
                            var dir = Components.classes['@mozilla.org/file/directory_service;1']
                                     .getService(Components.interfaces.nsIProperties)
                                    .get('ProfD', Components.interfaces.nsILocalFile);
                        dir.append('extensions');
                            dir.append( value );
                            if ( dir.exists() ) dir.launch();
 
                            var file = Components.classes['@mozilla.org/file/directory_service;1']
                                      .getService(Components.interfaces.nsIProperties)
                                     .get('ProfD', Components.interfaces.nsILocalFile);       
                            file.append('extensions');
                            file.append( value + '.xpi' )             
                            if ( file.exists() ) file.launch(); 
                            return;
                            }
                       }
             }, false);
          };
          
}, false);

А можно ли заранее определять, имеет расширение свою папку или нет?
Если не имеет, то открывать общую папку extensions.

Конечно можно, но нужен пример.

пример чего?
такого расширения?
Например, Adblock Plus не имеет своей папки.

Но у Adblock Plus есть {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}.xpi в папке Profile\extensions.

Да, есть. Я ж про такие расширения и говорю - у тех у кого папки нет, но есть вот такие xpi-файлы.
Сейчас же, при попытке попасть в папку такого расширения, у меня выскакивает программа Universal Extractor для разархивации файла.
Наверное, было бы правильней для таких расширений просто открывать папку \Profile\extensions, а дальше самостоятельно находить нужный файл.
Можно еще дополнительно алертом выводить название таких файлов.

И в чем проблема :(
У меня по умолчанию стоит архиватор 7-Zip и если скажем нажать "Открыть папку расширения" в контекстном меню Adblock Plus он автоматически отроет .xpi файл:

скриншот
thumbxut.jpg

Это же удобней чем искать в папке extensions файл расширения с не известным названием типа {46551EC9-40F0-4e47-8E18-8E5CF550CFB8}

22-11-2012 19:25:18
Исправил мелкий баг: 25-10-2012 19:26:31

bunda1
Разобрался. Оказывается, у меня расширение xpi не было зарегистрировано ни на одну программу.
Установил ассоциацию на winrar и теперь открывается как у тебя.
Тогда вопрос снят. Извини.

Ну тогда хорошо :)

bunda1 подскажи пожалуйста, что нужно изменить в коде, чтобы пункт меню "Открыть папку расширения" добавлялся не только на странице расширений about:addons, но и в меню в боковой панели (использую All-in-One Sidebar). Побывал разные варианты, что-то не получается.

Inko7 пишет

Да, есть. Я ж про такие расширения и говорю - у тех у кого папки нет, но есть вот такие xpi-файлы.
Сейчас же, при попытке попасть в папку такого расширения, у меня выскакивает программа Universal Extractor для разархивации файла.
Наверное, было бы правильней для таких расширений просто открывать папку \Profile\extensions, а дальше самостоятельно находить нужный файл.
Можно еще дополнительно алертом выводить название таких файлов.

Кнопка Fire Explorer делает все это и даже больше. :)