Большое спасибо за наводку на это дополнение!
Отказался от гуглтулбара
Отсутствует
Это fokanik-у благодарности интересный у него код. кнопки.
Сам нарадоваться не могу, еще бы кто функцию для вставки разделителя в контекстном меню выложил, так и смотрелось бы еще солидно.
Отсутствует
Так давали код
https://forum.mozilla-russia.org/viewto … 08#p690108
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
Так давали код
https://forum.mozilla-russia.org/viewto … 08#p690108
Да там что-то геморно с этими сепараторами, в одном меню два сепаратора появляется, а в другом нормально все. Ну как-то так:
if ( this.hasAttribute("initialized") ) return; var dlm = "data:image/ico;base64,AAABAAEAGDAAAAEAIACICQAAFgAAACgAAAAYAAAAMAAAAAEAIAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFZUAAEAAAAfAAEAHx03AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYlkAAQAVACs+LwCtAAMAgAAAAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAGoNDAL3/oCCzPjwAtgAAAIAAGwAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAig0YAtf+vL7T/7lCx/8oxpyU0AL4AAAByAC0AHZh6BQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFHAAhTNACe/5ogzP/YQb//xyj//9Q05/+9Ja4BHQC5AAAAYwAqABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALzoABjwsAIP9hBDe/9tBxf/JLPv/xyz//8cs///WMu7tnhOvAA0AswAAAFcKMQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiNwANHSAAd/OACuP/40bE/8cq///HLP//yS3//8kt///HLf//0THv85ENxAAVALsAAABLACIADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGGABb7XgA2P/JKtj/xyL//8ks/f/JLf3/yS3//8kt/f/HKv3/xyD//8Qf7sJzAMsACAChAAAAOzxGAAYAAAAAAAAAAAAAAABBUVgCABUtAgAVKgIbLTwBAAAAAGNGABnrgBfw//+6+///t/7/9Zj//8Yk/f/HLP3/yi3//84t/f/KJf3//8H///+3////v/eiSwDeAAoAVAANAA8AAAAAYmVgBAYdMSwACidXAA0oXgANKF4ACihQAAAnIpVMC4C1WAChokYAnpU/AKmVNwDL+mIA//9oAP//agD//38A//+LAP+iPADvfTwArcReAJvtehCiXUYAUAAAAAAAAAAAVlhRSEREObQ/QzzYPkQ82kNGP9svNjTGAAUifAAAJUUAACAkAAUtQAAaVH8DKlHJekk6/3c/L/18Pij/pUEG/d4/AP9eDQDhAAAATgAAAAAAAAAAAAAAAAAAAABqa2ACUE48l5WQd7qwrJXzqKKG/7Snhv8KEhr8RmJ96xM5XsIAIk6uGlGO2lGO0fesydj/ssnG/6PJ2f+Ewvj/VJPg/zpgmP8kQVj6ABISnAASIiIAAAAAAAAAAAAAAABta14dYFlJpbW1pZQ6OjL4hIh9/qKjmv2Am6L/eK/u/id12/9vre3/kdT//8fm8/+w1vD9m8fw/aPE3P29ysf/WJ3w/Sd9/f9Olv/fOXe/4wAOMl4AAAAAAAAAAAAAAABvb2Aob2pUqKqjibJ1cFv/lY53/X2Bd/211N7/NoHr/UGQ//2V1v//js7//YTH//93vP/9eLz//nq9//19wf//UZb7/S967f5Jk//uRojc0gAgR4UFGzQIAAAAAAAAAABycGMud3BZr6qjidyspY3/r6eI/Wt3cP211OX/N4Tt/Wut//14uf//d7f//Xy6//99vf/9gb///YTB//2Jx///Zqj//Shw3v4sdeD5OX/bvidiosIFGjIOAAAAAAAAAAB4d2gwgHpjw62njeqloIb/raKG/2p1b//H7fv/Knzt/2+0//96uv//fLr//329//+Ewf//iMb//4nH//+Oyv//b7D//zF87f8+ifb/TJP2xSpmra4AGDQRAAAAAAAAAAB/fWoxgHhi1Kylje6looj/qKCD/X2JhP3Z/f//MoDu/Xy6//19vf//gL///YbH//+Lx//9iMf//YnG//2W0f//fLf//SVw4f06g+n/RInmxR9Wm5YAGjceAAAAAAAAAACAfWs1fXhi2Kylie6loIT/pZ6B/ZiekP3o////W6D2/YbH//2Nyv//kM7//ZrT//+d1P/9oNj//aXZ//2v4///c7D//SRw2/1Wnfr/Zaz/xDJ1xLEAGDQaAAAAAAAAAACAfW0qb2hT1qijjveqpY3/rKOI/3x/cP/r////TJX1/3y9//+V0///ltH//5XR//+d0///otn//6fb//+q3v//Y6P9/z+L8/9Qlvj/RIvpxCBbo5UBGzcYAAAAAAAAAACDf2sea2hW0Lq/t/+/xsH/vb21/ZabkP3O6ej/b8z//XXO//288///xPj//cf6//+v5v/9quD//azj//216f//Zar//TqD4/5MkPD4UJXwsCdlsKABGzcWAAAAAAAAAACBgW0HVFFBnrW5sP/Hzsn/xszH/rWwnf6vydH/hLXw/xNZsv99ufv/uvP//ub////m///90////c////3t////i+n//Xze//4/htz3LGu11iVgpZ8AFS8EAAAAAAAAAAAAAAAAdXBeZXNrVPOBfGD3gHpe9ouAZvgyMiTpf5aex1Z3kDwva6qrS4jM9dT///9vo9v/NGun/2J/kf9TeJH/SW2R/0tqhv9oc33/VJjY/iVdllEAAAAAAAAAAAAAAAAAAAAAhoZ3FHByZlhrcmtia3NvYmt1cmR6iY1EAAAAAAAAAACQtdYFMWWeY1SY2L1JcqX/x6Jr/v/6ff3/4Vj//+FG/f/YKP96RADmAExqd2uVxA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+w2xQyQ0xo/4EA9/aNIP74hhX/+oYQ/f+EDf+GRgCDA0s/AwAAAAAAAAAAAAAAAAAAAAD//D////g////4H///8Af//+AH///AA///gAH//4AA/+EAAP+AAAH/gAAP/wAAB/8AAAf/AAAD/wAAA/8AAAP/AAAD/wAAA/8AAAP/AAAD/wAAA/+AAAf/gYAH///gD/8="; var smp = "data:image/ico;base64,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"; var vlc = "data:image/ico;base64,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"; var smt = "data:image/ico;base64,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"; Open("Download Master", "C:\\Program Files\\Download Master\\dmaster.exe", "", dlm); Open("SMPlayer", "C:\\Program Files\\SMPlayer\\smplayer.exe", "-add-to-playlist", smp); Open("Video Lan", "c:\\Program Files\\VideoLAN\\VLC\\vlc.exe", "-AddToPlaylist", vlc); Open("SMTube", "C:\\Program Files\\SMPlayer\\smtube.exe", "", smt); Separator("SMTube"); //---------------------------------------------------------------------------------------------- function Open(name, prog, param, image){// Открыть ссылку или адрес текущей страницы в программе var menuitem = document.createElement("menuitem"); var contextMenu = document.getElementById("contentAreaContextMenu"); menuitem.id = name; menuitem.setAttribute("label", name); menuitem.setAttribute("class", "menuitem-iconic"); menuitem.setAttribute("image", image); document.getElementById("context-sep-open").parentNode.insertBefore( menuitem, document.getElementById("context-sep-open") ); addEventListener("popupshowing", ()=> menuitem.hidden = !gContextMenu, false, contextMenu ); addDestructor( ()=> contextMenu.removeChild(menuitem)); addEventListener("command", function(e) { if ( e.button ) return; var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); file.initWithPath(prog); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); if (!gContextMenu.onLink) {process.run(false, [param, content.location.href], 2);} else {process.run(false, [param, gContextMenu.getLinkURL()], 2);};}, false, menuitem ); }; //---------------------------------------------------------------------------------------------- function Separator(id) { if (document.getElementById("separator")) return; var contextMenu = document.getElementById("contentAreaContextMenu"); var refChild = document.getElementById(id); //id пункта, после которого вставить сепаратор var menuseparator = document.createElement("menuseparator"); menuseparator.id = "separator"; //id сепаратора contextMenu.insertBefore(menuseparator, refChild.nextSibling); addEventListener("popupshowing", function(){ // удалите листенер, если хотите, чтобы сепаратор показывался всегда, а не только если в контекстном меню виден родительский пункт var hidden = refChild.getAttribute("hidden") == "true"; menuseparator.setAttribute("hidden", hidden.toString()); }, false, contextMenu); }; //----------------------------------------------------------------------------------------------
Что делать? Не нравится мне это.
Отредактировано fokanik (05-08-2015 23:40:30)
Отсутствует
Есть часть кода из кнопки
(function() { var htmlEscape = function(s) { s = s.replace(/&/g, "&"); s = s.replace(/>/g, ">"); s = s.replace(/</g, "<"); s = s.replace(/"/g, """); return s; }; var copyTabInfo = function (aAsHTML) { var tab = document.popupNode; var title = tab.label; var url = gBrowser.getBrowserForTab(tab).contentWindow.location.href; var txt = aAsHTML ? '<a href="' + htmlEscape(url) + '">' + htmlEscape(title) + '</a>' : title + "\n" + url; Cc["@mozilla.org/widget/clipboardhelper;1"] .getService(Ci.nsIClipboardHelper) .copyString(txt); }; var copyTabBBC = function (aAsBBC) { var tab = document.popupNode; var title = tab.label; var url = gBrowser.getBrowserForTab(tab).contentWindow.location.href; var txt = aAsBBC ? '[url=' + htmlEscape(url) + ']' + htmlEscape(title) + '[/url]' : title + "\n" + url; Cc["@mozilla.org/widget/clipboardhelper;1"] .getService(Ci.nsIClipboardHelper) .copyString(txt); }; var menuitem1 = document.createElement("menuitem"); menuitem1.setAttribute("label", "Название и адрес"); menuitem1.addEventListener("command", function() { copyTabInfo(false); }, false); var menuitem2 = document.createElement("menuitem"); menuitem2.setAttribute("label", "Адрес и название как HTML"); menuitem2.addEventListener("command", function() { copyTabInfo(true); }, false); var menuitem3 = document.createElement("menuitem"); menuitem3.setAttribute("label", "Адрес и название как BBCode"); menuitem3.addEventListener("command", function() { copyTabBBC(true); }, false); setTimeout(function() { gBrowser.mStrip.childNodes[1].appendChild(document.createElement("menuseparator")); gBrowser.mStrip.childNodes[1].appendChild(menuitem1); gBrowser.mStrip.childNodes[1].appendChild(menuitem2); gBrowser.mStrip.childNodes[1].appendChild(menuitem3); }, 0); })();
Отредактировано oleg.sgh (08-08-2015 10:48:05)
Отсутствует
Как добавить пункты ?:
Адрес и редактированное название как HTML
Адрес и редактированное название как BBCode
((tabMenu)=> { [ "Копировать адрес и название", "Копировать адрес и название как HTML", "Копировать адрес и редактированное название как HTML", "Копировать адрес и название как BBCode", "Копировать адрес и редактированное название как BBCode", ] .forEach(function(m) { var menuitem = tabMenu.appendChild( document.createElement("menuitem") ); menuitem.setAttribute("label", m ); menuitem.onclick =()=> getTabInfo( m, document.popupNode ); }); function getTabInfo(m, tab) { var info, lab = tab.label, url = tab.linkedBrowser.currentURI.spec; if (m.length > 38) lab = custombuttons.promptBox("Измените название вкладки:", null, lab)[1]; switch(m.slice(-4)) { case "Code": info = '[url="' + url + '"]' + lab + '[/url]'; break; case "HTML": info = '<a href="' + url + '">' + lab + '</a>'; break; default: info = lab + "\n" + url; } gClipboard.write( info ); tabMenu.hidePopup(); }; })(document.getElementById("tabContextMenu"));
Отредактировано bunda1 (08-08-2015 14:56:33)
Отсутствует
bunda1
Сдается, что проще свой код было сделать...
У меня был свой похожий код.
Упс, забил деструктор добавить что бы пункты меню не дублировались при открытии настройки панелей. Сейчас схожу в магазин за энергетическим напитком и добавлю.
Отсутствует
oleg.sgh
((tabMenu)=> { [ "Копировать адрес и название", "Копировать адрес и название как HTML", "Копировать адрес и редактированное название как HTML", "Копировать адрес и название как BBCode", "Копировать адрес и редактированное название как BBCode", ] .forEach(function(m) { var menuitem = tabMenu.appendChild( document.createElement("menuitem") ); menuitem.setAttribute("label", m ); menuitem.onclick =()=> getTabInfo(m, document.popupNode); }); addDestructor(function() { [...tabMenu.childNodes].forEach(function(el) { if (el.onclick == '()=> getTabInfo(m, document.popupNode)') tabMenu.removeChild(el); }) }); function getTabInfo(m, tab) { var info, lab = tab.label, url = tab.linkedBrowser.currentURI.spec; if ( m.length > 38 ) lab = custombuttons.promptBox("Измените название вкладки:", null, lab)[1]; switch(m.slice(-4)) { case "Code": info = '[url="' + url + '"]' + lab + '[/url]'; break; case "HTML": info = '<a href="' + url + '">' + lab + '</a>'; break; default: info = lab + "\n" + url; } gClipboard.write(info); tabMenu.hidePopup(); }; })(document.getElementById("tabContextMenu"));
Отсутствует
сделать два пункта копировать ссылку на изображение в HTML (<img src="ссылка на картинку" >) и в BBCode
Это не сложно, но есть проблемы некоторые изображения на страницах это ссылки или часть фонового изображения или над изображением находится другое прозрачное изображени.
Отредактировано bunda1 (08-08-2015 16:04:02)
Отсутствует
bunda1
некоторые изображения на страницах это ссылки или часть фонового изображения или над изображением находится другое прозрачное изображени
Это понятно.. Есть пункт открыть изображение для подобного.
Отсутствует
bunda1
Пока ты здесь, можно как то убрать подчеркивание горячих клавиш, мож костыль какой.
Точно не знаю но кажется нужно через css код что то сделать с .menu-accel или .menu-accel-container
Отсутствует
bunda1
Стилями их никак не убрать. Проверено.
разве только убирать вместе с подсказками о горячих клавишах:
/* Убираем подсказки о горячих клавишах */ .menu-accel, .menu-iconic-accel { display: none !important;} .menu-accel-container { min-width: 32px !important; }
Отсутствует
turbot
Я знаю, но у меня почему то перестал убирать. Вот этот убирает в контекстном меню, как его сделать глобально?
(function() { var menus = document.getElementById('contentAreaContextMenu').childNodes; for (var i = 0; i < menus.length; i++) { menus[i].removeAttribute('accesskey'); } })();
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
villa7
(function() { for(var menus of document.querySelectorAll('menuitem, menu')) { menus.removeAttribute('accesskey'); } })();
- но на некоторых менюшках - не срабатывает (например у контекстного меню адресной строки или в редакторе CB). Без понятия - почему.
Добавлено 08-08-2015 17:39:25
/** * Update the global flag that tracks whether or not any edit UI (the Edit menu, * edit-related items in the context menu, and edit-related toolbar buttons * is visible, then update the edit commands' enabled state accordingly. We use * this flag to skip updating the edit commands on focus or selection changes * when no UI is visible to improve performance (including pageload performance, * since focus changes when you load a new page). * * If UI is visible, we use goUpdateGlobalEditMenuItems to set the commands' * enabled state so the UI will reflect it appropriately. * * If the UI isn't visible, we enable all edit commands so keyboard shortcuts * still work and just lazily disable them as needed when the user presses a * shortcut. * * This doesn't work on Mac, since Mac menus flash when users press their * keyboard shortcuts, so edit UI is essentially always visible on the Mac, * and we need to always update the edit commands. Thus on Mac this function * is a no op. */ function updateEditUIVisibility() { //@line 3893 "c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\src\browser\base\content\browser.js" let editMenuPopupState = document.getElementById("menu_EditPopup").state; let contextMenuPopupState = document.getElementById("contentAreaContextMenu").state; let placesContextMenuPopupState = document.getElementById("placesContext").state; // The UI is visible if the Edit menu is opening or open, if the context menu // is open, or if the toolbar has been customized to include the Cut, Copy, // or Paste toolbar buttons. gEditUIVisible = editMenuPopupState == "showing" || editMenuPopupState == "open" || contextMenuPopupState == "showing" || contextMenuPopupState == "open" || placesContextMenuPopupState == "showing" || placesContextMenuPopupState == "open" || document.getElementById("edit-controls") ? true : false; // If UI is visible, update the edit commands' enabled state to reflect // whether or not they are actually enabled for the current focus/selection. if (gEditUIVisible) goUpdateGlobalEditMenuItems(); // Otherwise, enable all commands, so that keyboard shortcuts still work, // then lazily determine their actual enabled state when the user presses // a keyboard shortcut. else { goSetCommandEnabled("cmd_undo", true); goSetCommandEnabled("cmd_redo", true); goSetCommandEnabled("cmd_cut", true); goSetCommandEnabled("cmd_copy", true); goSetCommandEnabled("cmd_paste", true); goSetCommandEnabled("cmd_selectAll", true); goSetCommandEnabled("cmd_delete", true); goSetCommandEnabled("cmd_switchTextDirection", true); } //@line 3927 "c:\builds\moz2_slave\m-cen-w64-ntly-000000000000000\build\src\browser\base\content\browser.js" }
Видимо, тут придется к каждому контекстному меню, с такими пунктами, листенер приделывать и уже тогда, с задержкой, удалять атрибут, так?
Отредактировано turbot (08-08-2015 17:39:25)
Отсутствует
убрать бы только Панель меню и Панель закладок
С этими вроде справился:
(function() { for(var menupopup of document.querySelectorAll("menupopup,panel")) { addEventListener("popupshowing", function() { for(var menus of document.querySelectorAll('menuitem, menu')) { menus.removeAttribute('accesskey'); } }, false, menupopup) } })();
Отсутствует
villa7
Вот так - почти везде убирает:
(function() { addEventListener("popupshowing", function(event) { for(var menus of event.originalTarget.querySelectorAll('menuitem, menu')) { menus.removeAttribute('accesskey'); } }, false) })();
Отсутствует