2014-02-02 4 views
5

Я на самом деле пытаюсь разработать расширение Firefox с использованием apis высокого уровня и, в частности, пытаться избежать панели, чтобы автоматически скрывать, когда вы выбираете файл или когда вы щелкаете за пределами самой панели.Избегайте панели autoHide в расширении Firefox

Есть ли у кого-нибудь идеи, как это сделать?

Я знаю, что это возможно с помощью XUL, так почему это нелегко с помощью apis?

Заранее благодарю вас за ответы.

+1

Manny42 и @Noitidart: это не в API, потому что элементы интерфейса на основе Panel() 'предназначены для * временного * использования только. Панель * * *, созданная с помощью 'Panel()', разрешается открывать одновременно через * все * расширения SDK надстройки, установленные в этом профиле. ** Если другое расширение SDK Add-on открывает 'Panel()', ваш закроет. ** Он специально запрограммирован таким образом в [исходном коде API] (https://dxr.mozilla.org/mozilla-central /source/addon-sdk/source/lib/sdk/panel.js#114), и я проверил/подтвердил. Для получения дополнительной информации см. [Этот ответ] (http://stackoverflow.com/a/38294913/3773011). – Makyen

ответ

5

Это Offical метод SDK сделать это:

let myPanel = Panel({.....}) 

let { getActiveView }=require("sdk/view/core"); 
getActiveView(myPanel).setAttribute("noautohide", true); 
+0

Хорошо, спасибо за усилия, этот SDK убивает меня прямо сейчас ... Интересно, можем ли мы спросить Mozilla ... Или заполнить отчет об ошибке ... Хорошо еще раз спасибо! – Manny42

+0

ОК не проблема, кстати, ее беспорядочный и все, вы знаете, где у меня есть этот комментарий, где я говорю его, вероятно, последний ребенок, но я хочу проверить. вам не нужно делать все, что проверяет добавление событий listenr и прочее, просто запустите последнее окно и перейдите «var panelsInMainpop = aDOMWindow.document.querySelectorAll ('# mainpopupset panel'); var myPanel = panelsInMainpop [panelsInMainpop.length-1 ];» – Noitidart

+0

Я предлагаю просто поместить виджет туда с помощью sdk и по щелчку его создать свою панель, как вы думаете? – Noitidart

1

Идея от this

var toolbarbuttonPanel = doc.createElement('panel'); 
toolbarbuttonPanel.setAttribute('id', 'toolbarbutton-panel'); 
toolbarbuttonPanel.setAttribute('type', 'arrow'); 
toolbarbuttonPanel.setAttribute('noautohide', 'true'); // This is important 

var toolbarbuttonLabel = doc.createElement('label'); 
toolbarbuttonLabel.setAttribute('value', 'toolbarbutton panel'); 
toolbarbuttonPanel.appendChild(toolbarbuttonLabel); 

var mainPopupSet = document.querySelector('#mainPopupSet'); 
mainPopupSet.appendChild(toolbarbuttonPanel); 

Затем добавьте это на SDK действие/тумблер нажатием кнопки:

toolbarbuttonPanel.openPopup(btn); 

И Noitidart's comment

Смежные вопросы