Полтергейст какой то.
Проверьте только с этим кодом! Если и тогда не будет работать, тогда не знаю...
Add, если используйте "Firefox Good", то попробуйте добавить этот код в файл "FG_userChrome.css".
Отредактировано kokoss (04-08-2020 20:31:55)
Win7
Отсутствует
del
Отредактировано Vitaliy V. (14-04-2022 01:25:55)
Отсутствует
Вот такое придумалось
Вобщем, никаких эвент и мессадж листенеров,
вместо этого — врезка в TooltipTextProvider.prototype.
Ну, я просто на интерес показать, не как продукт, а как концепцию.
try {CustomizableUI.createWidget(({ label: "Href in tooltip", icons: { true: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==", false: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==" }, id: "ucf-HrefInTooltip", pref: "ucf.HrefInTooltip.enabled", localized: false, get state() { return Services.prefs.getBoolPref(this.pref, false); }, setIcon(btn, state = this.state) { btn.setAttribute("image", this.icons[state]); }, onCreated(btn) { btn.owner = this; this.setIcon(btn); btn.tooltipText = this.label; btn.setAttribute("oncommand", "owner.toggle()"); }, toggle() { Services.prefs.setBoolPref(this.pref, !this.state); }, observe(s, topic) { if (topic.startsWith("q")) return this.destroy(); var {state} = this; for(var {node} of CustomizableUI.getWidget(this.id).instances) this.setIcon(node, state); state ? this.initTooltip() : this.destroyTooltip(); }, init() { Services.prefs.addObserver(this.pref, this); Services.obs.addObserver(this, "quit-application-granted", false); this.state && this.initTooltip(); delete this.init; return this; }, destroy() { Services.prefs.removeObserver(this.pref, this); Services.obs.removeObserver(this, "quit-application-granted"); }, initTooltip() { var url = this.initURL = this.createURL("psInit"); (this.initTooltip = () => Services.ppmm.loadProcessScript(url, true))(); }, destroyTooltip() { var url = this.createURL("psDestroy"); (this.destroyTooltip = () => { Services.ppmm.removeDelayedProcessScript(this.initURL); Services.ppmm.loadProcessScript(url, false); })(); delete this.createURL; }, createURL: function createURL(meth) { var subst = this.id + "-" + meth; (createURL.rph || (createURL.rph = Services.io.getProtocolHandler("resource") .QueryInterface(Ci.nsIResProtocolHandler) )).setSubstitution(subst, Services.io.newURI("data:text/javascript;charset=utf-8," + encodeURIComponent( `(${this[meth]})(ChromeUtils.import("resource://gre/modules/TooltipTextProvider.jsm").TooltipTextProvider.prototype)` ))); delete this[meth]; return "resource://" + subst; }, psInit: proto => { if (proto.getTextPlus) return proto.getNodeText = proto.getTextPlus.newGetNodeText; //================[ start content ]================ proto.getTextPlus = node => { var href = getHref(node); if (!href || href == "#" || skipRe.test(href)) return; if (href.startsWith("data:")) return crop(href, 64); return crop(decode(href)); } var skipRe = /^(?:javascript|addons):/; var getHref = node => {do { if (HTMLAnchorElement.isInstance(node) && node.href) return node.href; } while (node = node.flattenedTreeParentNode)} var crop = (url, max = 128) => url.length <= max ? url : url.slice(0, --max) + "\u2026"; // ellipsis var decode = url => { var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); var ldu = Cu.import("resource:///modules/UrlbarInput.jsm", {}).losslessDecodeURI; return (decode = url => {try {return ldu(ios.newURI(url));} catch {return url;}})(url); } //================[ end content ]================== var func = proto.getTextPlus.getNodeText = proto.getNodeText; proto.getTextPlus.newGetNodeText = proto.getNodeText = function(node, text) { var res = func.apply(this, arguments); if (!res && !(node?.localName != "browser" && node.ownerGlobal && node.ownerDocument)) return false; var txt = this.getTextPlus(node); return txt ? text.value = res ? txt + "\n" + text.value : txt : res; } }, psDestroy: proto => { proto.getNodeText = proto.getTextPlus.getNodeText; } }).init())} catch(ex) {Cu.reportError(ex);}
Отредактировано Dumby (04-08-2020 22:28:31)
Отсутствует
Вот такое придумалось, но надо тестить
custom_script.js
Прикольно, спасибо. А как бы тогда убрать тултип в строке статуса? Чтоб небыло лишнего мелькания и дублирования.
Отредактировано voqabuhe (04-08-2020 23:39:47)
Отсутствует
Vitaliy V.
Заметил, что скрипт не срабатывает, если вкладку выгрузить, а потом снова загрузить.
Добавлено 05-08-2020 00:19:27
Dumby
У меня почему-то твой скрипт не работает 79.0. Засунул его в custom_script.js, правильно, или куда его?
Отредактировано voqabuhe (05-08-2020 00:19:27)
Отсутствует
У меня почему-то твой скрипт не работает 79.0. Засунул его в custom_script.js, правильно, или куда его?
Да, засунул правильно.
И да, вот прям после установки не работает.
Нужно либо создать true настройку, либо вытащить и нажать кнопку.
Отсутствует
Vitaliy V.
Вроде хорошо. Поставил буду смотреть и сообщу если что. Спасибо.
Как убрать переход на новую строку после базового адреса? Достаточно, только в первой строке или во второй тоже?
Хочу посмотреть как удобнее будет.
Обработку атрибута alt= добавлять не думаете? На предыдущей странице у моих картинок он есть (если для теста). Если вдруг надумаете, то возможно, alt стоит показывать, только если title нет, а то иногда в alt title дублируют.
voqabuhe
Отредактировано _zt (05-08-2020 01:22:59)
Отсутствует
Заметил, что скрипт не срабатывает, если вкладку выгрузить, а потом снова загрузить.
А на не заметил такого, значит пусть будет DOMContentLoaded а не pageshow, заменил.
я тоже пытался придумать, и показалось приемлимым
Ну вот, если бы знал то и время бы не стал тратить на это, но два варианта лучше.
Будет время разберусь что это за концепция.
Добавлено 05-08-2020 01:33:09
Как убрать переход на новую строку после базового адреса?
//path = `\n${href.pathQueryRef}`; //if (path === "\n/") path = ""; path = href.pathQueryRef; if (path === "/") path = "";
Обработку атрибута alt= добавлять не думаете?
А зачем, какой от него прок, когда картинки не загрузятся?
Отредактировано Vitaliy V. (05-08-2020 01:47:14)
Отсутствует
Dumby
Да, засунул правильно.
И да, вот прям после установки не работает.
Нужно либо создать true настройку, либо вытащить и нажать кнопку.
Ах вон оно чё, ну кто ж знал, что это целая кнопка. Спасибо, ну это совсем идеально.
не скатывайтесь, как баба базарная, до откровенного хамства
Вот поэтому и не стал отвечать, и как вижу не ошибся. И на этом прекращаю, даже под спойлером
Добавлено 05-08-2020 01:41:23
А на не заметил такого, значит пусть будет DOMContentLoaded а не pageshow, заменил.
Спасибо. Ну а нижний то тултип как скрыть, подскажете?
Отредактировано voqabuhe (05-08-2020 01:42:44)
Отсутствует
voqabuhe
стилем
#statuspanel[type="overLink"] { transition: none !important; opacity: 0 !important; visibility: hidden !important; }
Отсутствует
Vitaliy V.
alt
А он только у картинок используется? Значит я чего то не понял. Тогда вопрос снимается. Просто я пока скрипты гонял несколько раз наткнулся, но не понял, что только у картинок.
P.S. И это не базовый домен...
Я писал базовый адрес, а не домен. Не знаю как правильно его назвать.
Отсутствует
Всем привет, есть:
Расширения Classical Search Bar и Purple Private Windows
Когда (в приватном режиме) активно второе, иконки поисковых систем из первого и иконки поисковых систем в самом фоксе - не инвертируются (а хотелось бы чтобы они не выбивались из общего дизайна).
Отредактировано Neytrino (05-08-2020 11:52:55)
© уважением Neytrino.
Отсутствует
_zt
ну да для ссылок он бесполезен, используется в тегах
<img>
<area>
<input type="image">
Neytrino
Ну не знаю разве что фильтр применить но будет всё одним цветом
*|*:root[privatebrowsingmode] .searchbar-engine-image, *|*:root[privatebrowsingmode] .searchbar-engine-one-off-item > .button-box > .button-icon { filter: url("data:image/svg+xml;charset=utf-8,<svg height='0' xmlns='http://www.w3.org/2000/svg'><filter id='fill'><feComposite in='FillPaint' in2='SourceGraphic' operator='in'/></filter></svg>#fill") !important; fill: currentColor !important; color: inherit !important; } @-moz-document url("moz-extension://XXXXXXXX-XXXX-UUID-XXXX-XXXXXXXXXXXX/popup/popup.html") { :root[style] .menuitem .icon img { filter: url("data:image/svg+xml;charset=utf-8,<svg height='0' xmlns='http://www.w3.org/2000/svg'><filter id='fill'><feComposite in='FillPaint' in2='SourceGraphic' operator='in'/></filter></svg>#fill") !important; fill: var(--popup-text) !important; } }
Отсутствует
После нажатии звездочки в адресной строке, в открывшемся окне нужно выбрать место сохранения и нажать Готово для закрытия. Недавно пробегал способ (стиль? / скрипт?) автозакрытия окна сразу после выбора места сохранения. Никак не могу теперь найти. Кто знает, подскажите, пожалуйста
Отсутствует
После нажатии звездочки в адресной строке, в открывшемся окне нужно выбрать место сохранения и нажать Готово для закрытия. Недавно пробегал способ (стиль? / скрипт?) автозакрытия окна сразу после выбора места сохранения.
После выбора места сохранения закладки, кликните ЛКМ на пустом месте страницы и это окно закроется.
Win7
Отсутствует
После выбора места сохранения закладки, кликните ЛКМ на пустом месте страницы и это окно закроется.
Чем отличается от клика ЛКМ по кнопке Готово? То же лишнее действие. Вопрос про
автозакрытие окна
Отредактировано qwerty1956 (05-08-2020 12:58:42)
Отсутствует
Vitaliy V., как всегда - очень круто, спасибо! но второй код (в "userContent.css" почему-то не работает)
@-moz-document url("moz-extension://6905b838-e843-4ee3-9df0-b4c79673b21c/popup/popup.html") { :root[style] .menuitem .icon img { filter: url("data:image/svg+xml;charset=utf-8,<svg height='0' xmlns='http://www.w3.org/2000/svg'><filter id='fill'><feComposite in='FillPaint' in2='SourceGraphic' operator='in'/></filter></svg>#fill") !important; fill: var(--popup-text) !important; } }
© уважением Neytrino.
Отсутствует
Neytrino
Должен работать если в настройках Classical Search Bar
оформление auto + тема в данном случае расширение Purple Private Windows
или тёмное - тема не обязательна.
А если так заменить
:root[style] --> удалить
var(--popup-text) --> currentColor
если нет, то возможно что-то с файлом userContent.css не того
или UUID не тот
Отредактировано Vitaliy V. (05-08-2020 15:21:19)
Отсутствует
Vitaliy V., и так - тоже не хочет...
@-moz-document url("moz-extension://6905b838-e843-4ee3-9df0-b4c79673b21c/popup/popup.html") { .menuitem .icon img { filter: url("data:image/svg+xml;charset=utf-8,<svg height='0' xmlns='http://www.w3.org/2000/svg'><filter id='fill'><feComposite in='FillPaint' in2='SourceGraphic' operator='in'/></filter></svg>#fill") !important; fill: currentColor !important; } }
© уважением Neytrino.
Отсутствует
UUID - тот, ну по крайней мере у *.xpi расширения (в папке "extensions") такое же имя (в фигурных скобках)...
А понятно, не обратил внимания - вы использовали ID расширения это не то.
Откройте about:debugging#/runtime/this-firefox и скопируйте Внутренний UUID
Отсутствует