Нашел код из дополнения "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 (02-07-2015 20:19:58)
Три студента и лопата заменяют экскаватор
Отсутствует
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); })();
Отсутствует
xseed пишет1. ... 2. ...
Использовать Custom Buttons, и во вкладку "Инициализация" новой или существующей кнопки:
Получилось! Добавил созданную кнопку в контекстное меню через меню Вид - Панели инструментов - Изменить.
PS: А без Custom Buttons нельзя? А то okkamas_knife говорит, что это - новая поделка...
Три студента и лопата заменяют экскаватор
Отсутствует
А то okkamas_knife говорит, что это - новая поделка...
Это он о нынешнем. Он-то как раз апологет Custom Buttons (и ).
нельзя
Нет, если хотите
чтобы этот код автоматически выполнялся при старте браузера
(ну разве что с userChrome.js, но это теже яйца, только сбоку).
Отсутствует
Получилось!
Не долго счастье было. Оказывается, Панель закладок появилась, но ни один пункт в ней не открывается! То есть я нажимаю любой пункт, контекстное меню, как и положено, исчезает, но ссылка не открывается, то есть ничего не происходит, 10 вкладок попытался открыть, но даже в консоли браузера ничего не появляется... Что это может быть?
PS: URL для закладок в контекстном меню в строке состояния видны.
Отредактировано xseed (02-07-2015 23:24:19)
Три студента и лопата заменяют экскаватор
Отсутствует
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); })();
Работает, вроде.
Отсутствует
Отсутствует
voqabuhe
Ха, поиском по версии для печати прошелся, но ответ на ваш вопрос пропустил.
Впрочем, это же для открытия жестом, а не для создания пункта в контекстном меню. Так что мимо.
Отсутствует
Так что мимо.
Ну мимо, но почти рядом. Да и ссылка здесь будет уместна, если кто будет искать по панель закладок
Отредактировано voqabuhe (04-07-2015 00:11:06)
Отсутствует
Работает
turbot, большое вам спасибо!
А вот интересно, можно ли в Firefox создать собственное Контекстное меню, вызываемое отдельной горячей клавишей? И как в этом случае код кнопки будет выглядеть? Хотелось бы, конечно, чтобы для Панели закладок было отдельное контекстное меню, ведь в этом случае не потребуется перемещаться на пункт Панель закладок, что более удобно. Например, назначив открытие Панели закладок на CTRL-RMB.
Отредактировано xseed (04-07-2015 01:39:42)
Три студента и лопата заменяют экскаватор
Отсутствует
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 (04-07-2015 17:16:42)
Отсутствует
Получилось! turbot, спасибо за очередную функцию! Теперь можно открывать закладки не выходя из полноэкранного режима!
Только для того, чтобы она работала, надо ее добавить не в меню, а на Панель инструментов. Если я добавляю ее в меню, то она перестает работать после перезагрузки браузера или же если просто, без перезагрузки, если я пытаюсь ей воспользоваться в новом окне. Приходится терпеть лишнюю кнопку на Панели инструментов, что, конечно, неудобно, но в принципе, не критично. Но с другой стороны у знающих людей наверняка не одна функция под рукой, неужели, для того чтобы они работали, им приходится для каждой функции держать отдельную кнопку на Панели инструментов?
Отредактировано xseed (06-07-2015 15:23:40)
Три студента и лопата заменяют экскаватор
Отсутствует
Если я добавляю ее в меню, то она перестает работать после перезагрузки браузера или же если просто, без перезагрузки, если я пытаюсь ей воспользоваться в новом окне.
Ага, известная проблема. Скройте кнопку стилем, чтоб не мешалась:
в userChrome.css. (Как узнать нужный селектор)
Еще вариант - Custom_Buttons/Merge_Custom_Buttons at master · Infocatcher/Custom_Buttons · GitHub
Либо вынести ее на дополнительный тулбар (в этой теме есть пара вариантов, как их получить) и скрыть его с [CB]Спрятать панель дополнений (нужно будет подредактировать селекторы в кнопке, примерно так), в результате:
Добавлено 06-07-2015 16:33:23
неужели, для того чтобы они работали, им приходится для каждой функции держать отдельную кнопку
Нет. Большинство кнопок (например, если весь ее код обернут в функцию) можно совмещать в одну. Обычно автором указывается, можно ли запихивать в существующие. Тут, да, я забыл, указываю:
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.
Отредактировано turbot (06-07-2015 16:33:45)
Отсутствует
Родил, держите
Код:
(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 (28-07-2015 16:12:56)
Отсутствует
OmTatSat
Во вкладку инициализация, правильно. Меню закладок появляться будет только при вызове обычного контекстного меню (то бишь, при ПКМ по странице) с зажатым Ctrl'ом (if (!event.ctrlKey) return;). Клавишу-модификатор можно поменять.
Добавлено 28-07-2015 17:39:14
Если вам это меню нужно по нажатию на саму кнопку, то вот.
Отредактировано turbot (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 (28-07-2015 20:46:59)
Отсутствует
Если же вам нужно клавишами вызывать, то:
скрытый текстВыделить кодКод:
(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
Меню закладок появляться будет только при вызове обычного контекстного меню (то бишь, при ПКМ по странице) с зажатым Ctrl'ом (if (!event.ctrlKey) return;). Клавишу-модификатор можно поменять.
выходит не до конца понял, что должно получится от кнопки) эту функцию у меня сейчас выполняет menu wizard
Если вам это меню нужно по нажатию на саму кнопку, то вот.
на саму кнопку в принципе не нужно, просто для большей ясности происходящего сказал. Даже более того, буду пробовать убрать сами кнопки по Вашим рецептам в 16-ом сообщении
upd. добавил кнопки в панель дополнений и скрыл её, всё работает и ничего лишнего - огонь, я доволен)
Отредактировано OmTatSat (28-07-2015 21:57:51)
Отсутствует
turbot можете пожалуйста чуть подправить кнопку которая вызывается на alt shift b, чтобы меню закладок появлялось возле указателя мыши заместо всегда по центру, и чтобы на весь экран?
Отсутствует
чтобы меню закладок появлялось возле указателя мыши
(Как сделать в последнем случае, чтобы появлялось возле курсора - не знаю. Спрашивайте в теме CB.)
всегда по центру
Координаты сменить можно, в коде откомментировано, что править надо.
и чтобы на весь экран
Вот это не понял.
Отсутствует
Как сделать в последнем случае, чтобы появлялось возле курсора - не знаю
Может типа
(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
&& setTimeout(()=> popup.openPopupAtScreen(MousePosTracker._x, MousePosTracker._y), 100)
- избавляет от звукового алерта.
Может это быть связано с этим: 1148593 – addEventListener should use JS::AutoSetAsyncStackForNewCalls?
Отсутствует