Beiträge von milupo
-
-
und bei #5 tut sich nichts
Bei mir schon. Du musst mit dem Mausrad (Mittelklick) etwas gefühlt klicken, dann erscheint auch die Liste, siehe Beitrag #7.
-
lenny2 Ich glaube ich habe es hinbekommen. Sieh folgende Skriptversion:
JavaScript
Alles anzeigen// ==UserScript== // // @description Displays target URL in tooltip, when hovering over a link // Button has “tooltips on”/“tooltips off” positions // ==/UserScript== try {CustomizableUI.createWidget(({ label: "Links in pop-up tooltips", localized: false, id: "URLTooltip", pref: "URLTooltip.enabled", get state() { return Services.prefs.getBoolPref(this.pref, true); // по-умолчанию включено }, setIcon(btn, state = this.state) { btn.setAttribute("image", "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' style='fill:context-fill rgb(142, 142, 152);'><path d='M9.618 6.721a2.483 2.483 0 0 0-.39-.317l-.735.734A1.486 1.486 0 0 1 8.91 9.55l-2.12 2.122a1.486 1.486 0 0 1-2.122 0 1.486 1.486 0 0 1 0-2.121l.605-.605a3.53 3.53 0 0 1-.206-1.209L3.961 8.843a2.506 2.506 0 0 0 0 3.535 2.506 2.506 0 0 0 3.535 0l2.122-2.121a2.506 2.506 0 0 0 0-3.536z'/><path d='M6.79 9.55c.12.121.25.226.389.317l.734-.734a1.486 1.486 0 0 1-.417-2.411L9.618 4.6a1.486 1.486 0 0 1 2.121 0 1.486 1.486 0 0 1 0 2.121l-.605.605c.137.391.211.798.206 1.209l1.106-1.107a2.506 2.506 0 0 0 0-3.535 2.506 2.506 0 0 0-3.535 0L6.789 6.014a2.506 2.506 0 0 0 0 3.536z'/><circle style='fill:none;stroke:context-fill rgb(142, 142, 152);stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round' cx='8' cy='8' r='7.4'/></svg>"); btn.style.setProperty("fill", `${state ? "color-mix(in srgb, currentColor 20%, #e31b5d)" : ""}`); }, onCreated(btn) { this.setIcon(btn), this.btn = btn, btn.owner = this; //btn.setAttribute("oncommand", "owner.toggle()"); btn.addEventListener('command', () => { this.toggle(); }); btn.addEventListener('mouseenter', () => { this.mouseenter(); }); }, mouseenter() { this.btn.tooltipText = this.label +' – '+ `${this.state ? "enabled" : "disabled"}`; }, 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.importESModule("resource://gre/modules/TooltipTextProvider.sys.mjs").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 = ChromeUtils.importESModule("resource:///modules/UrlbarInput.sys.mjs", {}).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), add = ""; return txt ? text.value = res ? text.value + "\n" + txt + add : txt + add : res; } }, psDestroy: proto => { proto.getNodeText = proto.getTextPlus.getNodeText; } }).init())} catch(ex) {Cu.reportError(ex);}In den Zeilen 20 und 23 musste nur owner.toggle() in this.toggle() und owner.mouseenter() in this.mouseenter() geändert werden.
-
Und zwar wollte ich die kompletten Menüs der Menüleiste in das Appmenü verschieben, bzw. kopieren.
Geht aber warum auch immer nicht!Wenn ich mich recht erinnere, wolltest du das mit dieser zusätzlichen Datei machen und das klappte nicht.
Aber ich habe ja nicht kopiert, sondern umgeschrieben. Da kannst du nicht so einfach kopieren.
-
Das sind nur die Sprachpakete.
Oh, lesen müsste man können. Steht ja überall. Als Windows-Nutzer muss man extra nach den Sprachpaketen suchen.

-
Ich kenne mich nicht wirklich damit aus.
Wem sagst du das.

-
Das Script selbst kommt wohl aus dieser Ecke, und erstellt eine Kopie von Zurück/Vor, siehe Bilder dort.
Dort zwei Beiträge höher (Beitrag #3) ist die ursprünglich längere Variante von aborix, die der oben vom TE entspricht. Die hat aborix dann auf die von dir verlinkte zusammengestaucht, da der auszuführende Code für beide Schaltflächen ja gleich ist.
-
Ich hatte das Skript schon angepasst, weil der TE Fx 136 verwendet. Du kannst aber das Skript auch in Fx 134 testen und dir das selbst anschauen, musst aber dann die Version aus Beitrag #1 nehmen, weil ich nicht weiß, ob meine Anpasserei schon korrekt ist.
-
-
Ein Versuch. Teste mal diese Version:
JavaScript
Alles anzeigen/* Forward_Back_Button.uc.js by aborix */ (function() { if (window.__SSi != 'window0') return; function createButton(str) { CustomizableUI.createWidget({ id: 'back-button-2', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function() { let button = document.getElementById(str + '-button').cloneNode(true); button.id = 'back-button-2'; button.style.listStyleImage = 'url(chrome://browser/skin/' + str + '.svg)'; button.addEventListener('click', event => { checkForMiddleClick(this, event); if (event.button == 0) { event.target.ownerDocument.getElementById("' + str + '-button").click(); } }); button.addEventListener('mousedown', event => { if (event.button == 0) { event.preventDefault(); } }); return button; } }); } createButton('back'); })(); (function() { if (window.__SSi != 'window0') return; function createButton(str) { CustomizableUI.createWidget({ id: 'forward-button-2', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function() { let button = document.getElementById(str + '-button').cloneNode(true); button.id = 'forward-button-2'; button.style.listStyleImage = 'url(chrome://browser/skin/' + str + '.svg)'; //button.setAttribute('onclick', // 'checkForMiddleClick(this, event); if (event.button == 0) event.target.ownerDocument.getElementById("' + str + '-button").click();'); button.addEventListener('click', event => { checkForMiddleClick(this, event); if (event.button == 0) { event.target.ownerDocument.getElementById("' + str + '-button").click(); } }); button.addEventListener('mousedown', event => { if (event.button == 0) { event.preventDefault(); } }); return button; } }); } createButton('forward'); })(); -
-
lenny2 Im Moment bin ich etwas ratlos. Probiere mal Folgendes. Teste mal diese Skriptversion:
JavaScript
Alles anzeigen// ==UserScript== // // @description Displays target URL in tooltip, when hovering over a link // Button has “tooltips on”/“tooltips off” positions // ==/UserScript== try {CustomizableUI.createWidget(({ label: "Links in pop-up tooltips", localized: false, id: "URLTooltip", pref: "URLTooltip.enabled", get state() { return Services.prefs.getBoolPref(this.pref, true); // по-умолчанию включено }, setIcon(btn, state = this.state) { btn.setAttribute("image", "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' style='fill:context-fill rgb(142, 142, 152);'><path d='M9.618 6.721a2.483 2.483 0 0 0-.39-.317l-.735.734A1.486 1.486 0 0 1 8.91 9.55l-2.12 2.122a1.486 1.486 0 0 1-2.122 0 1.486 1.486 0 0 1 0-2.121l.605-.605a3.53 3.53 0 0 1-.206-1.209L3.961 8.843a2.506 2.506 0 0 0 0 3.535 2.506 2.506 0 0 0 3.535 0l2.122-2.121a2.506 2.506 0 0 0 0-3.536z'/><path d='M6.79 9.55c.12.121.25.226.389.317l.734-.734a1.486 1.486 0 0 1-.417-2.411L9.618 4.6a1.486 1.486 0 0 1 2.121 0 1.486 1.486 0 0 1 0 2.121l-.605.605c.137.391.211.798.206 1.209l1.106-1.107a2.506 2.506 0 0 0 0-3.535 2.506 2.506 0 0 0-3.535 0L6.789 6.014a2.506 2.506 0 0 0 0 3.536z'/><circle style='fill:none;stroke:context-fill rgb(142, 142, 152);stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round' cx='8' cy='8' r='7.4'/></svg>"); btn.style.setProperty("fill", `${state ? "color-mix(in srgb, currentColor 20%, #e31b5d)" : ""}`); }, onCreated(btn) { this.setIcon(btn), this.btn = btn, btn.owner = this; //btn.setAttribute("oncommand", "owner.toggle()"); btn.addEventListener('command', () => { owner.toggle(); }); // btn.setAttribute("onmouseenter", "owner.mouseenter()"); btn.addEventListener('mouseenter', () => { owner.mouseenter(); }); }, mouseenter() { this.btn.tooltipText = this.label +' – '+ `${this.state ? "enabled" : "disabled"}`; }, 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.importESModule("resource://gre/modules/TooltipTextProvider.sys.mjs").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 = ChromeUtils.importESModule("resource:///modules/UrlbarInput.sys.mjs", {}).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), add = ""; return txt ? text.value = res ? text.value + "\n" + txt + add : txt + add : res; } }, psDestroy: proto => { proto.getNodeText = proto.getTextPlus.getNodeText; } }).init())} catch(ex) {Cu.reportError(ex);} -
Das Problem ist aber damit auch nicht gelöst.
Danke, aber da kann ich meine Skriptversion auch behalten. Das neue Skript von Aris weicht ziemlich stark von meiner Version ab. Bei Aris kommt jetzt z. B. die ID addonbar_v nur noch im neuen Zusatzcode vor. Irgendwie scheint mir, als wird hier auf etwas Bezug genommen, was es nicht mehr gibt.
-
Die jeweils letzte Version bekomme ich ja über das Mozilla Repo automatisch.
Mehr kann ich dir da leider nicht helfen. Ich nutze ja kein Linux.
-
-
Auf archive.mozilla.org ist das letzte von heute.
Directory Listing: /pub/firefox/nightly/latest-mozilla-central-l10n/linux-x86_64/deb-l10n/
-
Da sind noch Inline-Eventhandler wie onclick drin. Du verwendest Fx 136, ab dieser Version funktionieren diese nicht mehr.
-
Also ich hatte mir nur den Update-Code an meine Skriptversion drangehängt. Die beiden Symbole funktionierten immer noch nicht. Habe jetzt das aktuelle von Aris getestet, da erscheint gar nichts mehr, weder Leiste, noch Button, noch der Leisteneintrag im Anpassen-Fenster.
-
Ah, war noch an mir vorbei gegangen, dass es dafür jetzt eine Änderung im Skript für die vertikale Add-on-Leiste gibt.
Den zusätzlichen Update-Code, der das Problem angeblich beheben soll, durchschaue ich überhaupt nicht...
Wem sagst du das …
-
Könnte aber auch der Button von einem Übersetzungsskript sein.