1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. milupo

Beiträge von milupo

  • Script oder Erweiterung um bestimmte Links mit Rechtsklick in einem anderen Browser öffnen.

    • milupo
    • 1. Februar 2025 um 23:45
    Zitat von omar1979

    Also mir wurde das gesagt von einem der Forum-Mitarbeiter " Einige Plugins, die Sie auf Firefox installieren, können eingeschränkt sein, weil die vbulletin-Version alt ist. Bitte versuchen Sie es mit einem anderen Browser."

    Das liest sich etwas eigenartig. Ein Forumsmitarbeiter, ich nehme mal an, von diesem türkischen Forum, verweist darauf, dass die vBulletin-Version, also die Version der Forumssoftware, auf der das Forum läuft, veraltet ist. Dann würde ich erwarten, dass doch das Admin-Team dieses Forums endlich mal die Forumssoftware aktualisiert, statt auf einen anderen Browser zu verweisen.

    Hast du mal die URL von diesem türkischen Forum?


    Noch etwas. Welche „Plugins“ sollen das sein? Von vBulletin oder von Firefox? Oder sind eigentlich Erweiterungen gemeint und auch hier: von vBulletin oder Firefox? Doch alles etwas unklar.

  • Script oder Erweiterung um bestimmte Links mit Rechtsklick in einem anderen Browser öffnen.

    • milupo
    • 1. Februar 2025 um 22:51
    Zitat von omar1979

    man muss zusätzlich noch was installieren..

    Ich habe mir die Erweiterung auch mal installiert. In deren Einstellungen muss man alles erst einrichten. Ich kenne die Erweiterung nicht, aber offensichtlich muss man erst das Paket für die Skriptsprache Python installieren und dann das verlinkte Python-Skript für die Installation von Open With herunterladen. Angeblich werden dann wohl nach der Ausführung des Installationsskripts alle bereits installierten Browser von der Erweiterung erkannt. Für eine Erstinstallation der Erweiterung erscheint mir das doch etwas kompliziert, zumal auf der SUMO-Seite nichts davon steht. Im Gegenteil, es steht da, dass die Erweiterung nicht mehr weiterentwickelt wird.

    Es ist also aus meiner Sicht besser, das Skript zu nutzen. Das nutzen hier auch Andere und wenn mal etwas nicht mehr funktioniert, wird dann hier gemeinsam nach einer Lösung gesucht.

  • Script oder Erweiterung um bestimmte Links mit Rechtsklick in einem anderen Browser öffnen.

    • milupo
    • 1. Februar 2025 um 22:40
    Zitat von omar1979

    ich mach wohl irgendwas falsch..

    Was nutzt du denn hier? Skript oder Erweiterung?

  • Script oder Erweiterung um bestimmte Links mit Rechtsklick in einem anderen Browser öffnen.

    • milupo
    • 1. Februar 2025 um 22:03

    Hier auch von mir noch zwei Bildschirmfotos:

    Link öffnen:

    Seite öffnen:

  • Script oder Erweiterung um bestimmte Links mit Rechtsklick in einem anderen Browser öffnen.

    • milupo
    • 1. Februar 2025 um 21:41
    Zitat von omar1979

    Danke für die Erweiterung.

    Das gibt es auch als Benutzerskript. Es legt die Einträge Seite öffnen mit … bzw. Link öffnen mit… im Kontextmenü an, mit Untereinträgen für die Browser.

    JavaScript
    // ==UserScript==
    // @name			OpenWith
    // @description		Fügt dem Kontextmenü ein Menü hinzu, zum Öffnen der aktuelle Seite und eines ausgewählten Links in einem anderen Browser.
    // @description		und eines ausgewählten Links in einem anderen Browser.
    // @version			1.2.1a  63+
    // @author			y2k
    // @include			main
    // @charset			UTF-8
    // @namespace		http://tabunfirefox.web.fc2.com/
    // @note			Anwendungssymbol anzeigen
    // @note			als .uc.js Script umgeschrieben
    // ==/UserScript==
    (function() {
    "use strict";
    /*
    	Vor Verwendung, Pfad auf eigene Umgebung ändern(\ wird durch \\ ersetzt)
    	Zum Übergeben von Argumenten, wie folgt vorgehen:
    	C:\\Program Files\\Internet Explorer\\iexplore.exe<>$1 Argument Argument
    	※ $1 wird in URL umgewandelt
    */
    const BrowserPath = {
    "Firefox":    "D:\\Programme\\firefox-103.0a-hsb\\firefox.exe",	
    "Chrome":  "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
    "Edge":		  "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe",
    "Opera":	  "C:\\Program Files (x86)\\Opera\\Launcher.exe",	
    };
    
    const FlatMenu = false;
    
    const OpenWith = {
    	start: function() {
    		const cm = document.getElementById("contentAreaContextMenu");
    		cm.addEventListener("popupshowing", function(e) {
    			if (e.target == this) { OpenWith.onpopup(e); }
    		}, false);
    	},
    
    	createMenu: function() {
    		if (this.pageItem || this.linkItem) {
    			return;
    		}
    
    		const contextMenu = document.getElementById("contentAreaContextMenu");
    		const pageMenu = this.$C("menu", { id: "context-open-with-page", label: "Seite öffnen mit…" });
    		contextMenu.insertBefore(pageMenu, contextMenu.querySelector(":scope > #context-bookmarkpage, :scope > #context-savepage"));
    
    		const linkMenu = this.$C("menu", { id: "context-open-with-link", label: "Link öffnen mit…" });
    		contextMenu.insertBefore(linkMenu, contextMenu.querySelector(":scope > #context-sep-open"));
    
    		this.pageItem = this.createMenuItem(pageMenu, "openPage", FlatMenu? "Seite öffnen mit $1 ":"  Öffnen mit $1");
    		this.linkItem = this.createMenuItem(linkMenu, "openLink", FlatMenu? "Link öffnen mit $1 ":"  Öffnen mit $1");
    	},
    	
    	createMenuItem: function(menu, method, format) {
    		const frag = document.createDocumentFragment();
    		
    		let menuitem = [];
    		for (let i of Object.keys(BrowserPath)) {
    			const item = this.$C("menuitem", {
    				label:	format.replace("$1", i),
    				class:	"menuitem-iconic",
    				image:	"moz-icon:file:///" + BrowserPath[i].split("<>")[0] + "?size=16",
    				value:	JSON.stringify([ method, i ]),
    			});
    			item.addEventListener("command", this, false);
    
    			frag.appendChild(item);
    			menuitem[menuitem.length] = item;
    		}
    		
    		if (!FlatMenu) {
    			const menupopup = this.$C("menupopup");
    			menupopup.appendChild(frag);
    			menu.appendChild(menupopup);
    			menuitem = [ menu ];
    		}
    		else {
    			const parent = menu.parentNode;
    			parent.insertBefore(frag, menu);
    			parent.removeChild(menu);
    		}
    		
    		return menuitem;
    	},
    
    	$C: function(tag, attrs) {
    		const elem = document.createXULElement(tag);
    		if (attrs) {
    			for (let key of Object.keys(attrs))
    				elem.setAttribute(key, attrs[key]);
    		}
    		return elem;
    	},
    
    	onpopup: function(e) {
    		this.createMenu();
    		
    		const isHtml = /^(https?|file):/.test(gBrowser.currentURI.spec);
    		const pageItemHidden = !isHtml || gContextMenu.onLink || gContextMenu.onTextInput;
    		const linkItemHidden = !isHtml || !gContextMenu.onLink || gContextMenu.onTextInput;
    		
    		const pageItem = this.pageItem;
    		for (let i = 0, l = pageItem.length; i < l; i++) {
    			pageItem[i].hidden = pageItemHidden;
    		}
    		const linkItem = this.linkItem;
    		for (let i = 0, l = linkItem.length; i < l; i++) {
    			linkItem[i].hidden = linkItemHidden;
    		}
    	},
    
    	handleEvent: function(event) {
    		if (event.type === "command") {
    			const [ method, key ] = JSON.parse(event.originalTarget.getAttribute("value"));
    			const url = method === "openPage"? gBrowser.currentURI.spec: gContextMenu.linkURL;
    			this.launch(BrowserPath[key], url);
    		}
    	},
    	
    	launch: function(browserPath, openURL) {
    		let [ path, args ] = browserPath.split("<>");
    		if (args) {
    			args = args.split("^^").map(a => a.replace("$1", openURL));
    		} else {
    			args = [ openURL ];
    		}
    		
    		const file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
    		file.initWithPath(path);
    		
    		const process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
    		process.init(file);
    		process.run(false, args, args.length, {});
    	},
    };
    
    OpenWith.start();
    
    })();
    Alles anzeigen

    Zwischen den Zeilen 21 und 26 sind die Einträge mit den Pfaden zur EXE-Datei des jeweiligen Browsers. Passe die Pfade an deine Pfade an. Beachte dabei, dass Rückstriche immer doppelt sein müssen, insbesondere wenn du die Pfade einfach aus dem Windows-Explorer heraus kopierst. Windows verwendet einfache Rückstriche, die musst du dann verdoppeln, wie es oben zu sehen ist. Einfache Rückstriche sind in JavaScript nicht erlaubt.

  • userChromeShadow.css Code funktioniert nicht (mehr) in Nightly

    • milupo
    • 31. Januar 2025 um 18:45
    Zitat von Boersenfeger

    Ich hatte den Pfad aus dem TotalCommander kopiert. Da sind die / andersherum.

    Ich weiß jetzt nicht genau, wie es bei CSS ist, aber bei JavaScript kannst du auch Rückstriche verwenden, die müssen dann aber durch einen zweiten Rückstrich „maskiert“ werden. Also, am besten:

    Verzeichnis/Unterverzeichnis1/Unterverzeichnis 2

    aber es geht auch:

    Verzeichnis\\Unterverzeichnis1\\Unterverzeichnis2

  • userChromeShadow.css Code funktioniert nicht (mehr) in Nightly

    • milupo
    • 31. Januar 2025 um 18:05

    Hast du denn nun die die Rückstriche durch Schrägstriche im Pfad ausgetauscht?

  • addons_very_day_updatecheck.uc.js tut nicht mehr

    • milupo
    • 31. Januar 2025 um 17:39

    Ja, leider, ich weiß. Abr ich bin ziemlich sicher, dass moduleURI in esModuleURI geändert werden muss, bedingt durch die Umstellung von JSM auf ESM (.sys.mjs). Jetzt mit Fx 136 ist JSM ja vollständig weggefallen, siehe diesen Bugreport:

    1881888 - Remove support for JSMs
    RESOLVED (arai.unmht) in Core - XPConnect. Last updated 2025-01-23.
    bugzilla.mozilla.org

    Den Bugreport hat Sören erst vor kurzem in einem seiner Beiträge erwähnt.

    In Beitrag #6 hat Sören auf die automatische URL-Kodierung der geschweiften Klammern hingewiesen, die mit der Funktion decodeURI() wieder dekodiert werden müssen. Wenn ich in die Browserkonsole sehe, werden mir für Zeile 56 die dortigen geschweiften Klammern ebenfalls als kodiert angezeigt: %7B für die geöffnete Klammer und %7D für die geschlossene Klammer. Aber mit decodeURI konnte ich da noch nichts erreichen.

  • addons_very_day_updatecheck.uc.js tut nicht mehr

    • milupo
    • 31. Januar 2025 um 15:34
    Zitat von BarbaraZ-

    Mit der Änderung von Milupo aus Beitrag #12 sieht es so aus:

    Oh, ich habe vergessen dazu zu schreiben, dass die Änderungen, die ich genannt habe, auf Fx 136 Nightly bezogen, weil Andreas geschrieben hatte, dass das Skript im Nightly nicht mehr funktioniert, was ich bestätigen kann.

  • addons_very_day_updatecheck.uc.js tut nicht mehr

    • milupo
    • 30. Januar 2025 um 22:07

    Ach ja, ich erinnere mich. Danke.

  • addons_very_day_updatecheck.uc.js tut nicht mehr

    • milupo
    • 30. Januar 2025 um 21:51

    Ich habe noch zwei Ideen, das Skript scheint aber bei mir nicht zu funktionieren, wobei nicht weiß, was es tun soll, da ich das Skript sonst nicht nutze.

    Ich beziehe mich hier auf die Skriptversion in Beitrag #3:

    In Zeile 15 sollte moduleURI zu esModuleURI werden. Da bin ich mir ziemlich sicher.

    Und, wie von Horstmann schon geschrieben, in Zeile 56 ChromeUtils.import in ChromeUtils.importESModule ändern. Allerdings bin ich mir da nicht klar, weil mir kein Modul bekannt ist, das about-addons-verbose-ucjs oder ähnlich heißt. Es ist irgendeine andere Ressource.

  • Firefox v136.0a1 - Skript „saveTo“ funktioniert nicht mehr

    • milupo
    • 29. Januar 2025 um 16:00

    In dem verlinkten Skript kannst du Zeile 7 entfernen und ersetze Zeile 8 durch folgende Zeile:

    JavaScript
    const { FileUtils } = ChromeUtils.importESModule( 'resource://gre/modules/FileUtils.sys.mjs');
  • Firefox v136.0a1 - Skript „Tooltip with URL“ funktioniert nicht mehr

    • milupo
    • 28. Januar 2025 um 13:33

    Hallo Endor, oben in Beitrag #15 ist ein angepasstes Skript (.jsm nach sys.mjs) und Entfernung Inline-Eventhandler. Vielleicht willst du es auf deiner Seite aufnehmen.

  • Firefox v136.0a1 - Skript „copyURL“ funktioniert nicht mehr

    • milupo
    • 28. Januar 2025 um 13:30

    Hallo Endor,

    ich habe hier obiges Skript angepasst (.jsm nach .sys.mjs). Möchtest du es eventuell auf deiner Seite aufnehmen?

    JavaScript
    // copyURL.js
    // Button in the url-bar for “copy url-bar link”
    (async (url, pa = ChromeUtils.importESModule(url).PageActions) => pa.addAction(new pa.Action({
       title: "Copy link",
       tooltip: "Copy link",
       iconURL: "chrome://global/skin/icons/link.svg",
       id: "copyURL",
       pinnedToUrlbar: true,
       onCommand(e) {
           var MozXULElement = {insertFTLIfNeeded() {}};
           var document = {l10n: {setAttributes: msg => msg.textContent = "Copy to clipboard!"}};
           var show = eval(`(function ${e.view.ConfirmationHint.show})`);
           var helper = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
           (this.onCommand = e => {
               var win = e.view;
               var uri = win.gBrowser.selectedBrowser.currentURI;
               helper.copyString(win.gURLBar.makeURIReadable(uri).displaySpec);
               var anchor = win.BrowserPageActions.panelAnchorNodeForAction(this, e);
               show.call(win.ConfirmationHint, anchor, "", {event: e, hideArrow: true});
           })(e);
       }
    })))("resource:///modules/PageActions.sys.mjs");
    Alles anzeigen
  • Das Script Forward_Back_Button.uc.js funktioniert nicht mehr

    • milupo
    • 28. Januar 2025 um 12:13
    Zitat von pupil

    Jetzt habe auch ich es begriffen.

    Ich dachte, du weißt das, weil du das Skript schon verwendet hast. Ich verwende es nicht, daher war ich mir nicht ganz sicher, was das Skript wirklich machen soll.

  • Firefox v136.0a1 - Skript „copyURL“ funktioniert nicht mehr

    • milupo
    • 28. Januar 2025 um 11:55

    Ersetze mal Zeile 3 durch:

    JavaScript
    (async (url, pa = ChromeUtils.importESModule(url).PageActions) => pa.addAction(new pa.Action({

    und Zeile 22 durch:

    JavaScript
    })))("resource:///modules/PageActions.sys.mjs");
  • Das Script Forward_Back_Button.uc.js funktioniert nicht mehr

    • milupo
    • 27. Januar 2025 um 16:50
    Zitat von pupil

    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.

  • Firefox v136.0a1 - Skript „Tooltip with URL“ funktioniert nicht mehr

    • milupo
    • 27. Januar 2025 um 14:48

    lenny2 Ich glaube ich habe es hinbekommen. Sieh folgende Skriptversion:

    JavaScript
    // ==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);}
    Alles anzeigen

    In den Zeilen 20 und 23 musste nur owner.toggle() in this.toggle() und owner.mouseenter() in this.mouseenter() geändert werden.

  • Das Script Forward_Back_Button.uc.js funktioniert nicht mehr

    • milupo
    • 27. Januar 2025 um 00:07
    Zitat von Mira_Belle

    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.

  • Entwicklung Firefox

    • milupo
    • 26. Januar 2025 um 22:55
    Zitat von Sören Hentzschel

    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. :)

Unterstütze uns!

Jährlich (2026)

35,3 %

35,3% (273,24 von 775 EUR)

Jetzt spenden
  1. Kontakt
  2. Datenschutz
  3. Impressum
Community-Software: WoltLab Suite™
Mastodon