На последних версиях Firefox в некоторых кнопках перестала работать блокировка контекстного меню по ПКМ. Это можно исправить если положить в вкладку инициализации кнопки строку:
Контекстное меню кнопки будет открываться по Ctrl + ПКМ.
Отсутствует
Перестала работать кнопка Открывать всё в новых вкладках, от 16.12.2013 (после обновы до 53.0.2)
// Открывать всё в новых вкладках, от 16.12.2013. ...................................... (function () { // открывать всё из ниже перечисленного в новых вкладках, если пустая страница открывать в текущей .... const where = whereToOpenLink; eval("whereToOpenLink = " + where.toString() .replace('return "current";\n}', (function() { switch ( e.originalTarget.id ) { case "bookmarksMenuPopup": case "goPopup": case "appmenu_bookmarksPopup": case "appmenu_historyMenupopup": case "personal-bookmarks": case "bookmarks-menu-button": case "historymenu_history": case "home-button": case "page-proxy-stack": case "go-button": case "urlbar-go-button": case "PopupAutoCompleteRichResult": case "searchbar": case "PopupAutoComplete": return "tab"; default: return "current"; } }).toString().replace(/^.*{|}$/g, "")+"}")); // открывать закладки и историю в новых вкладках, если букмарклети или пустая страница в текущей .... const openNode = PlacesUIUtils._openNodeIn; eval("PlacesUIUtils._openNodeIn = " + openNode.toString().replace(') {', '){\n if (["about:newtab", "about:blank"].indexOf(content.location.href)!= -1 ) aWhere = "current";\n aWhere = (aWhere == "tab" || aNode.uri.startsWith("javascript:") ) ? "current" : "tab";\n') ); // если JavaScript ссылка или пустая страница открывать в текущей .... const linkIn = openLinkIn; eval("openLinkIn = " + linkIn.toString().replace(';', ';;\n if ( url.startsWith("javascript:") ) where = "current";\n if (["about:newtab", "about:blank"].indexOf(content.location.href)!= -1 ) where = "current";') ); // удалять изменения из внутренних функций Firefox .... addDestructor(function() { eval("whereToOpenLink = " + where); eval("PlacesUIUtils._openNodeIn = " + openNode); eval("openLinkIn = " + linkIn); eval("gURLBar.handleCommand = " + handle); }); })();
Отсутствует
bunda1
Я немного запутался... что ставит, а что удалять.
1. custom_buttons-0.0.5.8.9-fixed2-signed.xpi
2. custom_buttons-0.0.5.8.9-fixed2.xpi
3. И старое расширение Custom Buttons 0.0.5.8.9.xpi
Что с ними делать?
Отредактировано Indomito (10-05-2017 07:43:18)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Я немного запутался... что ставит, а что удалять.
1. custom_buttons-0.0.5.8.9-fixed2-signed.xpi
2. custom_buttons-0.0.5.8.9-fixed2.xpi
3. И старое расширение Custom Buttons 0.0.5.8.9.xpi
custom_buttons-0.0.5.8.9-fixed4-signed.xpi
Что с ними делать?
Пользоваться.
Отредактировано yup (10-05-2017 08:07:48)
Отсутствует
Ясно... фиксим на ходу.
А размер кнопок у меня был 32x32 pix, а сейчас такие мелкие что и не видно - это лечится?
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Ясно... фиксим на ходу.
Ну, как на ходу... Два месяца уже этой версии. С тех пор - "потребности в колбасе изменениях нет"
А размер кнопок у меня был 32x32 pix, а сейчас такие мелкие что и не видно - это лечится?
За 53-ю версию не скажу (она под XP не запускается), а в 52-й кнопки такие же, как и раньше.
Может, причина - в каких-то установленных самодельных стилях?
Отредактировано yup (10-05-2017 08:55:54)
Отсутствует
Может, причина - в каких-то установленных самодельных стилях?
Нет, т.е. стиль старый, т.е. давно стоит Grey он размеры кнопок не трогает, правда есть Classic Theme Restore ибо пропали доп. панели.
Видимо надо править пользовательский CSS, но как не знаю, т.е. не знаю что писать.
P.S. На другом компе вообще дефолтная тема и ничего нет, а кнопки все мелкие - видимо где то я их зацепил, но чем не знаю.
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
yup пишетМожет, причина - в каких-то установленных самодельных стилях?
Нет, т.е. стиль старый, т.е. давно стоит Grey он размеры кнопок не трогает, правда есть Classic Theme Restore ибо пропали доп. панели.
Видимо надо править пользовательский CSS, но как не знаю, т.е. не знаю что писать.
P.S. На другом компе вообще дефолтная тема и ничего нет, а кнопки все мелкие - видимо где то я их зацепил, но чем не знаю.
Без картинки не совсем понятно.
Больших (24х24) иконок давно нет, их Classic Theme Restorer должен возвращать. Сейчас по умолчанию 18х18.
И можно потыкать кнопкой и/или DOM Inspector'ом.
По-видимому, нужен стиль для userChrome.css типа вот такого:
toolbarbutton[id^="custombuttons-button"] > .toolbarbutton-icon { min-width: 24px !important; min-height: 24px !important; }
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Да, у меня кнопки 18x18 pix, т.е. такой код.
Выделить кодКод:
toolbarbutton[id^="custombuttons-button"] > .toolbarbutton-icon { min-width: 18px !important; min-height: 18px !important; }
А для боковой панели это сработает?
Поставлю custom_buttons-0.0.5.8.9-fixed4-signed.xpi и попробую обновить FF.
Правда отваливаются две кнопки.
/*Initialization Code*/ this.tooltipText = "Left ― Перезагрузить Mozilla FireFox\n" + "DLeft ― None\n" + "Right ― Выйти из Mozilla FireFox"; var delay = 1200; // Задержка для Long Right this.onmousedown = function(event) {this._mouseDownTime = Date.now();}; //Перезагрузить Mozilla FireFox this.leftclick = function(event) { Application.restart(); }; //Выйти из Mozilla FireFox this.rightclick = function(event) { if ((Date.now() - this._mouseDownTime) > delay) { gShowPopup(this); return; } if(!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) { event.preventDefault(); event.stopPropagation(); Application.quit(); } }; //Свернуть Mozilla FireFox //this.leftDclick = function(event) { //minimize(); //}; //Резерв //this.rightDclick = function(event) { //return; //}; this.setAttribute('onclick', 'custombuttons.gQuot.mHandler(event, this)'); this.setAttribute('ondblclick', 'custombuttons.gQuot.mHandler(event, this)');
/*Initialization code*/ //Автор Indomito ver 12.5 bild of 12.01.2016 var IncDecPage = 1; //Только целое число!!! //var delay = 1200; // Задержка для Long Right //this.onmousedown = function(event) {this._mouseDownTime = Date.now();}; this.tooltipText = "Left/Right ― Вниз/Вверх по странице\n" + "DLeft ― В начало/конец страницы\n" + "Middle ― Центрирование страницы"; this.__defineGetter__("scroller", function() { var doc = content.document; var root = doc.documentElement; var body = doc.body || root; return body.scrollHeight > root.scrollHeight ? body : root; }); //Вниз по странице this.leftclick = function(event) { var scroller = this.scroller; content.scrollByPages(IncDecPage) }; //Центрирование страницы this.midclick = function(event) { var scroller = this.scroller; content.scrollTo(0, (scroller.scrollHeight - scroller.clientHeight)/2); }; //Вверх по странице this.rightclick = function(event) { // if ((Date.now() - this._mouseDownTime) > delay) // { // return; // } var scroller = this.scroller; if(!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) { content.scrollByPages(-IncDecPage); } }; this.rightDclick = function(event) { //var scroller = this.scroller; //content.scrollTo(0, (scroller.scrollHeight - scroller.clientHeight)/2); }; //В начало/конец страницы this.leftDclick = function(event) { var scroller = this.scroller; if(scroller.scrollTop > (scroller.scrollHeight - scroller.clientHeight)/2) content.scrollTo(scroller.scrollHeight, 0); else content.scrollTo(0, scroller.scrollHeight); }; this.setAttribute('onclick', 'custombuttons.gQuot.mHandler(event, this)'); this.setAttribute('ondblclick', 'custombuttons.gQuot.mHandler(event, this)');
Отредактировано Indomito (12-05-2017 01:18:05)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Правда отваливаются две кнопки.
RestartHideQuitВыделить кодКод:
/*Initialization Code*/ this.tooltipText = "Left ― Перезагрузить Mozilla FireFox\n" + "DLeft ― None\n" + "Right ― Выйти из Mozilla FireFox"; var delay = 1200; // Задержка для Long Right this.onmousedown = function(event) {this._mouseDownTime = Date.now();}; //Перезагрузить Mozilla FireFox this.leftclick = function(event) { Application.restart(); }; //Выйти из Mozilla FireFox this.rightclick = function(event) { if ((Date.now() - this._mouseDownTime) > delay) { gShowPopup(this); return; } if(!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) { event.preventDefault(); event.stopPropagation(); Application.quit(); } }; //Свернуть Mozilla FireFox //this.leftDclick = function(event) { //minimize(); //}; //Резерв //this.rightDclick = function(event) { //return; //}; this.setAttribute('onclick', 'custombuttons.gQuot.mHandler(event, this)'); this.setAttribute('ondblclick', 'custombuttons.gQuot.mHandler(event, this)');
А эсли так:
this.onclick =e=> { if ( e.button == 0 ) Services.startup.quit(Services.startup.eAttemptQuit | Services.startup.eRestart); if ( e.button == 1 ) gShowPopup(self); if ( e.button == 2 && !e.ctrlKey ) goQuitApplication(); }; this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() }; this.tooltipText = "Л: Перезагрузить \nС: CB Меню \nП: Выйти";
Отсутствует
Подскажите,как в код добавить второй плеер?
/*Initialization Code*/ var path = "D:\\PortableSoft\\Total Commander Extended\\Program\\Players\\smplayer-portable-17.4.0.0\\smplayer.exe"; this.onclick =e=> { if ( e.button == 0 ) play(content.location.href, ""); if ( e.button == 1 ) gShowPopup(self); if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { e.preventDefault(); play(content.location.href, "/add"); } }; self.image = "moz-icon://file://" + path; var playerName = path.split("\\").pop().replace(".exe",""); self.label = "Открыть видео в " + playerName; var contextMenu = document.getElementById("contentAreaContextMenu"); var menuitem = contextMenu.insertBefore(document.createElement("menuitem"), document.getElementById("context-sep-open")); menuitem.setAttribute("label", "Открыть в " + playerName); menuitem.setAttribute("class", "menuitem-iconic"); menuitem.setAttribute("image", "moz-icon://file://" + path); menuitem.onclick =e=> play(gContextMenu.getLinkURL(), e.button ? "/add" : ""); addEventListener("popupshowing", ()=> { var youtube = gBrowser.contentDocument.location.host == "www.youtube.com"; menuitem.hidden = !gContextMenu.onLink || !youtube; }, false, contextMenu); addDestructor(()=> menuitem.remove() ); function play(link, param) { var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); file.initWithPath(path); process.init(file); process.run(false, [link, param], 2); }; self.tooltipText = "Л: Открыть видео в " + playerName + "\nС: CB Меню \nП: Добавить видео в плейлист " + playerName;
Отсутствует
Rag
Своё добавляете.
//Открыть в программах... if ( this.hasAttribute("initialized") ) return; Open("SMPlayer", "C:\\Program Files\\SMPlayer\\smplayer.exe", [""]); Open("VLCPlayer", "C:\\Program Files\\VideoLAN\\VLC\\vlc.exe", [""]); Open("POTPlayer", "C:\\Program Files\\DAUM\\PotPlayer\\PotPlayerMini.exe", [""]); Open("ACEPlayer", "C:\\Documents and Settings\\Admin\\Application Data\\ACEStream\\player\\ace_player.exe", [""]); //---------------------------------------------------------------------------------------------- function Open(name, prog, param, image){ var menuitem = document.createElement("menuitem"); var contextMenu = document.getElementById("contentAreaContextMenu"); menuitem.id = "open-in"; 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.onLink, 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 );};
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
villa7
Спасибо за помощь.Но я этой кнопкой пользовался какоето время и она меня не устроила тем что плееры отображаются в контекстном меню на любом сайте.А в кнопке которую я хочу изменить плеер появляется в меню только на сайте с видео.
Оппа.Извиняюсь поспешил.Лажанулся.Плеера появляются на сайте с видео.Я не знаю что записать в конце адреса [""] так что подсобите.
Разобрался сам.Большое спасибо за помощь.
Отредактировано Rag (13-05-2017 00:35:35)
Отсутствует
Rag
Судя по коду, кнопка должна добавлять пункт в контекстное меню на видео с www.youtube.com. Но у меня в FF 52 этот пункт не добавляется (хотя нажатие на саму кнопку ролик во внешнем проигрывателе запускает). Поэтому предлагаю модификацию исходной кнопки, сделанную вслепую:
/*Initialization Code*/ var path = "D:\\PortableSoft\\Total Commander Extended\\Program\\Players\\smplayer-portable-17.4.0.0\\smplayer.exe"; var path2 = "D:\\PathToPlayer2\\player2.exe"; this.onclick = e => { if (e.button == 0) play(content.location.href, ""); if (e.button == 1) gShowPopup(self); if (e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey) { e.preventDefault(); play(content.location.href, "/add"); } }; self.image = "moz-icon://file://" + path; var playerName = path.split("\\").pop().replace(".exe",""); var playerName2 = path2.split("\\").pop().replace(".exe",""); self.label = "Открыть видео в " + playerName; var contextMenu = document.getElementById("contentAreaContextMenu"); var menuitem = contextMenu.insertBefore(document.createElement("menuitem"), document.getElementById("context-sep-open")); var menuitem2 = contextMenu.insertBefore(document.createElement("menuitem"), document.getElementById("context-sep-open")); menuitem.setAttribute("label", "Открыть в " + playerName); menuitem.setAttribute("class", "menuitem-iconic"); menuitem.setAttribute("image", "moz-icon://file://" + path); menuitem2.setAttribute("label", "Открыть в " + playerName2); menuitem2.setAttribute("class", "menuitem-iconic"); menuitem2.setAttribute("image", "moz-icon://file://" + path2); menuitem.onclick = e => play(gContextMenu.getLinkURL(), path, e.button ? "/add" : ""); menuitem2.onclick = e => play(gContextMenu.getLinkURL(), path2, e.button ? "/add" : ""); // вместо 'e.button ? "/add" : ""' должно быть то, что нужно второму проигрывателю addEventListener("popupshowing", () => { var youtube = gBrowser.contentDocument.location.host == "www.youtube.com"; menuitem.hidden = menuitem2.hidden = !gContextMenu.onLink || !youtube; }, false, contextMenu); addDestructor(() => { menuitem.remove(); menuitem2.remove() }); function play(link, path, param) { var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); file.initWithPath(path); process.init(file); process.run(false, [link, param], 2); }; self.tooltipText = "Л: Открыть видео в " + playerName + "\nС: CB Меню \nП: Добавить видео в плейлист " + playerName;
Добавлено 13-05-2017 02:08:54
Как бы в код который вы мне давеча предоставили,прописать иконки?
Строчку
заменить на
Отредактировано yup (13-05-2017 02:08:54)
Отсутствует
Только теперь дилема какую кнопку выбрать.
У того кода, который Вы просили переделать, чуть бОльшая функциональность (по одной кнопке мыши сразу проигрывает, по другой - ставит в очередь на воспроизведение) и искусственная привязка к конкретному сайту ("www.youtube.com"), которую легко убрать. В остальном обе кнопки можно считать идентичными.
Отсутствует
yup
Всёж таки в кнопке которую дал villa7 есть один недочёт.При выделении любого слова на странице и нажав пкм в меню появляются плеера.Хоть страничка не ютубовская.Это только при выделении.
Да ещё и не на каждом выделеном слове.
Отредактировано Rag (13-05-2017 03:04:40)
Отсутствует
Всёж таки в кнопке которую дал villa7 есть один недочёт.При выделении любого слова на странице и нажав пкм в меню появляются плеера.
Странно это. В обеих кнопках код, который решает, в каком меню должны появляться доп.пункты, а в каком нет, один и тот же:
Если контекстное меню вызвали на ссылке, то пункты видны. Если не на ссылке - спрятаны.
Может, какое расширение вмешивается, позволяющее переходить по выделенному тексту, как по ссылке?
Отсутствует
yup
Ну этих тонкостей я не знаю может какое расширение и вмешивается,но только я вижу то что вижу.Выделяю ваш ник пкм - в меню два плеера.Выделяю ниже слово участник пкм - плееров нет. А в целом это не критично и в общемто не напрягает.
Отсутствует
Выделяю ваш ник пкм - в меню два плеера.Выделяю ниже слово участник пкм - плееров нет.
Логично. "Участник" - просто текст, а "yup" над ним - ссылка. На ссылке пункты с проигрывателями показываются.
А в первой кнопке ещё одна проверка делается: пункты добавляются только для ссылок на сайте www.youtube.com - вот и вся разница.
Эту проверку элементарно просто как убрать из первой кнопки, так и добавить во вторую.
Отредактировано yup (13-05-2017 04:08:40)
Отсутствует
Уважаемые знатоки скриптов,кодов и всего что связано с Firefox.
В Palemoon после каждой перезагрузки слетает проверка орфографии.Для предотвращения этого использую кнопку.
//Проверка арфографии addEventListener('focus', function(e){ if( e.target.tagName.toLowerCase()=='textarea'|| e.target.tagName.toLowerCase()=='input') e.target.setAttribute('spellcheck', 'true') }, content.document.body);
Нормально работает,но в консоли ошибок,масса записей
TypeError: e.target.tagName is undefined
chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button21@init line 1 > Function
Посоветуйте,как с этим боротся?И вообще стоит ли обращать внимания на это?А может у кого есть действенный метод,как же всё таки заставить Palemoon не сбрасывать галочку проверки орфографии.
Отсутствует
Нормально работает,но в консоли ошибок,масса записей
TypeError: e.target.tagName is undefined
Не у всех получателей события есть атрибут tagName.
Посоветуйте,как с этим боротся?
Добавить в код проверку его наличия. Например, так:
if (e.target.tagName && (e.target.tagName.toLowerCase() == 'textarea'|| e.target.tagName.toLowerCase() == 'input'))
Добавлено 14-05-2017 11:42:29
https://developer.mozilla.org/ru/docs/W … nt/tagName уверяет, что tagName всегда содержит имя тега большими буквами, так что вызов toLowerCase() является излишним.
if (e.target.tagName && (e.target.tagName == 'TEXTAREA'|| e.target.tagName == 'INPUT'))
Отредактировано yup (14-05-2017 11:51:01)
Отсутствует