Нашел код из дополнения "Context Bookmarks".

Выделить код

Код:

if(document.getElementById("contextbookmarksID")) return;
var contextmenu = document.getElementById('contentAreaContextMenu');
if(!contextmenu) return;
var bookmarksMenu = document.getElementById("bookmarksMenu");
if(!bookmarksMenu) return;

var dupNode = document.importNode(bookmarksMenu, true);
if(!dupNode) return;
dupNode.id = "contextbookmarksID";

contextmenu.appendChild(dupNode);

Добавил его в keyconfig на горячую клавишу, при нажатии появился пункт "Закладки". Но мне бы хотелось, чтобы в контекстном меню появился не пункт Закладки, а только пункт "Панель закладок".
1. Как это сделать?
2. Как сделать так, чтобы этот код автоматически выполнялся при старте браузера (чтобы не вешать его на горячую клавишу).

xseed пишет

1.  ... 2. ...

Использовать Custom Buttons, и во вкладку "Инициализация" новой или существующей кнопки:

Выделить код

Код:

(function() {
if(document.getElementById("contextbookmarksID")) return;
var contextmenu = document.getElementById('contentAreaContextMenu');
if(!contextmenu) return;
var bookmarksMenu = document.getElementById("bookmarksToolbarFolderMenu");
if(!bookmarksMenu) return;

var dupNode = document.importNode(bookmarksMenu, true);
if(!dupNode) return;
dupNode.id = "contextbookmarksID";

contextmenu.appendChild(dupNode);
})();
turbot пишет
xseed пишет

1.  ... 2. ...

Использовать Custom Buttons, и во вкладку "Инициализация" новой или существующей кнопки:

Получилось! Добавил созданную кнопку в контекстное меню через меню Вид - Панели инструментов - Изменить.
PS: А без Custom Buttons нельзя? А то okkamas_knife говорит, что это - новая поделка... :sick:

xseed пишет

А то okkamas_knife говорит, что это - новая поделка...

Это он о [firefox] нынешнем. :D Он-то как раз апологет Custom Buttons (и [seamonkey]).

xseed пишет

нельзя

Нет, если хотите

xseed пишет

чтобы этот код автоматически выполнялся при старте браузера

(ну разве что с userChrome.js, но это теже яйца, только сбоку).

xseed пишет

Получилось!

Не долго счастье было. Оказывается, Панель закладок появилась, но ни один пункт в ней не открывается! То есть я нажимаю любой пункт, контекстное меню, как и положено, исчезает, но ссылка не открывается, то есть ничего не происходит, 10 вкладок попытался открыть, но даже в консоли браузера ничего не появляется... Что это может быть?
PS: URL для закладок в контекстном меню в строке состояния видны.

xseed
Не по моим силенкам с этим разобраться. Просите помощи здесь.

xseed
Вот такое, спозаранку, придумалось:

Выделить код

Код:

(function() {
  if ( document.getElementById("contextBookmarksToolbar") ) return; 

  var contextMenu = document.getElementById("contentAreaContextMenu");
  var menu = document.createElement("menu");
  var menuPopup = document.createElement("menupopup");
  
  menu.setAttribute("id", "contextBookmarksToolbar");
  menu.setAttribute("class", "menu-iconic bookmark-item");
  menu.setAttribute("label", "Панель Закладок");
  menu.setAttribute("image", "chrome://browser/skin/places/bookmarksToolbar.png");

  menuPopup.setAttribute("id", "context_bookmarksToolbarPopup");
  menuPopup.setAttribute("placespopup", "true");
  menuPopup.setAttribute("context", "placesContext");
  menuPopup.setAttribute("openInTabs", "children");
  menuPopup.setAttribute("tooltip", "bhTooltip");
  menuPopup.setAttribute("popupsinherittooltip", "true");
  menuPopup.setAttribute("onpopupshowing", "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')");
  menuPopup.setAttribute("oncommand", "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);");
  menuPopup.setAttribute("onclick", "BookmarksEventHandler.onClick(event, this.parentNode._placesView);");
  
  menu.appendChild(menuPopup);
  contextMenu.appendChild(menu);

  contextMenu.addEventListener("popupshowing", function() {
    menu.hidden = !gContextMenu; 
  }, false);
})();

Работает, вроде. :)

turbot
Еще как работает! :) Плодотворное утро - спасибо

Есть же кнопка от Dumby и исправление к ней №9174

03-07-2015 13:37:40
Хотя я возможно не совсем понял, что требуется. :)

voqabuhe
Ха, поиском по версии для печати прошелся, но ответ на ваш вопрос пропустил.
Впрочем, это же для открытия жестом, а не для создания пункта в контекстном меню. Так что :P мимо.

turbot пишет

Так что :P мимо.

Ну мимо, но почти рядом. :) Да и ссылка здесь будет уместна, если кто будет искать по панель закладок

turbot пишет

Работает

turbot, большое вам спасибо!

А вот интересно, можно ли в Firefox создать собственное Контекстное меню, вызываемое отдельной горячей клавишей? И как в этом случае код кнопки будет выглядеть? Хотелось бы, конечно, чтобы для Панели закладок было отдельное контекстное меню, ведь в этом случае не потребуется перемещаться на пункт Панель закладок, что более удобно. Например, назначив открытие Панели закладок на CTRL-RMB.

xseed
Можно, конечно. Но это я точно не потяну. Если только опять утреннее сатори не настигнет. :) Попросите в теме, на которую я выше ссылку дал.

xseed
Родил, держите:

Выделить код

Код:

(function() {
  if (document.getElementById("context_bookmarksToolbarPopup")) return;
  
  var contextMenu = document.getElementById("contentAreaContextMenu");
  var menuPopup = document.createElement("menupopup");
  var parentNode = document.getElementById("mainPopupSet");
  
  menuPopup.setAttribute("id", "context_bookmarksToolbarPopup");
  menuPopup.setAttribute("placespopup", "true");
  menuPopup.setAttribute("context", "placesContext");
  menuPopup.setAttribute("openInTabs", "children");
  menuPopup.setAttribute("tooltip", "bhTooltip");
  menuPopup.setAttribute("popupsinherittooltip", "true");
  menuPopup.setAttribute("onpopupshowing", "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')");
  menuPopup.setAttribute("oncommand", "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);");
  menuPopup.setAttribute("onclick", "BookmarksEventHandler.onClick(event, this.parentNode._placesView);");
  
  parentNode.appendChild(menuPopup);
  
  contextMenu.addEventListener("popupshowing", function(event) {
    if (!event.ctrlKey) return;
    event.preventDefault(); 
    event.stopPropagation();
    menuPopup.openPopupAtScreen(event.screenX, event.screenY);
  }, false);
})();

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

xseed пишет

Если я добавляю ее в меню, то она перестает работать после перезагрузки браузера или же если просто, без перезагрузки, если я пытаюсь ей воспользоваться в новом окне.

Ага, известная проблема. Скройте кнопку стилем, чтоб не мешалась:

Выделить код

Код:

id-кнопки {display: none !important}

в userChrome.css. (Как узнать нужный селектор)
Еще вариант - Custom_Buttons/Merge_Custom_Buttons at master · Infocatcher/Custom_Buttons · GitHub
Либо вынести ее на дополнительный тулбар (в этой теме есть пара вариантов, как их получить) и скрыть его с [CB]Спрятать панель дополнений (нужно будет подредактировать селекторы в кнопке, примерно так), в результате:
thumb.png

06-07-2015 16:33:23

xseed пишет

неужели, для того чтобы они работали, им приходится для каждой функции держать отдельную кнопку

Нет. Большинство кнопок (например, если весь ее код обернут в функцию) можно совмещать в одну. Обычно автором указывается, можно ли запихивать в существующие. Тут, да, я забыл, указываю:
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.
:)

скрытый текст

turbot пишет

Родил, держите
Код:
(function() {
  if (document.getElementById("context_bookmarksToolbarPopup")) return;
 
  var contextMenu = document.getElementById("contentAreaContextMenu");
  var menuPopup = document.createElement("menupopup");
  var parentNode = document.getElementById("mainPopupSet");
 
  menuPopup.setAttribute("id", "context_bookmarksToolbarPopup");
  menuPopup.setAttribute("placespopup", "true");
  menuPopup.setAttribute("context", "placesContext");
  menuPopup.setAttribute("openInTabs", "children");
  menuPopup.setAttribute("tooltip", "bhTooltip");
  menuPopup.setAttribute("popupsinherittooltip", "true");
  menuPopup.setAttribute("onpopupshowing", "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')");
  menuPopup.setAttribute("oncommand", "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);");
  menuPopup.setAttribute("onclick", "BookmarksEventHandler.onClick(event, this.parentNode._placesView);");
 
  parentNode.appendChild(menuPopup);
 
  contextMenu.addEventListener("popupshowing", function(event) {
    if (!event.ctrlKey) return;
    event.preventDefault();
    event.stopPropagation();
    menuPopup.openPopupAtScreen(event.screenX, event.screenY);
  }, false);
})();


попробовал добавить эту кнопку, но ни по нажатию на неё ни по горячей клавише ничего не происходит, подскажите пожалуйста подробно для нуба как правильно её добавить.
П.С. добавлял в вкладку инициализация, вкладку кода оставил пустой

OmTatSat
Во вкладку инициализация, правильно. Меню закладок появляться будет только при вызове обычного контекстного меню (то бишь, при ПКМ по странице) с зажатым Ctrl'ом (if (!event.ctrlKey) return;). Клавишу-модификатор можно поменять.

28-07-2015 17:39:14
Если вам это меню нужно по нажатию на саму кнопку, то вот.

Если же вам нужно клавишами вызывать, то:

скрытый текст

Выделить код

Код:

(function() {
  if (document.getElementById("context_bookmarksToolbarPopup")) return;
  
  var menuPopup = document.createElement("menupopup");
  var parentNode = document.getElementById("mainPopupSet");
  
  menuPopup.setAttribute("id", "context_bookmarksToolbarPopup");
  menuPopup.setAttribute("placespopup", "true");
  menuPopup.setAttribute("context", "placesContext");
  menuPopup.setAttribute("openInTabs", "children");
  menuPopup.setAttribute("tooltip", "bhTooltip");
  menuPopup.setAttribute("popupsinherittooltip", "true");
  menuPopup.setAttribute("onpopupshowing", "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')");
  menuPopup.setAttribute("oncommand", "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);");
  menuPopup.setAttribute("onclick", "BookmarksEventHandler.onClick(event, this.parentNode._placesView);");
  
  parentNode.appendChild(menuPopup);

  addEventListener('keydown', (e)=> {
  if (e.altKey && e.shiftKey && e.keyCode == 66) { // здесь повешено на alt+shift+B (независимо от раскладки), код клавиш здесь смотрите: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
    e.preventDefault();
    e.stopPropagation();
    setTimeout(()=> menuPopup.openPopupAtScreen(500, 300), 100); // (500, 300) - координаты экрана (x,y), где будет открываться меню
  };
});
})();

28-07-2015 20:46:59
(Как сделать в последнем случае, чтобы появлялось возле курсора - не знаю. Спрашивайте в теме CB.)

turbot пишет

Если же вам нужно клавишами вызывать, то:

скрытый текст

Выделить код

Код:

(function() {
  if (document.getElementById("context_bookmarksToolbarPopup")) return;
  
  var menuPopup = document.createElement("menupopup");
  var parentNode = document.getElementById("mainPopupSet");
  
  menuPopup.setAttribute("id", "context_bookmarksToolbarPopup");
  menuPopup.setAttribute("placespopup", "true");
  menuPopup.setAttribute("context", "placesContext");
  menuPopup.setAttribute("openInTabs", "children");
  menuPopup.setAttribute("tooltip", "bhTooltip");
  menuPopup.setAttribute("popupsinherittooltip", "true");
  menuPopup.setAttribute("onpopupshowing", "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')");
  menuPopup.setAttribute("oncommand", "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);");
  menuPopup.setAttribute("onclick", "BookmarksEventHandler.onClick(event, this.parentNode._placesView);");
  
  parentNode.appendChild(menuPopup);

  addEventListener('keydown', (e)=> {
  if (e.altKey && e.shiftKey && e.keyCode == 66) { // здесь повешено на alt+shift+B (независимо от раскладки), код клавиш здесь смотрите: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
    e.preventDefault();
    e.stopPropagation();
    setTimeout(()=> menuPopup.openPopupAtScreen(500, 300), 100); // (500, 300) - координаты экрана (x,y), где будет открываться меню
  };
});
})();


28-07-2015 20:46:59
(Как сделать в последнем случае, чтобы появлялось возле курсора - не знаю. Спрашивайте в теме CB.)

Супер! ОГРОМНОЕ Спасибо! То что надо. Добавил жест в StrokeIt который нажимает alt shift b, и по жесту появляются закладки) - очень быстро) ещё раз Спасибо за быструю и квалифицированную помощь.

28-07-2015 21:52:03

turbot пишет

Меню закладок появляться будет только при вызове обычного контекстного меню (то бишь, при ПКМ по странице) с зажатым Ctrl'ом (if (!event.ctrlKey) return;). Клавишу-модификатор можно поменять.

выходит не до конца понял, что должно получится от кнопки) эту функцию у меня сейчас выполняет menu wizard

turbot пишет

Если вам это меню нужно по нажатию на саму кнопку, то вот.

на саму кнопку в принципе не нужно, просто для большей ясности происходящего сказал. Даже более того, буду пробовать убрать сами кнопки по Вашим рецептам в 16-ом сообщении

upd. добавил кнопки в панель дополнений и скрыл её, всё работает и ничего лишнего - огонь, я доволен)

turbot можете пожалуйста чуть подправить кнопку которая вызывается на alt shift b, чтобы меню закладок появлялось возле указателя мыши заместо всегда по центру, и чтобы на весь экран?

OmTatSat пишет

чтобы меню закладок появлялось возле указателя мыши

turbot пишет

(Как сделать в последнем случае, чтобы появлялось возле курсора - не знаю. Спрашивайте в теме CB.)

OmTatSat пишет

всегда по центру

Координаты сменить можно, в коде откомментировано, что править надо.

OmTatSat пишет

и чтобы на весь экран

Вот это не понял.

turbot пишет

Как сделать в последнем случае, чтобы появлялось возле курсора - не знаю

Может типа

скрытый текст

Выделить код

Код:

(box => {
    var popup = box.appendChild(document.createElement("menupopup"));
    for(var [attributeName, attributeValue] in Iterator({

        placespopup:          "true",
        context:              "placesContext",
        openInTabs:           "children",
        tooltip:              "bhTooltip",
        popupsinherittooltip: "true",
        onpopupshowing:       "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')",
        oncommand:            "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);",
        onclick:              "BookmarksEventHandler.onClick(event, this.parentNode._placesView);"

    })) popup.setAttribute(attributeName, attributeValue);

    addEventListener("keydown", e => {
        !e.repeat && !e.ctrlKey && e.shiftKey && e.altKey && !e.metaKey && e.code == "KeyB"
        && popup.openPopupAtScreen(MousePosTracker._x, MousePosTracker._y)
    });

})(this.appendChild(document.createElement("box")));

Dumby
О, спасибо. А почему при открытии EVENT_ALERT_DIALOG_OPEN (или какой другой?) проигрывается?

Dumby

скрытый текст
У меня, кстати, не работает ваш код после запуска. Только после реинициализации. И это не первый раз. Но в данном случае - не помогает (или я не туда впиндюрить таймаут пытаюсь). Но зато здесь

Выделить код

Код:

&& setTimeout(()=> popup.openPopupAtScreen(MousePosTracker._x, MousePosTracker._y), 100)

- избавляет от звукового алерта.

Может это быть связано с этим: 1148593 – addEventListener should use JS::AutoSetAsyncStackForNewCalls? :rolleyes:

turbot пишет

У меня, кстати, не работает ваш код после запуска. Только после реинициализации.

Ну, это не наш код (мы бы до такого не додумались),
а модификация твоего кода, в попытке не засорять #mainPopupSet.

Сейчас поставил  FF 42.0a1 (2015-07-30), запилил новый чистый профиль,
установил Custom Buttons 0.0.5.9pre1 и создал кнопку с нашим кодом.
Включил на компе звук, открыл в FF mp3-файл, чтобы убедиться, что звук OK.

Закрыл FF, открыл FF. Нажимаю Alt+Shift+B, и ...
popup появился, звуковой алерт не услышал. :(

Но оказалось, что MousePosTracker пасёт не те координаты, которые я ожидал.
Поскольку я тоже не знаю, что нужно вызвать, чтобы обрести позицию мыши,
то ничего лучше не придумал, как добавить лишний листенер.

скрытый текст

Выделить код

Код:

(box => {
    var popup = box.appendChild(document.createElement("menupopup"));
    for(var [attributeName, attributeValue] in Iterator({

        placespopup:          "true",
        context:              "placesContext",
        openInTabs:           "children",
        tooltip:              "bhTooltip",
        popupsinherittooltip: "true",
        onpopupshowing:       "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=TOOLBAR')",
        oncommand:            "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);",
        onclick:              "BookmarksEventHandler.onClick(event, this.parentNode._placesView);"

    })) popup.setAttribute(attributeName, attributeValue);

    var x, y; addEventListener("mousemove", e => {x = e.screenX, y = e.screenY});

    addEventListener("keydown", e => {
        if (!e.repeat && !e.ctrlKey && e.shiftKey && e.altKey && !e.metaKey && e.code == "KeyB") {
            e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation();
            popup.openPopupAtScreen(x, y);
        }
    }, true);
    
})(this.appendChild(document.createElement("box")));

Dumby пишет

Ну, это не наш код (мы бы до такого не додумались),

Это тонкий намек, что надо на"ты" перейти, или отказ от претензий? :rolleyes: (буду, до прояснения, считать что первое :D)

Dumby пишет

popup появился, звуковой алерт не услышал. :(

Ага, виноват, поленился на чистом проверить. Нашел виновника непоявления. Проблема возникает (проверял на чистом профиле) если кнопка расположена на аддон-баре от Classic Theme Restorer скрытом кнопкой [CB]Спрятать панель дополнений, поправленой (испорченой?) под него

скрытый текст

Выделить код

Код:

// Спрятать панель дополнений от 11.02.2014.


this.onclick = function(e) {
     if ( e.button == 0 ) pref.value = pref.value ? false : true;
};

var right = 4; // отступ справа в px  

var s = 'CB.hideAddonBar2'
cbu.isPref(s, false );
var pref = Application.prefs.get(s);


function toggleButton() {   
   document.getElementById("ctraddon_extra-bar2").setAttribute('hideElements', pref.value );     
    
   var icon = self.ownerDocument.getAnonymousElementByAttribute( self, "class", "toolbarbutton-icon");
   icon.style.transform = pref.value ? "rotate(180deg)" : "";   // перевернуть иконку
   
   self.tooltipText = pref.value ? 'Показать панель дополнений' : 'Спрятать панель дополнений';     
};
toggleButton();
gPrefService.addObserver( s, toggleButton, false );
addDestructor(function() { gPrefService.removeObserver( s, toggleButton, false ) });


// Стиль для панели дополнений  ................................
var uri = makeURI('data:text/css,'+ encodeURIComponent('\
/* минимальный и прозрачный */\
#ctraddon_extra-bar2 {\
margin: 0!important;\
border-color: transparent!important;\
width: auto;\
height: 24px!important;\
max-height: 24px!important;\
min-height: 24px!important;\
position: fixed;\
padding-right: 2px!important;\
right: ' + right + 'px;\
background: transparent !important;\
z-index: 999 !important;\
}\
#ctraddon_extra-bar2 .toolbarbutton-menubutton-dropmarker {\
width: 15px!important;\
max-width: 15px!important;\
min-width: 15px!important;\
}\
#ctraddon_extra-bar2 toolbarbutton {\
vertical-align: middle !important;\
height: 24px!important;\
max-height: 24px!important;\
min-height: 24px!important;\
}\
/* если открыть настройку инструментов */\
#ctraddon_extra-bar2[customizing] {\
background: -moz-Dialog;\
border-radius: 7px 0 0 0;\
visibility: visible !important;\
}\
/* убираем лишние элементы, убираем кнопки при добавлении атрибута hideElements */\
#ctraddon_extra-bar2-closebutton,\
#ctraddon_extra-bar2:not([customizing])[hideElements="true"] label,\
#ctraddon_extra-bar2:not([customizing])[hideElements="true"] hbox,\
#ctraddon_extra-bar2:not([customizing])[hideElements="true"] .statusbarpanel-iconic,\
#ctraddon_extra-bar2:not([customizing])[hideElements="true"] toolbarbutton-icon,\
#ctraddon_extra-bar2:not([customizing])[hideElements="true"] statusbarpanel,\
#ctraddon_extra-bar2:not([customizing])[hideElements="true"] toolbaritem,\
#ctraddon_extra-bar2:not([customizing])[hideElements="true"] toolbarbutton:not([id="' + _id + '"]):not([id="custombuttons-button29"]),\
#ctraddon_extra-bar2:not([customizing])[hideElements="true"] #UserScriptLoader-icon {\
display: none !important;\
}\
\
#ctraddon_extra-bar2 > statusbar > .statusbar-resizerpanel {\
position: relative;\
margin-right:-4px;\
}\
'));
const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
addDestructor(function() { sss.unregisterSheet(uri, sss.AGENT_SHEET) });


Кто виноват, что делать?.. Кнопка, CTR? ВыТы не мог бы посмотреть? (Хотя, в случае "Автовыделение++", проблема не в ctr'овской панели - там на чистом профиле проверял.)

А вот звуковой алерт (с предыдущим вариантом кнопки) возникает и на новом профиле. :P
И еще: в новом варианте, после перетаскивания кнопки в режиме кастомизации, у нее иконка пропадает, до тех пор, пока не отредактируешь.

Тема перенесена из форума «Firefox» в форум «Сustom Buttons».

turbot пишет

OmTatSat пишет:

    и чтобы на весь экран

Вот это не понял.

на весь экран

скрытый текст
mvn4zuba9bxg.png

не на весь
скрытый текст
2sdwkcovz4xa.png

OmTatSat
Попробуйте по оси y задать положение 0 в:

Выделить код

Код:

var x, y; addEventListener("mousemove", e => {x = e.screenX, y = 0});

(это для последнего варианта Dumby)

turbot пишет

"Автовыделение++", проблема

Проблема ещё и в том, что она в выключенном состоянии, при перемещении по вкладкам
сбрасывает подсвеченное через кнопку «Подсветить все» на панели поиска.

после перетаскивания кнопки в режиме кастомизации, у нее иконка пропадает, до тех пор, пока не отредактируешь

Да, ты прав. Действительно, лучше добавлять не к кнопке. Спасибо.
Решил вот попробовать для нескольких. Вроде работает
на #ctraddon_extra-bar2, скрытом поправленой кнопкой [CB]Спрятать панель дополнений.

скрытый текст

Выделить код

Код:

gBrowser.currentURI.spec == "about:customizing" || (popupset => {
    var data = {
          "folder=TOOLBAR":           {code: "KeyB", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false}
        , "folder=BOOKMARKS_MENU":    {code: "KeyM", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false}
        , "folder=UNFILED_BOOKMARKS": {code: "KeyU", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false}
        , "sort=8&maxResults=16":     {code: "KeyN", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false}
    };
    popupset.id = "CB" + _id.slice(20) + "-popupset";
    addDestructor(() => popupset.remove());

    var popups = [];
    for(var [place, shortcut] in Iterator(data)) {
        var box = popupset.appendChild(document.createElement("box"));
        var popup = box.appendChild(document.createElement("menupopup"));
        for(var [attributeName, attributeValue] in Iterator({

            placespopup:          "true",
            context:              "placesContext",
            openInTabs:           "children",
            tooltip:              "bhTooltip",
            popupsinherittooltip: "true",
            onpopupshowing:       "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:" + place + "');",
            oncommand:            "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);",
            onclick:              "BookmarksEventHandler.onClick(event, this.parentNode._placesView);"

        })) popup.setAttribute(attributeName, attributeValue);
        popups.push(popup); popup.shortcut = shortcut;
    }
    var x, y; addEventListener("mousemove", e => {x = e.screenX; y = e.screenY});
    addEventListener("keydown", e => {
        popups.some(popup => {
            for(var property in popup.shortcut) {
                if (popup.shortcut[property] != e[property]) return false;
            }
            e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation();
            popup.openPopupAtScreen(x, y + 1); return true;
        });
    }, true);
})(document.documentElement.appendChild(document.createElement("popupset")));

Dumby пишет

#ctraddon_extra-bar2

Упс, это я не для того тулбара кнопку дал. Впрочем, что с ним, что с #ctraddon_addon-bar - одна проблема.

Dumby пишет

Вроде работает

Да, спасибо. А саму "Спрятать панель" нельзя как-то поправить, чтобы таких проблем не было? Или в каких случаях, у каких кнопок, такая проблема будет?
А то я так и не понял, понял, что в новом варианте такого, что позволяет обойти это. :rolleyes:

01-08-2015 22:56:22
Dumby
Эээ, и может подскажете, как в последний вариант еще и открытие по ctrl+ПКМ на странице добавить?

turbot пишет

А саму "Спрятать панель" нельзя как-то поправить, чтобы таких проблем не было? Или в каких случаях, у каких кнопок, такая проблема будет?

Что там поправлять, она же ничего не делает, только
регистрирует стиль для тулбара и переключает атрибут.
А какие проблемы могут быть у кнопок, расположенных на
таким образом стилизированном тулбаре, я не знаю.

как в последний вариант еще и открытие по ctrl+ПКМ на странице добавить?

Может так

скрытый текст

Выделить код

Код:

addEventListener("contextmenu", e => {
        if (
            e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey && e instanceof Event
            && (e.target.ownerGlobal.top == content || e.target == gBrowser)
        ) {
            e.preventDefault();
            popups[0].openPopupAtScreen(x, y + 1);
        }
    }, true, gBrowser);

turbot Dumby Спасибо Вам

Dumby пишет

Что там поправлять, она же ничего не делает, только
регистрирует стиль для тулбара и переключает атрибут.

Вот и мне непонятно. Но факт. Без этой кнопки на этом тулбаре - проблемы нет. Пробовал задержку выставлять, перед регистрацией стиля, - не помогает...

Dumby пишет

Может так

Ага, спасибо, идеально. :)

turbot, здравствуйте!
После обновления на Firefox 44 этот код и этот перестали работать, т.е. меню с закладками не появляется, а открывается обычное контестное меню. Пробовал удалять кнопку и создавать заново, отключать и включать дополнение Custom Buttons, но не помогает. Может быть в новой версии выпилили какую-то функцию и она перестала работать?
При нажатии на созданную кнопку на Панели инструментов или нажатии CTRL-RMB в окне браузера в Консоли браузера ничего не происходит.

PS: Еще хотел спросить. А возможно ли повесить на отдельное контекстное меню текущие открытые вкладки, и вызывать его например, при помощи сочетания ALT-RMB? Было бы очень удобно. Во первых, при открытии большого количества вкладок их поместится больше на экране, т.к. их расположение в виде контекстного меню будет более плотным, друг под другом, и в результате на экране будет видно больше текста в названии для каждой вкладки. Во-вторых, в полноэкранном режиме можно будет полностью Скрыть панели инструментов, в результате на экране освободится больше места.

xseed пишет

на отдельное контекстное меню текущие открытые вкладки

реализовал подобное с помощью  https://addons.mozilla.org/ru/firefox/addon/enhanced-middle-click/?src=api
и ahk скрипта, его описание  https://addons.mozilla.org/ru/firefox/addon/enhanced-middle-click/reviews/user:4913006

xseed пишет

turbot, здравствуйте!
После обновления на Firefox 44 этот код и этот перестали работать, т.е. меню с закладками не появляется, а открывается обычное контестное меню. Пробовал удалять кнопку и создавать заново, отключать и включать дополнение Custom Buttons, но не помогает. Может быть в новой версии выпилили какую-то функцию и она перестала работать?
При нажатии на созданную кнопку на Панели инструментов или нажатии CTRL-RMB в окне браузера в Консоли браузера ничего не происходит.

Глюк в CB, надо было обновить его.