Проблема с размером кнопок - продолжения мучения.
1. Этим я получил квадратные кнопки нормального размера - userChrome.css
toolbarbutton[id^="custombuttons-button"] > .toolbarbutton-icon { min-width: 18px !important; min-height: 18px !important; }
- РЕШЕНО.
2. Как получить диапазон размера, ибо у меня кнопки есть прямоугольные, т.е. как написать диапазон? Так вот не выходит, ширина в пять раз больше, раньше было возможно, т.е. я перепробовал все варианты которые я знаю.
3. Как увеличит размер боковой панели и размер кнопок на ней?
То что вырубились 90% кнопок я молчу... это как говориться на потом.
Отредактировано Indomito (14-05-2017 16:51:44)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Посоветуйте,как с этим боротся?И вообще стоит ли обращать внимания на это?А может у кого есть действенный метод,как же всё таки заставить Palemoon не сбрасывать галочку проверки орфографии.
Что user.js не помогает?
/* Этот параметр включает мгновенную автоматическую проверку орфографии во всех формах, где Вы что-то вводите. При значении 1(по умолчанию) почему-то проверяет не везде и не сразу.©*/ user_pref("layout.spellcheckDefault", 2);
Отсутствует
Что user.js не помогает?
Если что-то сбрасывает значение этого параметра после старта, то и user.js может не помочь.
Более сильнодействующее средство - lockPref() в файле конфигурации.
Хотя в случае каких-то внутренних ошибок браузера и оно может не помочь.
Отсутствует
Плюсую. Симптомы те же. 55 (extensions.allow-non-mpc-extensions = true), кнопки работают, но добавить новые или просто открыть панель расширений не представляется возможным.
Добро пожаловать на форум mozilla-russia.org. Здесь вы можете посоветоваться или обратиться за помощью к фанатам и пользователям продуктов Мозиллы. Если не знаете как правильно оформить пост специально для вас расписан пункт 2.2 правил форума
Сброс на примере Firefox – лёгкое решение большинства проблем
Починка браузера. Перенос своих настроек на новый профиль.
Отсутствует
2. Как получить диапазон размера, ибо у меня кнопки есть прямоугольные, т.е. как написать диапазон? Так вот не выходит, ширина в пять раз больше, раньше было возможно, т.е. я перепробовал все варианты которые я знаю.
Можно попробовать вот так:
toolbarbutton[id^="custombuttons-button"] > .toolbarbutton-icon { width: auto !important; height: auto !important; min-width: 18px !important; min-height: 18px !important; max-width: none !important; max-height: none !important; }
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
SendInfo пишет:
Что user.js не помогает?
Это я сделал в первую очередь.После чего проверка кое где появилась,но галочка в контекстном меню гугла пропадает после перезагрузки.
yup пишет:
Добавить в код проверку его наличия. Например, так:
Не знаю правильно я добавил или нет после addEventListener('focus', function(e){ но ошибки в консоли больше не появляются.Так что по видимому ваш совет уже ни в первый раз мне помог.За что огромное вам спасибо!!!
Отсутствует
Симптомы те же.
У меня ещё хуже — валит браузер сразу.
Кое-как чуток подправил и бросил, поскольку надо Stylish реанимировать.
Вобщем, к краху у меня приводит использование всё того же nsIDOMParser
Если это само не пройдёт, то надо будет просить помощи у Infocatcher'а.
Ну а себе пока сделал как-то так. Дичь, конечно, но хоть не падает
... // ***** END LICENSE BLOCK ***** var win = Components. classes ["@mozilla.org/embedcomp/window-watcher;1"] .getService (Components. interfaces. nsIWindowWatcher) .openWindow (null, 'data:application/vnd.mozilla.xul+xml,<?xml%20version="1.0"?><window></window>', null, null, null); var DOMParser = new win. DOMParser (); win. close (); ... Overlay. prototype = { ... get overlayDocument () { if (!this. _overlayDocument) { var ios = Components. classes ["@mozilla.org/network/io-service;1"]. getService (Components. interfaces. nsIIOService); var uri = this. path + this. fileName; var cbs = Components. classes ["@xsms.nm.ru/custombuttons/cbservice;1"]. getService (Components. interfaces. cbICustomButtonsService); var xulchan = cbs. getChannel (uri, null); var instr = xulchan. open (); //var dp = Components. classes ["@mozilla.org/xmlextras/domparser;1"]. createInstance (Components. interfaces. nsIDOMParser); //try { // var fakeOverlayURI = ios. newURI ("chrome://custombuttons/content/buttonsoverlay.xul", null, null); // var chromeProtocolHandler = Components. classes ["@mozilla.org/network/protocol;1?name=chrome"]. getService (); // chromeProtocolHandler = chromeProtocolHandler. QueryInterface (Components. interfaces. nsIProtocolHandler); // var fakeOverlayChannel = chromeProtocolHandler. newChannel (fakeOverlayURI); // try { // dp. init (fakeOverlayChannel. owner, ios. newURI (uri, null, null), null, null); // } catch (e) { // dp = Components. classes ["@mozilla.org/xmlextras/domparser;1"]. createInstance (Components. interfaces. nsIDOMParser); // } //} catch (e) {} //this. _overlayDocument = dp. parseFromStream (instr, null, instr. available (), "application/xml"); this. _overlayDocument = DOMParser. parseFromStream (instr, null, instr. available (), "application/xml"); instr. close(); } return this. _overlayDocument; }, ... CustombuttonsURIParser. prototype = { ... parse: function (uri) { ... if (button_code. indexOf ("<?xml ") == 0) { //var xp = Components. classes ["@mozilla.org/xmlextras/domparser;1"]. createInstance (Components. interfaces. nsIDOMParser); //this. doc = xp. parseFromString (button_code, "text/xml"); this. doc = DOMParser. parseFromString (button_code, "text/xml"); ... cbCustomButtonsService. prototype = { DOMParser: DOMParser, get wrappedJSObject() { return this; },
\modules\addons4.js
... var AddonProvider = { getOverlayDocument: function (overlayFileName) { var overlayDocument = null; var ios = Cc [IO_SERVICE_CID]. getService (IO_SERVICE_IID); var uri = "resource://custombuttons/" + overlayFileName; var cbs = Components. classes [CB_SERVICE_CID]. getService (CB_SERVICE_IID); var xulchan = cbs. getChannel (uri); var instr = xulchan. open (); //var dp = Cc [DOM_PARSER_CID]. createInstance (DOM_PARSER_IID); //try { // var fakeOverlayURI = ios. newURI ("chrome://custombuttons/content/buttonsoverlay.xul", null, null); // var chromeProtocolHandler = Cc [CHROME_PROTOCOL_HANDLER_CID]. getService (); // chromeProtocolHandler = chromeProtocolHandler. QueryInterface (PROTOCOL_HANDLER_IID); // var fakeOverlayChannel = chromeProtocolHandler. newChannel (fakeOverlayURI); // try { // dp. init (fakeOverlayChannel. owner, ios. newURI (uri, null, null), null, null); // } catch (e) { // var dp = Cc [DOM_PARSER_CID]. createInstance (DOM_PARSER_IID); // } //} catch (e) {} //overlayDocument = dp. parseFromStream (instr, null, instr. available (), "application/xml"); overlayDocument = cbs. wrappedJSObject. DOMParser. parseFromStream (instr, null, instr. available (), "application/xml"); instr. close (); return overlayDocument; },
Отсутствует
yup
Извините меня за туповатость,но перечитав ваше сообщение более внимательно,я понял то что ничего ни понял.
Вы пишите.
Добавить в код проверку его наличия. Например, так:
У меня получилось.
addEventListener('focus', function(e){ if (e.target.tagName && (e.target.tagName.toLowerCase() == 'textarea'|| e.target.tagName.toLowerCase() == 'input')) if( e.target.tagName.toLowerCase()=='textarea'|| e.target.tagName.toLowerCase()=='input') e.target.setAttribute('spellcheck', 'true') }, content.document.body);
Дальше.
https://developer.mozilla.org/ru/docs/W … nt/tagName уверяет, что tagName всегда содержит имя тега большими буквами, так что вызов toLowerCase() является излишним.
addEventListener('focus', function(e){ if (e.target.tagName && (e.target.tagName == 'TEXTAREA'|| e.target.tagName == 'INPUT')) e.target.setAttribute('spellcheck', 'true') }, content.document.body);
Оба варианта работают без ошибок.Так какой код более оптимальный?Если я тут конечно ничего лишнего не нагородил.
Отсутствует
Так какой код более оптимальный?
Второй. Потому что с первым вышло недопонимание - там нужно было не добавлять строчку, а заменить ею ранее существовавшую.
Было:
if( e.target.tagName.toLowerCase()=='textarea'|| e.target.tagName.toLowerCase()=='input')
Заменить надо было на вариант, куда вставлена дополнительная проверка:
if (e.target.tagName && (e.target.tagName.toLowerCase() == 'textarea'|| e.target.tagName.toLowerCase() == 'input'))
Но так как от вызова функции toLowerCase() можно избавиться (с целью ускорения выполнения), то получаем более простой вариант замены:
if (e.target.tagName && (e.target.tagName == 'TEXTAREA'|| e.target.tagName == 'INPUT'))
Отсутствует
Проблема с Toggle Find+ Minimal
с 53 перестали работать кнопки след и пед при поиске
const forceFind = false, forceFindCS = true; // Приклеить элемент findbar к странице( #appcontent ) ................................ const fbID = "FindToolbar-m"; delete window.gFindBar; window.gFindBar = document.getElementById(fbID); if (!gFindBar) { gFindBar = gBrowser.parentNode.insertBefore(document.createElement("findbar"), gBrowser); gFindBar.id = fbID; gFindBar.setAttribute("browserid", "content"); gFindBar.clientTop; delete window.gFindBarInitialized; window.gFindBarInitialized = true; gFindBar._selectionMaxLen = 1000; // лимит символов для поиска setTimeout(function() { eval("gFindBar.startFind = " + gFindBar.startFind.toString() .replace('this.browser.finder.getInitialSelection();', 'this.onCurrentSelection(gBrowser.finder.getActiveSelectionText(), false)')); var {Finder} = Cu.import("resource://gre/modules/Finder.jsm"); eval("Finder.prototype.getActiveSelectionText = " + Finder.prototype .getActiveSelectionText.toString().replace('.replace', '; //')); }, 3000 ); } // Ctrl+F, показать - скрыть панель поиска .................................... function toggleFindbar() { if (gFindBar.hidden) { gFindBar.onFindCommand(); setTimeout(function() { gFindBar._find() }, 50) } else gFindBar.close(); }; addEventListener("keydown", function(e) e.keyCode == e.DOM_VK_F && e.ctrlKey && !e.altKey && !e.shiftKey && !e.preventDefault() && toggleFindbar() , false); this.onclick = function(e) { if (!e.button) toggleFindbar() }; // Показать количество совпадений на панели поиска ................................ const textbox = gFindBar.getElement("findbar-textbox"), nrm = Ci.nsISelectionController.SELECTION_NORMAL, labID = "hits-m"; var lab = document.getElementById(labID); if (!lab) { lab = textbox.parentNode.insertBefore(document.createElement("label"), textbox); lab.id = labID; } var curHit, allHits; function updateHits(arg) { if (gFindBar.hidden) return; var word = textbox.value; if (!word) { lab.value = "0/0"; textbox.removeAttribute("status"); return; } var win = arg instanceof Window && arg || content; if (win == content) curHit = allHits = 0; var findbarFinder = gFindBar._browser.finder; var controller = findbarFinder._getSelectionController(win); var doc = win.document; if (word && controller && doc && doc.documentElement) { var body = doc instanceof HTMLDocument && doc.body ? doc.body : doc.documentElement; var searchRange = doc.createRange(); searchRange.selectNodeContents(body); var startPt = searchRange.cloneRange(); startPt.collapse(true); var endPt = searchRange.cloneRange(); endPt.collapse(false); var retRange = null; var finder = Cc["@mozilla.org/embedcomp/rangefind;1"].createInstance().QueryInterface(Ci.nsIFind); finder.caseSensitive = gFindBar._shouldBeCaseSensitive(word); while ((retRange = finder.Find(word, searchRange, startPt, endPt))) { allHits++; if (!curHit) { var sel = controller.getSelection(nrm), range; if (sel.toString()) range = sel.getRangeAt(0); else { var editableNode = findbarFinder._getEditableNode(retRange.startContainer); if (editableNode) sel = editableNode.editor.selectionController.getSelection(nrm); if (sel.toString()) range = sel.getRangeAt(0); } var comp = range && ["startContainer", "endContainer", "startOffset", "endOffset"] .every(function(prop) range[prop] == retRange[prop]); if (comp) curHit = allHits; } startPt = retRange.cloneRange(); startPt.collapse(false); } Array.forEach(win.frames, function(frame) updateHits(frame)); } if (win != content) return; allHits ? textbox.removeAttribute("status") : textbox.setAttribute("status", "notfound"); forceFind && !curHit && allHits && gFindBar._find(); lab.value = curHit + "/" + allHits; } updateHits(); gFindBar.updateHits = updateHits; function insUpd(methodName, code) { const method = gFindBar[methodName]; gFindBar[methodName] = Function("arguments.callee.method.apply(this, arguments);" + (code || "") + " this.updateHits();"); gFindBar[methodName].method = method; addDestructor(function() gFindBar[methodName] = method); } insUpd("_find"); insUpd("_findAgain"); insUpd("_setCaseSensitivity", forceFindCS && " this._find();"); const progressListener = { onStateChange: function(wpr, req, state) state & Ci.nsIWebProgressListener.STATE_STOP && setTimeout(updateHits, 320), onLocationChange: function(wpr, req) !req && updateHits() }; addDestructor(function() gBrowser.removeProgressListener(progressListener)); function onFindbar() { gBrowser[(gFindBar.hidden ? "remove" : "add") + "ProgressListener"](progressListener); !gFindBar.hidden && updateHits(); } onFindbar(); const observer = new MutationObserver(onFindbar); observer.observe(gFindBar, { attributes: true, attributesFilter: ["hidden"] }); addDestructor(function() observer.disconnect());
Отсутствует
\components\CustomButtonsService.jsВыделить кодКод:
... // ***** END LICENSE BLOCK ***** var win = Components. classes ["@mozilla.org/embedcomp/window-watcher;1"] .getService (Components. interfaces. nsIWindowWatcher) .openWindow (null, 'data:application/vnd.mozilla.xul+xml,<?xml%20version="1.0"?><window></window>', null, null, null); var DOMParser = new win. DOMParser (); win. close ();
Я вот такую дичь придумал, покультурнее:
this. __defineGetter__ ( // Not available at startup "DOMParser", function () { var hw = Components. classes ["@mozilla.org/appshell/appShellService;1"]. getService (Components. interfaces. nsIAppShellService). hiddenDOMWindow; delete this. DOMParser; return this. DOMParser = new hw. DOMParser(); } );
+
cbCustomButtonsService. prototype = { get wrappedJSObject() { return this; }, get DOMParser() { return DOMParser; },
Добавлено 15-05-2017 22:38:01
custom_buttons-0.0.5.8.9-fixed5pre.xpi
Еще нынче дикая ругань на отсутствие <em:multiprocessCompatible>true</em:multiprocessCompatible>, но с ним кнопкам будет хуже, по идее.
Отредактировано Infocatcher (15-05-2017 22:38:01)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher, Спасибо, твоя версия
toolbarbutton[id^="custombuttons-button"] > .toolbarbutton-icon { width: auto !important; height: auto !important; min-width: 18px !important; min-height: 18px !important; max-width: none !important; max-height: none !important; }
Правда отвалилось куча кнопок связанных с буфером обмена, т.е. с его сканированием.
/*Initialization Code*/ //Автор Infocatcher ver 0.0.1 bild of 12.02.2015 //Автор Indomito ver 9.2.1 bild of 15.01.2016 //----------Описание индификаторов панелей------------ /* Что найти ID-панели истользуйте готовую кнопку Attributes Inspector Автор Infocatcher https://github.com/Infocatcher/Custom_Buttons/tree/master/Attributes_Inspector */ //---------------------------------------------------- //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Блок инициализации глоб. переменных и функций // Срок существования - один сеанс //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //++++++++++++++++++BEGIN DEF++++++++++++++++++++++++++++++ //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //********************************************************* //*********Begin section descriptions of variables********* //********************************************************* // Подсказка для кнопки ................................ this.onmouseover =()=> { this.tooltipText = " Буфер обмена\n"; }; window.bbBBCodeStat=true // разрешить/включить BBCode window.arycb_BBCodeClipboardStrings = this.clipboardStrings = []; // Массив буфера обмена window.MaxClipboardEntries = 16; //Максимальное число записей буфера обмена ввиде стека window.Polling_Rate = 1000; //Время(частота) опроса буфера в миллисекундах window.FocusSwitchEICB = "Buttons.Clipboard.Focus.Switch"; //Задание имени в реестре window.SetFocus = Application.prefs.getValue(window.FocusSwitchEICB, 0); //Статус для работы функции window.focus(); if (typeof window.SetFocus != "boolean") //Создаём новую переменную в реестре, если её нет { Application.prefs.setValue(window.FocusSwitchEICB, false); //Отключаем автофокус window.SetFocus = Application.prefs.getValue(window.FocusSwitchEICB, 0);} //********************************************************* //*********End section descriptions of variables*********** //********************************************************* //********************************************************* //*********Begin section descriptions of functions********* //********************************************************* //Переключение автофукосировки на окно браузера или почтовика, при подаче -1 на вход статус не меняется. SetFocusSwitch = function (vSwitch) { // Коды возврата // true - функция window.focus() работает // false - функция window.focus() отключена(не работает) // -1 - всё осталось без изменений // Значения так же можно считать из window.SetFocus const Title_alertBox = "Вкл/Выкл фокуса"; const Msg_alertBox_On = "Фокус = ON"; const Msg_alertBox_Off = "Фокус = OFF"; var Msg_alertBox; if (vSwitch == -1 ) { return vSwitch; } if (window.SetFocus == true) { window.SetFocus = false; Msg_alertBox = Msg_alertBox_Off;} else { window.SetFocus = true; Msg_alertBox = Msg_alertBox_On;} Application.prefs.setValue(window.FocusSwitchEICB, window.SetFocus); custombuttons. alertBox(Title_alertBox, Msg_alertBox); // Диагностика return window.SetFocus; }; //--------Общие функции для вставки BBCode---------------- //-------------------------------------------------------- // Функция lb_BBCodePrim // [bbCode]выделенный[/bbCode] // по умолчанию от ЛКМ) lb_BBCodePrim = function (open,close){ var theBox = document.commandDispatcher.focusedElement; var startPos = theBox.selectionStart; var endPos = theBox.selectionEnd; var oPosition = theBox.scrollTop; var oHeight = theBox.scrollHeight; var text=theBox.value.substring(0,startPos); text +=open+theBox.value.substring(startPos, endPos)+close; text +=theBox.value.substring(endPos, theBox.value.length); theBox.value = text; var nHeight = theBox.scrollHeight - oHeight; theBox.scrollTop = oPosition + nHeight; }; //--------------------------------------------------------- // Функция mb_BBCodePrim // Резерв // по умолчанию от CКМ mb_BBCodePrim = function (open,close) {}; // ------------------------------------------------------- // Функция rb_BBCodePrim // [bbCode]параметр PASTE по умолчанию из буфер обмена[/bbCode] // по умолчанию от ПКМ rb_BBCodePrim = function (open,close,paste){ if (paste == undefined) { open +=close;} //буфер обмена пуст else { open +=paste+close;} var theBox = document.commandDispatcher.focusedElement; var startPos = theBox.selectionStart; var endPos = theBox.selectionEnd; var selectionLen = endPos - startPos var oPosition = theBox.scrollTop; var oHeight = theBox.scrollHeight; var text=theBox.value.substring(0,startPos); var nHeight = theBox.scrollHeight - oHeight; text +=open; text +=theBox.value.substring(endPos, theBox.value.length); theBox.value = text; theBox.selectionStart = endPos + open.length; theBox.selectionEnd = endPos + open.length - selectionLen; theBox.scrollTop = oPosition + nHeight; }; // ------------------------------------------------------- // Функция fHLD_Get_ListClipboardPrim // получить список сохранёного буфера обмена fnHLD_Get_ListClipboardPrim = function (){ var cs = arycb_BBCodeClipboardStrings; return (cs.slice(0)); }; //******************************************************** //*********End section descriptions the functions********* //******************************************************** //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //++++++++++++++++++END DEF++++++++++++++++++++++++++++++ //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //Список сохранёного буфера обмена //Не вызываем это, обработка по таймеру или по событию ЛКМ //-----Обработчики буфера обмена this.MAX_ENTRIES = window.MaxClipboardEntries; //Максимальное число записей буфера обмена ввиде стека this.CHECK_INTERVAL = window.Polling_Rate; //Время(частота) опроса буфера в миллисекундах this.type = "menu"; this.orient = "horizontal"; this._menupopup = this.appendChild(document.createElement("menupopup")); this._menupopup.setAttribute("oncommand", "this.parentNode.handleCommand(event.target);"); // Обработка двойного клика для установки режима автофокуса this.leftDclick = function(event) { //fnHidePT(); //SetFocusSwitch(); }; this.checkClipboard = function() { var clipStr = custombuttonsUtils. gClipboard. read (); if(clipStr && this.clipboardStrings.indexOf(clipStr) == -1) this.storeString(clipStr); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if(window.SetFocus) // Если true, иначе на выход window.focus(); // Фокус на браузер или почтовик //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //fnHidePT(); }; this.storeString = function(str) { var cs = this.clipboardStrings; cs.push(str); while(cs.length > this.MAX_ENTRIES) cs.shift(); var mi = document.createElement("menuitem"); mi.setAttribute("label", str); this._menupopup.appendChild(mi); while(this._menupopup.childNodes.length > this.MAX_ENTRIES) this._menupopup.removeChild(this._menupopup.firstChild); }; this.handleCommand = function(mi) { var indx = Array.indexOf(mi.parentNode.childNodes, mi); if(indx != -1) this.insertText(this.clipboardStrings[indx]); }; this.insertText = function(str) { var cmd = "cmd_insertText"; var controller = document.commandDispatcher.getControllerForCommand(cmd); if(controller && controller.isCommandEnabled(cmd)) { controller = controller.QueryInterface(Components.interfaces.nsICommandController); var params = Components.classes["@mozilla.org/embedcomp/command-params;1"] .createInstance(Components.interfaces.nsICommandParams); params.setStringValue("state_data", str); controller.doCommandWithParams(cmd, params); } }; setInterval(function(button) { button.checkClipboard(); }, this.CHECK_INTERVAL, this); this.setAttribute("onpopupshowing", "this.checkClipboard();"); this.setAttribute('ondblclick', 'custombuttons.gQuot.mHandler(event, this)');
Помоги, ибо я ошибки в JS не вижу.
Отредактировано Indomito (15-05-2017 23:06:15)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
На последних версиях Firefox в некоторых кнопках перестала работать блокировка контекстного меню по ПКМ. Это можно исправить если положить в вкладку инициализации кнопки строку:
Контекстное меню кнопки будет открываться по Ctrl + ПКМ.
Спасибо, половину кнопок адаптировал.
Я долго искал хоть намёк на ошибку и набрёл на твой пост и код.
Отредактировано Indomito (15-05-2017 23:52:02)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
hiddenDOMWindow
Да-да, я тоже пробовал у него попросить DOMParser,
но только у hiddenPrivateDOMWindow, которое у меня available at startup
Но парсер у него был какой-то капризный, иногда отказывался парсить.
Поставил 0.0.5.8.9.4pre, и точно, — воротит нос:
Выделить кодКод:
Ошибка: Ошибка синтаксического анализа XML: Адрес: resource://gre-resources/hiddenWindow.html Строка 1, символ 115: Источник: resource://gre-resources/hiddenWindow.html Строка: 1, символ: 115 Исходный код: <overlay id="custombuttons-profile-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
this. __defineGetter__ ( // Not available at startup "DOMParser", function () { var en = Components. classes ["@mozilla.org/embedcomp/window-watcher;1"]. getService (Components. interfaces. nsIWindowWatcher). getWindowEnumerator (); while (en. hasMoreElements ()) { var win = en. getNext (). QueryInterface (Components. interfaces. nsIDOMWindow); if (win. document && win. document. contentType == "application/vnd.mozilla.xul+xml") { delete this. DOMParser; return this. DOMParser = new win. DOMParser (); } } } );
Отсутствует
Infocatcher
Решил проверить ещё раз с нуля на другой виртуалке. Поставил чистую свежую Nightly.
Устанавливаю твой вариант с hiddenDOMWindow. Неудача. Скрин.
Удалил CB через about:addons. Удалил из профиля папку custombuttons.
Устанавливаю свой вариант с поиском существующего окна. Снова провал. Скрин.
Опять всё подчистил.
Устанавливаю вариант с принудительным открытием окна. Успех, всё работает.
Не знаю что и думать ...
Отсутствует
Infocatcher и осталным
Не работает кнопка Tools, а точнее её часть - фрагмент кода.
//Right(Системные настройки) this.rightclick = function(event) { //Application.prefs.setValue("plugin.expose_full_path", true); //НЕ РАБОТАЕТ OpenCloseTabGlobal("about:plugins"); OpenCloseTabGlobal("about:support"); OpenCloseTabGlobal("about:config"); };
т.е. не работает Application.prefs.setValue("plugin.expose_full_path", true); - у меня на ней завязано куча кнопок около 80%
Отредактировано Indomito (17-05-2017 21:26:31)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
т.е. не работает Application.prefs.setValue("plugin.expose_full_path", true); - у меня на ней завязано куча кнопок около 80%
cbu.setPrefs("plugin.expose_full_path", true);
Отсутствует
oleg.sgh Раньше так работало
// Открывает список когда курсор мышки над кнопкой this. onmouseover = function (event) { this. open = true; };
bunda1 Спасибо.
А функции cbu.setPrefs и cbu.getPrefs смотреть в chrome://custombuttons/content/cb2api.js или другой адрес?
Отредактировано Indomito (17-05-2017 22:11:57)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
А функции cbu.setPrefs и cbu.getPrefs смотреть в chrome://custombuttons/content/cb2api.js или другой адрес?
Объекты: перебор свойств
Смотри там cbu, ну и CB2const, custombutton, custombuttons, custombuttonsUtils тоже могут быть интересны.
Отсутствует