У меня, кстати, не работает ваш код после запуска. Только после реинициализации.
Ну, это не наш код (мы бы до такого не додумались),
а модификация твоего кода, в попытке не засорять #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 (31-07-2015 11:00:39)
Отсутствует
Ну, это не наш код (мы бы до такого не додумались),
Это тонкий намек, что надо на"ты" перейти, или отказ от претензий? (буду, до прояснения, считать что первое )
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) });
А вот звуковой алерт (с предыдущим вариантом кнопки) возникает и на новом профиле.
И еще: в новом варианте, после перетаскивания кнопки в режиме кастомизации, у нее иконка пропадает, до тех пор, пока не отредактируешь.
Отредактировано turbot (31-07-2015 18:24:45)
Отсутствует
Тема перенесена из форума «Firefox» в форум «Сustom Buttons».
Все микробы умрут
Отсутствует
OmTatSat
Попробуйте по оси y задать положение 0 в:
(это для последнего варианта Dumby)
Отсутствует
"Автовыделение++", проблема
Проблема ещё и в том, что она в выключенном состоянии, при перемещении по вкладкам
сбрасывает подсвеченное через кнопку «Подсветить все» на панели поиска.
после перетаскивания кнопки в режиме кастомизации, у нее иконка пропадает, до тех пор, пока не отредактируешь
Да, ты прав. Действительно, лучше добавлять не к кнопке. Спасибо.
Решил вот попробовать для нескольких. Вроде работает
на #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 (01-08-2015 22:04:31)
Отсутствует
#ctraddon_extra-bar2
Упс, это я не для того тулбара кнопку дал. Впрочем, что с ним, что с #ctraddon_addon-bar - одна проблема.
Вроде работает
Да, спасибо. А саму "Спрятать панель" нельзя как-то поправить, чтобы таких проблем не было? Или в каких случаях, у каких кнопок, такая проблема будет?
А то я так и не понял, понял, что в новом варианте такого, что позволяет обойти это.
Добавлено 01-08-2015 22:56:22
Dumby
Эээ, и может подскажете, как в последний вариант еще и открытие по ctrl+ПКМ на странице добавить?
Отредактировано turbot (01-08-2015 22:56:22)
Отсутствует
А саму "Спрятать панель" нельзя как-то поправить, чтобы таких проблем не было? Или в каких случаях, у каких кнопок, такая проблема будет?
Что там поправлять, она же ничего не делает, только
регистрирует стиль для тулбара и переключает атрибут.
А какие проблемы могут быть у кнопок, расположенных на
таким образом стилизированном тулбаре, я не знаю.
как в последний вариант еще и открытие по 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, здравствуйте!
После обновления на Firefox 44 этот код и этот перестали работать, т.е. меню с закладками не появляется, а открывается обычное контестное меню. Пробовал удалять кнопку и создавать заново, отключать и включать дополнение Custom Buttons, но не помогает. Может быть в новой версии выпилили какую-то функцию и она перестала работать?
При нажатии на созданную кнопку на Панели инструментов или нажатии CTRL-RMB в окне браузера в Консоли браузера ничего не происходит.
PS: Еще хотел спросить. А возможно ли повесить на отдельное контекстное меню текущие открытые вкладки, и вызывать его например, при помощи сочетания ALT-RMB? Было бы очень удобно. Во первых, при открытии большого количества вкладок их поместится больше на экране, т.к. их расположение в виде контекстного меню будет более плотным, друг под другом, и в результате на экране будет видно больше текста в названии для каждой вкладки. Во-вторых, в полноэкранном режиме можно будет полностью Скрыть панели инструментов, в результате на экране освободится больше места.
Отредактировано xseed (09-02-2016 09:57:10)
Три студента и лопата заменяют экскаватор
Отсутствует
на отдельное контекстное меню текущие открытые вкладки
реализовал подобное с помощью 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
Отредактировано OmTatSat (31-01-2016 00:06:38)
Отсутствует
turbot, здравствуйте!
После обновления на Firefox 44 этот код и этот перестали работать, т.е. меню с закладками не появляется, а открывается обычное контестное меню. Пробовал удалять кнопку и создавать заново, отключать и включать дополнение Custom Buttons, но не помогает. Может быть в новой версии выпилили какую-то функцию и она перестала работать?
При нажатии на созданную кнопку на Панели инструментов или нажатии CTRL-RMB в окне браузера в Консоли браузера ничего не происходит.
Глюк в CB, надо было обновить его.
Три студента и лопата заменяют экскаватор
Отсутствует