Ещё две нерабочие кнопки обнаружились №15 и №23. А с ними что не так?
Ну, наверно, всё в том же файле, всё те же Nightly-токсичные const'ы
const createMsg = custombuttonsUtils. createMsg;
const gClipboard = custombuttonsUtils. gClipboard;
На форуме
Как пользоваться полифиллами?
У меня 20, он не поддерживает метод closest(). Я нашёл для этого полифилл https://plainjs.com/javascript/traversi … lector-39/Как я делаю. Запускаю скажем на этой странице код
скрытый текстВыделить кодКод:
this.Element && function(ElementPrototype) { ElementPrototype.closest = ElementPrototype.closest || function(selector) { var el = this; while (el.matches && !el.matches(selector)) el = el.parentNode; return el.matches ? el : null; } }(Element.prototype);
И после этого пытаюсь найти ближайшего родителя-дива для картинки из поста oleg953Выделить кодКод:
var el = content.document.querySelector('[src="http://ipic.su/img/img7/tn/kiss_101kb.1443207760.png"]'); alert(el.closest('div'));И оно выдаёт ошибку el.closest is not a function
Почему полифилл не работает?
Знатоки, ну кто что знает про это?
Вопрос по-прежнему актуален.
Отсутствует
rbfyec
Ну, если для страниц, то может заведи себе
addEventListener("DOMWindowCreated", function(e) e.target.defaultView.wrappedJSObject.Element.prototype.closest = function(selector) { for(var element = this; element; element = element.parentElement) { if (element.mozMatchesSelector(selector)) return element; } return null; } );
На форуме
rbfyec
Ну, если для страниц, то может заведи себескрытый текстВыделить кодКод:
addEventListener("DOMWindowCreated", function(e) e.target.defaultView.wrappedJSObject.Element.prototype.closest = function(selector) { for(var element = this; element; element = element.parentElement) { if (element.mozMatchesSelector(selector)) return element; } return null; } );
Да, мне для страниц. А что с этим кодом надо делать?
Я положил его в инициализацию кнопки. Но по-прежнему, при попытке вывести alert(el.closest('div')) я получаю ошибку el.closest is not a function
Отсутствует
при попытке вывести alert(el.closest('div'))
Не, как добавить именно к XrayWrapper'нутым, — я без понятия.
А так, алерт вполне себе алертится.
var selector = '[alt="http://ipic.su/img/img7/tn/kiss_101kb.1443207760.png"]'; var element = content.wrappedJSObject.document.querySelector(selector); alert(element.closest("div").id);
На форуме
rbfyec пишетпри попытке вывести alert(el.closest('div'))
Не, как добавить именно к XrayWrapper'нутым, — я без понятия.
А так, алерт вполне себе алертится.скрытый текстВыделить кодКод:
var selector = '[alt="http://ipic.su/img/img7/tn/kiss_101kb.1443207760.png"]'; var element = content.wrappedJSObject.document.querySelector(selector); alert(element.closest("div").id);
Что значит XrayWrapper'нутый я не знаю, но понял, что в ссылке на элемент надо между content и document вставить это: wrappedJSObject.
Тогда да, работает. Ну для меня это главное.
Спасибо, Dumby!
Отсутствует
toolbarbutton [83×19] namespaceURI: XUL id = qfb-qs-sender checkState = 1 checked = true label = Отправителю type = checkbox
В общем нужно все фильтры отключить?
// https://github.com/Infocatcher/Custom_Buttons/tree/master/Quick_Filter_by_Sender // Quick Filter by Sender button for Custom Buttons // (code for "code" section) // (c) Infocatcher 2013 // version 0.1.0 - 2013-08-16 var selectedMessages = gFolderDisplay.selectedMessages; if(selectedMessages && selectedMessages.length) { var authorEmail = extractAddress(selectedMessages[0].author); setFilterOptions({ sender: true, recipients: false, subject: false, body: false }); var filterField = document.getElementById("qfb-qs-textbox"); filterField.value = authorEmail; filterField.doCommand(); } function extractAddress(header) { return Components.classes["@mozilla.org/messenger/headerparser;1"] .getService(Components.interfaces.nsIMsgHeaderParser) .extractHeaderAddressMailboxes(header); } function setFilterOptions(opts) { for(var type in opts) if(opts.hasOwnProperty(type)) { var btn = document.getElementById("qfb-qs-" + type); /*----------*/ if(btn.checked != 0) {btn.click(); return;} // ----------> Тут врезался, вроде работает пока if(btn.checked != opts[type]) btn.click(); } }
Infocatcher, спасибо за кнопку!
Отредактировано fokanik (13-10-2015 16:13:05)
Отсутствует
долго сопротивлялся, но вот пришла и моя пора переходить с ff 24 esr на новую версию и сразу возникли вопросы/проблемы...
есть ли готовый код или какое решение с помощью CB вот такой проблемы:
раньше, выделял текст на странице и перетягивал его на панель поиска, она раскрывалась, я дотягивал текст до нужного поисковика и отпускал > открывалась вкладка с результатами поиска. Сейчас же, при перетягивании, панель не раскрывается и даже если отпустить на поисковике по умолчанию, то поиск не стартует, пока не нажать на значок лупы (или кнопку Enter).
Можно ли вернуть прежний функционал?
И еще, помогите разобраться с таким, вроде бы простым кодом:
/*Initialization code*/ // настройка функций кликов мыши(Mouse Click settings) this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if (!gFindBar.hidden) setTimeout(function() { gFindBar.toggleHighlight(true) }, 200); // gFindBar._findField.value = ""; goDoCommand("cmd_selectNone"); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if (!gFindBar.hidden) setTimeout(function() { gFindBar.toggleHighlight(true) }, 200); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; // Обработчики следят за переключением табов и поддерживают текущую подсветку слов addEventListener("TabSelect", function(e) { if ( !gBrowser.mCurrentTab.hasAttribute("busy") ) { if (!gFindBar.hidden) { setTimeout(function() { gFindBar.onFindCommand(); gFindBar.toggleHighlight(true); }, 200); }; } }, false, gBrowser.tabContainer ); // Обработчики следят за изменением страницы и поддерживают текущую подсветку слов var progressListener = { onStateChange: function() { if (!gFindBar.hidden) { setTimeout(function() { gFindBar.onFindCommand(); gFindBar.toggleHighlight(true); }, 200); }; } }; gBrowser.addProgressListener(progressListener); addDestructor(function() { gBrowser.removeProgressListener(progressListener) }); // find bar, открыть/закрыть двойным СКМ на странице addEventListener("dblclick", function (event){ if (event.button !== 1) return; event.preventDefault(); gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if (!gFindBar.hidden) setTimeout(function() { gFindBar.toggleHighlight(true) }, 150); //goDoCommand("cmd_selectNone"); }, false, gBrowser); // FindBar, поиск колесиком мыши (FindBar, Mouse Scroll find) addEventListener('DOMMouseScroll', function (event){ setTimeout(function() { gFindBar.onFindAgainCommand(event.detail < 0); }, 200); }, false, gFindBar);
Отсутствует
это какими жестами ты пользуешься?
У меня дополнение DragIt. Можно настроить любые жесты.
Это дополнение позволяет устанавливать одинаковые жесты для разных типов действий.
Например, движение влево:
выделенный текст - открывает меню поиска
страница - возврат на предыдущюю
ссылка - открыть в фоне
картинка - копировать
Все настраивается.
Извиняюсь за невольную рекламу и оффтопик.
Отсутствует
решил поэкспериментировать с кодом обработчика:
addEventListener('DOMMouseScroll', function (event){ setTimeout(function() { gFindBar.onFindAgainCommand(event.detail < 0); }, 200); }, false, gFindBar);
и выяснилось, что он как-то "слетает/пропадает" при переходе/открытии на новую вкладку, поэтому и не работает поиск колесиком
для проверки идеи заменил вот так:
и теперь поиск колесом работает везде, но главное РАБОТАЕТ!!! Это что значит, что как-то обработчик надо изменить?
Я в этом мало что понимаю
ПОМОГИТЕ!!!
Отсутствует
pofigist
Вариант
addEventListener("wheel", (e, findbar = gBrowser.selectedTab._findBar) => findbar && findbar.matches(":hover") && e.deltaY && findbar.onFindAgainCommand(e.deltaY < 0) , false, gBrowser);
Отредактировано Dumby (17-10-2015 19:58:25)
На форуме
Dumby
Класс! Всё работает, спасибо!!!
Один вопросик: в итоге остался вот такой код:
/*Initialization code*/ // настройка функций кликов мыши(Mouse Click settings) this.onclick = function(event) { if(event.button == 0) { // Действие при клике ЛКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if (!gFindBar.hidden) setTimeout(function() { gFindBar.toggleHighlight(true) }, 200); // if (gFindBar.hidden) setTimeout(function() { gFindBar.toggleHighlight(false) }, 200); gFindBar._findField.value = ""; goDoCommand("cmd_selectNone"); } else if(event.button == 1) { // Действие при клике СКМ gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if (!gFindBar.hidden) setTimeout(function() { gFindBar.toggleHighlight(true) }, 200); // if (gFindBar.hidden) setTimeout(function() { gFindBar.toggleHighlight(false) }, 200); goDoCommand("cmd_selectNone"); goDoCommand("cmd_paste"); } }; // Обработчики следят за переключением табов и поддерживают текущую подсветку слов addEventListener("TabSelect", function(e) { if ( !gBrowser.mCurrentTab.hasAttribute("busy") ) { if (!gFindBar.hidden) { setTimeout(function() { gFindBar.onFindCommand(); gFindBar.toggleHighlight(true) }, 200); }; } }, false, gBrowser.tabContainer ); // Обработчики следят за изменением страницы и поддерживают текущую подсветку слов var progressListener = { onStateChange: function() { if (!gFindBar.hidden) { setTimeout(function() { gFindBar.onFindCommand(); gFindBar.toggleHighlight(true) }, 200); }; } }; gBrowser.addProgressListener(progressListener); addDestructor(function() { gBrowser.removeProgressListener(progressListener) }); // . . . . . // find bar, открыть/закрыть двойным СКМ на странице addEventListener("dblclick", function (event){ if (event.button !== 1) return; event.preventDefault(); gFindBar.hidden ? gFindBar.onFindCommand() : gFindBar.close(); if (!gFindBar.hidden) setTimeout(function() { gFindBar.toggleHighlight(true) }, 150); //goDoCommand("cmd_selectNone"); }, false, gBrowser); // . . . . . // FindBar, поиск колесиком мыши (FindBar, Mouse Scroll find) addEventListener("wheel", (e, findbar = gBrowser.selectedTab._findBar) => findbar && findbar.matches(":hover") && e.deltaY && findbar.onFindAgainCommand(e.deltaY < 0) , false, gBrowser);
И с вопросом по перетягиванию выделенного текста на панель адреса можешь помочь?
Отредактировано pofigist (17-10-2015 20:45:41)
Отсутствует
единственное так это то, что счетчик найденного при переходе/открытии новой вкладки или любой ссылки в новую вкладку, сразу не отображается пока не крутнуть колесиком по панели
В коде пять раз встречается запись gFindBar.onFindCommand()
Попробуй заменить третью и четвёртую на gFindBar._find(false, true)
И с вопросом по перетягиванию выделенного текста на панель адреса можешь помочь?
Безотносительно меня, но, насколько я понял, некий код работал на FF24, но перестал работать на FF41.
Краткое описание того, что он делал есть, но сам код не приведён.
Плюс, не предоставлено предпочтение в настройке browser.search.showOneOffButtons
На форуме
Dumby
совет с заменой помог - так намного лучше! Спасибо!
С вопросом по перетягиванию:
У меня кода никакого не было. Это ж вроде был такой функционал старых версий FF: выделил текст на странице > схватил его мышкой > потянул к панели поиска > панель раскрылась > перетянул на нужный поисковик > отпустил кнопку мыши на нём > открывается вкладка с результатами поиска этого (выделенного) текста в этом поисковике. А сейчас так: выделил текст на странице > схватил его мышкой > потянул к панели поиска > панель НЕ раскрылась > отпустил кнопку мыши > текст вставился в строку > вручную раскрываю список поисковиков > кликаю на нужном поисковике (текст при этом остается в строке) > кликаю по значку лупы > открывается вкладка с результатами поиска этого текста в этом поисковике. Все стало сложнее/неудобнее!
Вот я и хочу попросить код, эмулирующий старое поведение.
Это возможно?
По поводу browser.search.showOneOffButtons : у меня установлен в "false". Так более привычно.
Отсутствует
Подскажите, как можно закрывать открытую кнопку-меню PanelUI ? Цель: открываю эту кнопку-меню и жму помещенную на неё CB-кнопку и хочу, чтобы после этого этот popup сам закрывался.
Пробовал так:
и так:
меню не закрывается. Что не так?
И еще вопрос в тему: CB-кнопки помещенные в это меню не инициализируются при старте FF ? Можно как-то заставить?
Отсутствует
И еще ситуация:
хочу повесить обработчик на кнопку настроек, которая находится в кнопке-меню
document.getElementById("preferences-button").addEventListener("click", afunc, false);
но при старте FF кнопка неактивна, не находит такого элемента по id. Как иначе получить доступ???
Отсутствует
Это ж вроде был такой функционал старых версий FF
Не смог обнаружить такой функционал .
Может подойдёт что-то типа
(bar => { var delay = 200; var id = 0, popup = bar._popup; addEventListener("dragenter", e => { clearTimeout(id); id = setTimeout(() => popup.parentNode.open = true, delay); }, false, bar); addEventListener("dragexit", () => clearTimeout(id), false, bar); addEventListener("drop", e => { if (!e.target.className.contains("searchbar-engine-menuitem")) return; e.stopPropagation(); popup.hidePopup(); var dt = e.dataTransfer; var text = dt.getData("text/plain") || dt.getData("text/x-moz-text-internal"); text && bar.doSearch(text, "tab", e.target.engine); }, false, popup); })(BrowserSearch.searchBar);
открываю эту кнопку-меню и жму помещенную на неё CB-кнопку и хочу, чтобы после этого этот popup сам закрывался
Странно, у меня popup сам закрывается, даже если нажать
на помещенную туда пустую CB-кнопку.
CB-кнопки помещенные в это меню не инициализируются при старте FF ? Можно как-то заставить?
Есть заставлялка. Кстати, вроде даже так работает
PanelUI._isReady || PanelUI.ensureReady();
при старте FF кнопка неактивна, не находит такого элемента по id. Как иначе получить доступ???
Вариант
(pup => addEventListener("popupshowing", function ps() { removeEventListener("popupshowing", ps, false, pup); alert(document.getElementById("preferences-button")); }, false, pup))(document.getElementById("PanelUI-popup"));
Отредактировано Dumby (18-10-2015 23:03:06)
На форуме
Не смог обнаружить такой функционал .
Странно, у меня на прежнем ff так было. Специально для этого никакое дополнение не ставил. Может какое само так сделало, не знаю.
Может подойдёт что-то типа
Шикарно!!! Как раз то, что нужно!!! Спасибо!
Добавлено:
А можно ли красоту навести: когда вожу зажатый текст над поисковиками, чтобы тот, над которым нахожусь выделялся курсором? Так просто будет более наглядно...
Отредактировано pofigist (19-10-2015 20:40:31)
Отсутствует
Кстати, вроде даже так работает
PanelUI._isReady || PanelUI.ensureReady();
Да, спасибо, вроде бы работает.
Странно, у меня popup сам закрывается, даже если нажать
на помещенную туда пустую CB-кнопку.
Звыняй, не уточнил, что жму не левой, а средней кнопкой мыши.
Приведенный тобой код куда или вместо чего нужно поместить. Я ж немного чего в этом понимаю...
Просто вот такое хотел замутить:
// открыть about:config по нажатию СКМ на кнопке настроек в PanelUI document.getElementById("preferences-button").addEventListener("click", aconf, false); function aconf(event){ if (event.button==1){ ( function() { if (getBrowser().currentURI.spec == "about:blank") loadURI ("about:config"); else { getBrowser (). selectedTab = getBrowser (). addTab ("about:config"); }; setTimeout(function() { document.getElementById("panelUI-popup").hidePopup(); }, 300); })(); } };
а оно не работает...
Кнопка, в которой расположен этот код, при запуске становится неактивной
Отсутствует