Context Search 2 2016-01-10
https://gist.github.com/2k1dmg/985bba49138d3d2a1889
Отсутствует
Context Search 2 2016-01-10
https://gist.github.com/2k1dmg/985bba49138d3d2a1889
Уважаемый 2k1dmg,
У меня есть несколько предложений по Вашей кнопке, а также вопросов.
1. Кнопка осуществляет поиск в кэше (Гугл, ВэбАрхив). Но для этого не нужно выделение слова - его приходится выделять только, чтобы вызвать через КонтекстМеню поиск. Нельзя ли сделать так, чтобы менюитем этого поиска присутствовал бы в КонтекстМеню всегда - тогда бы не надо было искусственного выделения для поиска в кэше.
2. Есть много сайтов - анализаторов СЕО и другой информации о сайтах по их URL (аналогично поиску в кэше) - такие сайты тоже можно было бы ввести как поисковые, если бы менюитем поиска по Вашей кнопке присутствовал бы в КонтекстМеню всегда и если бы в случае когда ничего не выделено - при вызове того или иного поисковика, подавал бы на его вход URL текущего сайта. Кстати, в этом случае ВэбАрхив может тоже быть добавлен пользователем как обычный поисковик. С Гугл кэш у меня так не получилось. Но его (единственного) можно добавить без подменю - как обычную иконку.
3. Таким образом останется лишь одно подменю - поиск по текущему сайту через гугл или яндекс (я бы их тоже добавил бы двумя иконками и избавился бы от подменю вообще)
4. Очень желательно добавить поиск картинок по картинкам. В приципе, такие поисковики - это обычные поисковики, на вход которых подаётся src картинки (обычно - URL).
То есть, если добавить правило: если ничего не выбрано, а правый клик на картинке - на выбранный поисковик подаётся src картинки - тогда пользователь мог бы добавить в список поисковиков поисковики картинок по картинкам (Гугл, Яндекс, TinEye, KarmaDecay и др.)
5. К правилу п.4 можно было бы добавить: если ничего не выбрано, а правый клик - на линке (но не на картинке) - поиск по URL линка
6. Было бы совсем роскошно добавить ещё и поле ввода, чтобы можно было бы делать поиск не только по выделенному тексту, но и набранному. Тогда бы не нужно было бы дополнения Ctrl Ctrl. Если делать поле ввода сложно, то можно было бы использовать findbar...
7. Можно ли добавить вызов Вашего мини-меню кликом на кнопку? Чтоб не только через вызов контекстного меню?
8. У меня также вопрос касательно мини-меню: оно у Вас организовано в 5 колонок с интервалами между ними а также с отступами слева и справа.
Можно ли узнать, где в Вашем коде задаётся число колонок, отступы слева и справа и интервалы как по горизонтали, так и по вертикали?
Я это спрашиваю не для того, чтобы менять, а чтобы научиться как сооружать такое меню.
Спасибо
Отредактировано difabor (14-01-2016 01:26:53)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
difabor
1. Да, это не привычно, но так меньше кода.
4. Он и так есть.
8. CSS и эта часть:
let counterMaxLength = options.campactMenuLengthPerLine; if (typeof counterMaxLength != 'number' || 3 > counterMaxLength || counterMaxLength > 10) counterMaxLength = 5; let counter = 0; let hBox; let itemCreateCampact = function(engine, last) {
Отсутствует
Я это спрашиваю не для того, чтобы менять, а чтобы научиться как сооружать такое меню.
Другой пример:
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EDoubleM%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAQElEQVR42mNkIBEwAvG/f/+IVM3ExATVAGQRVA1RhtCwf/9+ZGlHR8d//2YgmZ0xqmGYaCAtaRBUDbMHrIEkAABT+ooR2wR10QAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20....................%20%0Athis._handleClick%20%3D%28%29%3D%3E%20popup.openPopup%28this%29%3B%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0434%u0432%u0443%u0445%u0441%u0435%u043A%u0446%u0438%u043E%u043D%u043D%u043E%u0435%20%u043C%u0435%u043D%u044E%20......................%20%0Avar%20popup%20%3D%20addElement%28%22menupopup%22%2C%20%7B%0A%20%20%20position%3A%20%22after_start%22%2C%0A%20%20%20oncontextmenu%3A%20%22return%20false%22%2C%0A%20%20%20style%3A%20%22-moz-appearance%3A%20none%3B%20border%3A%201px%20solid%22%0A%7D%2C%20self%29%3B%0A%0Avar%20mainBox%20%3D%20addElement%28%22hbox%22%2C%20%7B%7D%2C%20popup%29%3B%0Avar%20leftBox%20%3D%20addElement%28%22vbox%22%2C%20%7B%7D%2C%20%20mainBox%29%3B%20%20%20%20%20//%20%u041B%u0435%u0432%u043E%u0435%20%u043C%u0435%u043D%u044E%0Avar%20rightBox%20%3D%20addElement%28%22vbox%22%2C%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u041F%u0440%u0430%u0432%u043E%u0435%20%u043C%u0435%u043D%u044E%0A%20%20%20style%3A%20%22background-color%3A%20rgb%28241%2C%20245%2C%20251%29%3B%20box-shadow%3A%201px%200px%202px%20rgb%28204%2C%20214%2C%20234%29%20inset%3B%22%20//%20%u0441%u0442%u0438%u043B%u044C%20%u043F%u0440%u0430%u0432%u043E%u0433%u043E%20%u043C%u0435%u043D%u044E%0A%7D%2C%20mainBox%29%3B%0A%0A%0A%0A//%20%u041B%u0435%u0432%u044B%u0435%20%u043F%u0443%u043D%u043A%u0442%u044B%20%u043C%u0435%u043D%u044E%20......................%20%0Avar%20leftItem0%20%3D%20addElement%28%22menuitem%22%2C%20%7B%0A%20%20%20label%3A%20%22%u041D%u043E%u0432%u043E%u0435%20%u043F%u0440%u0438%u0432%u0430%u0442%u043D%u043E%u0435%20%u043E%u043A%u043D%u043E%22%2C%0A%20%20%20oncommand%3A%20%22OpenBrowserWindow%28%7Bprivate%3A%20true%7D%29%22%2C%0A%20%20%20image%3A%20%22chrome%3A//browser/skin/Privacy-16.png%22%0A%7D%2C%20leftBox%29%3B%0A%0Avar%20leftItem1%20%3D%20addElement%28%22menuseparator%22%2C%20%7B%7D%2C%20%20leftBox%29%3B%0A%0Avar%20leftItem2%20%3D%20addElement%28%22menuitem%22%2C%20%7B%0A%20%20%20label%3A%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0444%u0430%u0439%u043B%22%2C%0A%20%20%20oncommand%3A%20%22BrowserOpenFileWindow%28%29%22%0A%7D%2C%20leftBox%29%3B%0A%0Avar%20leftItem3%20%3D%20addElement%28%22menuitem%22%2C%20%7B%0A%20%20%20label%3A%20%22%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u043A%u0430%u043A%u2026%22%2C%0A%20%20%20oncommand%3A%20%22saveDocument%28window.content.document%29%22%0A%7D%2C%20leftBox%29%3B%0A%0Avar%20leftItem4%20%3D%20addElement%28%22menuitem%22%2C%20%7B%0A%20%20%20label%3A%20%22%u041F%u0435%u0447%u0430%u0442%u044C%u2026%22%2C%0A%20%20%20oncommand%3A%20%22PrintUtils.print%28%29%22%0A%7D%2C%20leftBox%29%3B%0A%0Avar%20leftItem5%20%3D%20addElement%28%22menuseparator%22%2C%20%7B%7D%2C%20%20leftBox%29%3B%0A%0Avar%20leftItem6%20%3D%20addElement%28%22menu%22%2C%20%7B%0A%20%20%20label%3A%20%22%u0412%u0435%u0431-%u0440%u0430%u0437%u0440%u0430%u0431%u043E%u0442%u043A%u0430%u2026%22%2C%0A%20%20%20onclick%3A%20%22gDevToolsBrowser.toggleToolboxCommand%28gBrowser%29%22%0A%7D%2C%20leftBox%29%0A.appendChild%28document.getElementById%28%27menuWebDeveloperPopup%27%29.cloneNode%28true%29%29%3B%0A%0Avar%20leftItem7%20%3D%20addElement%28%22menuseparator%22%2C%20%7B%7D%2C%20%20leftBox%29%3B%0A%0Avar%20leftItem8%20%3D%20addElement%28%22menuitem%22%2C%20%7B%0A%20%20%20label%3A%20%22%u041F%u043E%u043B%u043D%u044B%u0439%20%u044D%u043A%u0440%u0430%u043D%22%2C%0A%20%20%20oncommand%3A%20%22BrowserFullScreen%28%29%22%0A%7D%2C%20leftBox%29%3B%0A%0Avar%20leftItem9%20%3D%20addElement%28%22menuitem%22%2C%20%7B%0A%20%20%20label%3A%20%22%u041D%u0430%u0441%u0442%u0440%u043E%u0438%u0442%u044C%20Sync%u2026%22%2C%0A%20%20%20oncommand%3A%20%22gSyncUI.openSetup%28%29%22%0A%7D%2C%20leftBox%29%3B%0A%0Avar%20leftItem10%20%3D%20addElement%28%22menuitem%22%2C%20%7B%0A%20%20%20label%3A%20%22%u0417%u0430%u043A%u0440%u044B%u0442%u044C%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%22%2C%0A%20%20%20oncommand%3A%20%22Application.quit%28%29%22%0A%7D%2C%20leftBox%29%3B%0A%0A%0A%0A//%20%u041F%u0440%u0430%u0432%u044B%u0435%20%u043F%u0443%u043D%u043A%u0442%u044B%20%u043C%u0435%u043D%u044E%20......................%20%0Avar%20rightItem0%20%3D%20addElement%28%22menu%22%2C%20%7B%0A%20%20%20label%3A%20%22%u0417%u0430%u043A%u043B%u0430%u0434%u043A%u0438%22%2C%0A%20%20%20image%3A%20%22chrome%3A//custombuttons/skin/button.png%22%2C%0A%7D%2C%20rightBox%29%0A.appendChild%28document.getElementById%28%27bookmarksMenuPopup%27%29.cloneNode%28true%29%29%3B%0A%0Avar%20rightItem1%20%3D%20addElement%28%22menuitem%22%2C%20%7B%0A%20%20%20label%3A%20%22menuitem%20R1%22%2C%0A%20%20%20image%3A%20%22chrome%3A//global/skin/icons/information-16.png%22%2C%0A%20%20%20oncommand%3A%20%22alert%28this.label%29%3B%22%0A%7D%2C%20rightBox%29%3B%0A%0Avar%20rightItem2%20%3D%20addElement%28%22menuseparator%22%2C%20%7B%7D%2C%20%20rightBox%29%3B%0A%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0432%u0430%u0442%u044C%20%u044D%u043B%u0435%u043C%u0435%u043D%u0442%u044B%20%u0441%20%u0443%u043A%u0430%u0437%u0430%u043D%u043D%u044B%u043C%u0438%20%u0430%u0442%u0440%u0438%u0431%u0443%u0442%u0430%u043C%u0438%20......................%20%0Afunction%20addElement%28elementName%2C%20attributes%2C%20parent%29%20%7B%0A%20%20%20var%20element%20%3D%20document.createElement%28elementName%29%3B%0A%20%20%20%0A%20%20%20element.id%20%3D%20_id%20+%20%22-%22%20+%20elementName%20+%20%22-%22%20+%20Date.now%28%29%3B%20%20%20%0A%20%20%20for%20%28%20var%20attribute%20in%20attributes%20%29%20element.setAttribute%28attribute%2C%20attributes%5Battribute%5D%29%3B%0A%20%20%20if%20%28%20%5B%22menu%22%2C%20%22menuitem%22%5D.indexOf%28elementName%29%20%21%3D%20-1%20%29%20element.classList.add%28elementName%20+%20%22-iconic%22%29%3B%0A%20%20%20%0A%20%20%20return%20parent.appendChild%28element%29%3B%0A%7D%3B%0AaddDestructor%28%28%29%3D%3E%20popup.remove%28%29%20%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отсутствует
2k1dmg, а какие кардинальные отличия от версии 2013-10-10? Я визуальных не нашёл.
1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!
Отсутствует
Добрый вечер, перестал работать поиск в NewsFox. http://take.ms/r0qjI
И ещё в полях ввода, но тут не уверен что работало раньше. FF42, Custom Buttons 0.0.5.8.2 (на 0.0.5.8.1 тоже не работает).
PS. Проверил одноимённое расширение - работает.
Моя вина, делал новый профиль и перепутал кнопки Context Search 2 2016-01-19 - работает.
Отредактировано Mishania (16-02-2016 10:34:18)
Отсутствует
del
Отредактировано Злой Буратино (27-11-2016 10:28:44)
Отсутствует
1fesFFFF
В 51-й, вообще кнопки перестали работать с текущей версией на АМО
Custom Buttons | Форум Mozilla Россия
Отсутствует
bunda1
И дабы не плодить темы, ещё у меня сломалась функция, которая работала из папки chrome - ScrollSearchEngines.uc - позволяла менять поисковые движки колёсиком мыши.
Вот сам файл ссылка , а вот его содержимое:
Чтобы это всё работало, установлено дополнение UC
// ==UserScript== // @name Scroll Search Engines // @namespace http://amb.vis.ne.jp/mozilla/ // @description Change the selected search engine by scroll wheel on 'Search xxx for yyy' menu and do search by middle-clicking the menu. // @include main // @compatibility Firefox 2.0 3.0 3.1 3.2a1 // @author Gomita // @permalink http://amb.vis.ne.jp/mozilla/?p=71 // @contributor Alice0775, . // @Note http://space.geocities.yahoo.co.jp/gl/alice0775 // @version 2009/02/20 18:00 works without searchbar by alice0775 // @version 2009/02/18 21:00 works with full screen mode by alice0775 // ==/UserScript== // @version 2007/10/21 03:50 compatibility with Fx3 and conqueryModoki2.uc.xul and performance improved by alice0775 // @version 2007.01.18 (function() { const nsIBSS = Components.interfaces.nsIBrowserSearchService; const searchService =Components.classes["@mozilla.org/browser/search-service;1"] .getService(nsIBSS); var timer,index; try{ var searchBar = BrowserSearch.getSearchBar(); }catch(e){ var searchBar = BrowserSearch.searchBar; //fx3 } var mouseScrollHandler = function(event) { var engineName,flg; var engines = searchService.getVisibleEngines({ }); // make sure that search bar is visible //if (!searchBar) // return; event.stopPropagation(); // Find the new index if(!index) index = engines.indexOf(searchService.currentEngine); // change search engine var i = index; if(event.detail > 0){ do{ i = i + 1; if(i >= engines.length) { i= index; break; } engineName = engines[i].name; flg = engineName.match(/-{2,}|\u2015{2,}/) || (engineName.match(/^{/) && !engineName.match(/}/)) || (engineName.match(/}/) && !engineName.match(/{/)) }while(flg) }else{ do{ i = i - 1; if(i < 0 ) { i= index; break; } engineName = engines[i].name; flg = engineName.match(/-{2,}|\u2015{2,}/) || (engineName.match(/^{/) && !engineName.match(/}/)) || (engineName.match(/}/) && !engineName.match(/{/)) }while(flg) } index = i; if(!gContextMenu){ searchService.currentEngine = engines[i]; //指示されたエンジンにする return; } // update context menu label if(timer) clearTimeout(timer); engineName = engines[i].name; var label = gNavigatorBundle.getFormattedString("contextMenuSearchText", [engineName, getBrowserSelection(16)]); var menuitem = event.originalTarget; menuitem.engine = engines[i]; menuitem.setAttribute("label", label); // update context menu icon timer = setTimeout(function(){ searchService.currentEngine = engines[i]; var iconURI = engines[i].iconURI; if (iconURI) menuitem.setAttribute("src", iconURI.spec); else menuitem.removeAttribute("src"); },100); }; if (searchBar) { // enable to change search engine by mouse-wheel on engine button document.getAnonymousElementByAttribute(searchBar, "anonid", "searchbar-engine-button") .addEventListener("DOMMouseScroll", mouseScrollHandler, false); } document.getElementById("cmd_CustomizeToolbars").addEventListener("DOMAttrModified", function(e) { if (e.attrName == "disabled" && !e.newValue){ try{ var searchBar = BrowserSearch.getSearchBar(); }catch(e){ var searchBar = BrowserSearch.searchBar; //fx3 } if(searchBar) document.getAnonymousElementByAttribute(searchBar, "anonid", "searchbar-engine-button").addEventListener("DOMMouseScroll", mouseScrollHandler, false); } }, false); var searchMenu = document.getElementById("context-searchselect"); if(!searchMenu) return; // enables to change search engine by mouse-wheel on context menu searchMenu.addEventListener("DOMMouseScroll", mouseScrollHandler, false); // update context menu icon on showing popup document.getElementById("contentAreaContextMenu").addEventListener("popupshowing",function(aEvent) { var ss = Cc["@mozilla.org/browser/search-service;1"]. getService(Ci.nsIBrowserSearchService); if(aEvent.originalTarget != document.getElementById('contentAreaContextMenu')) return; if (!gContextMenu || !gContextMenu.isTextSelected) return; // update context menu icon var menuitem = document.getElementById("context-searchselect"); var iconURI = ss.currentEngine.iconURI; if (iconURI) menuitem.setAttribute("src", iconURI.spec); else menuitem.removeAttribute("src"); }, false); // enable to search by middle-click searchMenu.addEventListener("click", function(event) { if (event.button == 1) { searchMenu.loadSearch(getBrowserSelection(), true, searchMenu.engine); event.originalTarget.parentNode.hidePopup(); } }, false); searchMenu.loadSearch = function(searchText, useNewTab, engine) { var ss = Cc["@mozilla.org/browser/search-service;1"]. getService(Ci.nsIBrowserSearchService); if (typeof engine == "undefined"){ // If the search bar is visible, use the current engine, otherwise, fall // back to the default engine. //if (isElementVisible(this.searchBar)) engine = ss.currentEngine; //else // engine = ss.defaultEngine; } var submission = engine.getSubmission(searchText, null); // HTML response // getSubmission can return null if the engine doesn't have a URL // with a text/html response type. This is unlikely (since // SearchService._addEngineToStore() should fail for such an engine), // but let's be on the safe side. if (!submission) return; if (useNewTab) { gBrowser.loadOneTab(submission.uri.spec, null, null, submission.postData, window.fullScreen?false:null, false); } else loadURI(submission.uri.spec, null, submission.postData, false); } searchMenu.setAttribute("oncommand", "this.loadSearch(getBrowserSelection(), true, this.engine);"); // ready to show icon in search menu document.getElementById("context-searchselect").className = "menuitem-iconic"; }());
В 51-й, вообще кнопки перестали работать
какая-нибудь рабочая бета-версия CB есть?
Отредактировано 1fesFFFF (24-01-2017 15:18:05)
Отсутствует
Отсутствует
Здесь умельцы выкладывали исправленную
https://cloud.mail.ru/public/FYVt/Wgi1kgRi8
Нужно сделать это
Как отключить проверку цифровых подписей в дополнениях Firefox | Форум Mozilla Россия
Ссылка исправлена
Отредактировано oleg.sgh (24-01-2017 15:59:52)
Отсутствует
Здесь умельцы выкладывали исправленнуюhttps://cloud.mail.ru/public/FYVt/Wgi1kgRi8Нужно сделать этоКак отключить проверку цифровых подписей в дополнениях Firefox | Форум Mozilla РоссияСсылка исправлена
Отредактировано oleg.sgh (24-01-2017 15:59:52)
куда следует кинуть вот этот файл? custombuttons@xsms.org.xpi ?
Отсутствует
Артик
куда следует кинуть вот этот файл? custombuttons@xsms.org.xpi ?
Скачать дополнение. На вкладке дополнения - шестеренка - установить дополнение из файла.
Проверка дополнений должна быть отключена.
Отсутствует
Артик
куда следует кинуть вот этот файл? custombuttons@xsms.org.xpi ?
Скачать дополнение. На вкладке дополнения - шестеренка - установить дополнение из файла.
Проверка дополнений должна быть отключена.
большое спасибо, помогло
Отсутствует
Можно ли сделать, чтобы контекстное меню не закрывалось после жмакания по поисковику, т.е. когда поиск открывается в фоне, можно было ещё жмакнуть на 2 и 3 поисковик?
Отредактировано momo2000 (05-03-2018 07:48:09)
Отсутствует
Исходный код из первого сообщения (https://forum.mozilla-russia.org/viewto … 72#p533572) не захотел работать в 59.0.1
Однако заработал, если закомментировать строчку №36 исходного кода
и вставить её, допустим, 59-й строчкой.
Чуточку портит радость показ всех поисковых систем, вместо только включенных.
Может быть есть для этого решение?
Отсутствует
Coroner
(async (contextMenu, searchSelect, searchService) => { var fullText = true; Services.search.isInitialized || await new Promise( resolve => Services.search.init(resolve) ); searchSelect.collapsed = true; // удалить стандартный пункт меню для поиска // Создать новый пункт меню для поиска .... var menu = contextMenu.insertBefore(document.createElement('menu'), searchSelect); menu.setAttribute("class", "menu-iconic"); addEventListener("popupshowing", (e)=> menu.hidden = searchSelect.hidden, false, contextMenu); function setMenu() { menu.engine = searchService.currentEngine; menu.setAttribute("label", "Искать в " + menu.engine.name + " или в ..."); menu.setAttribute("image", menu.engine.iconURI.spec ); }; setMenu(); // Создать подменю с поисковиками .... var menuPopup = menu.appendChild(document.createElement("menupopup")); menuPopup.setAttribute('style', 'overflow: scroll'); function setItemsToMenuPopup(e) { menuPopup.textContent = ""; var engines = searchService.getVisibleEngines({}) .filter(engine => engine != searchService.currentEngine); var hiddenList = Services.prefs.getStringPref("browser.search.hiddenOneOffs").split(","); engines.forEach((engine)=> { if (hiddenList.includes(engine.name)) return; var mItem = document.createElement("menuitem"); mItem.setAttribute("label", engine.name); mItem.setAttribute("class", "menuitem-iconic"); mItem.setAttribute("src", engine.iconURI.spec); mItem.engine = engine; menuPopup.appendChild(mItem); }) }; setItemsToMenuPopup(); // установить действие для клика на меню и подменю menu.onmouseup = e => { var background = e.button != 0; var text = gContextMenuContentData.selectionInfo[fullText ? "fullText" : "text"]; contextMenu.hidePopup(); var submission = e.target.engine.getSubmission(text, null); gBrowser.loadOneTab(submission.uri.spec, null, null, submission.postData, background, false); } // Наблюдатель за изменениями в поисковиках пересоздаёт меню и подменю .... var getEngineModified = { observe:(subject, topic, data)=> { if ( /changed|removed|current/.test(data) ) { setMenu(), setItemsToMenuPopup() }; } }; Services.obs.addObserver(getEngineModified, "browser-search-engine-modified", false); Services.prefs.addObserver("browser.search.hiddenOneOffs", setItemsToMenuPopup); // Удалять наблюдатели и меню, показать стандартный пункт .... addDestructor(()=> { menu.remove(); searchSelect.collapsed = false; Services.obs.removeObserver(getEngineModified, "browser-search-engine-modified"); Services.prefs.removeObserver("browser.search.hiddenOneOffs", setItemsToMenuPopup); }); })(document.getElementById("contentAreaContextMenu"), document.getElementById("context-searchselect"), Services.search);
Отсутствует
Dumby, спасибо добрый человек. Работает как надо.
Так привык к возможности быстро найти что надо и там где надо, что недоумеваю почему из коробки такие унылые возможности для поиска.
Отсутствует
И этот чудный код отвалился. Кому помешал?
Возможно та же причина что и в https://forum.mozilla-russia.org/viewto … 37#p762537
Разве что там вместо addTab стоит loadOneTab
Если так, то не ли способа вроде https://forum.mozilla-russia.org/viewto … 86#p761786 , только для loadOneTab?
Сама менюшка работает, но по клику поиск во вкладке не открывается.
Отсутствует
Coroner
В данном случае так, наверно
/* contextMenu.hidePopup(); var submission = e.target.engine.getSubmission(text, null); gBrowser.loadOneTab(submission.uri.spec, null, null, submission.postData, background, false); */ var {principal} = gContextMenu; contextMenu.hidePopup(); var submission = e.target.engine.getSubmission(text, null); gBrowser.loadOneTab(submission.uri.spec, { postData: submission.postData, inBackground: background, triggeringPrincipal: principal });
Отсутствует