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. Horstmann

Beiträge von Horstmann

  • Ein Icon ins base64 Format umwandeln

    • Horstmann
    • 26. Januar 2025 um 11:43
    Zitat von milupo
    Zitat von Sören Hentzschel

    Allerdings ist das in meinen Augen ein schwaches Argument, wenn der Preis dafür eine erhöhte CPU-Last ist. Das wiegt für mich deutlich schwerer als etwas Bequemlichkeit.

    Was den ersten Satz angeht, bin ich durchaus deiner Meinung. Es ging mir aber nicht um Bequemlichkeit, sondern um es für alle Nutzer zu vereinfachen, dass Skript sofort verwenden zu können und bei der Diskussion über ein Skript eine für alle sofort verfügbar Schaltfläche zu haben. Aber nun ja, war nur so ein Gedanke.

    Das ist ein guter Punkt, wobei man auch svg Grafiken in ein Script einbinden kann, ist ja auch nur Code.
    Ob sich das auch negativ auf die Performance auswirkt kann ich allerdings nicht sagen.:/

    Nachtrag: svg braucht wohl auch data URIs zur Einbindung ...

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Horstmann
    • 25. Januar 2025 um 22:31
    Zitat von 2002Andreas

    Nur mal so als Hinweis.

    Bitte für Fragen bei Problemen mit Skripten etc., einen eigenen neuen Thread erstellen, und nicht alles in diesem Sammelthread posten, danke.

    Und in diesen Thread kommt jetzt was - Diskussionen die nichts mit allen beliebigen Scripts zu tun haben, was der einzige Zweck ist? ;)

    Im Übrigen habe ich eine Menge top Info in diesem Altmonster gefunden über die Jahre - weil ich persönlich ja recherchiere.8)

    Da der Thread mit der ursprünglichen Diskussion zum Thema leider einer Art Putzwut zum Opfer gefallen und geschlossen ist, und das relativ lebhafte Userinteresse etwas abrupt unterbunden wurde, hier ein anderer Vorschlag:

    Was evtl. Sinn machen könnte - eine (evtl. gepinnte Thread) für aktuelle Änderungen in Firefox, mit allgemein gehaltenen Infos und/oder Links zu aktuell diskutierten Änderungen, sowohl hier als auch anderswo, und ohne in einzelne Scripts oder CSS Codes zu gehen.

    Z.B. => in Firefox 183, tabs wurde ersetzt durch Orang_Utan_Klaus, siehe Beitrag X hier und Beitrag Y da für nötige Änderungen, und jeder der dazu verwertbare Info findet bringt es dort ein.

  • Ein Icon ins base64 Format umwandeln

    • Horstmann
    • 25. Januar 2025 um 22:08
    Zitat von Boersenfeger

    Hätte jemand ein Icon im base64 Format oder auch anders eingebunden? Zum Beispiel den Schraubenschlüssel aus dem Anpassen-Fenster für die Browsertoolbox?

    In diesem Fall (mit diesem Script) könntest du mal das hier in der userChrome.css probieren:

    CSS
    #browser-konsole-button {
        list-style-image: url("chrome://global/skin/icons/developer.svg") !important; 
    }

    Das base64 Zeug würde ich selber vermeiden, für permanent sichtbare Buttons wg. eventueller Leistungseinbußen (?), und weil sie alle wie Gülle aussehen. ;)

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 25. Januar 2025 um 15:39
    Zitat von Speravir

    ..., funktioniert!

    Zu den IDs: Das halte ich für eine Schwäche vieler Skripte hier. Beispielsweise kommt die ID hier oben inzwischen viermal vor. da ist es wirklich besser, sie einer Variable zuzuweisen und diese dann wiederholt zu verwenden.

    Prima! :)

    Guter Punkt betr. der IDs, das macht Sinn, hab ich gleich mal übernommen.
    Der einzige Nachteil könnte sein, daß die Variable nicht direkt zu funktionieren scheint.

    Im Sinne von, und ausgehend davon:

    document.getElementById('Entwickler_ToolBarButton').addEventListener('click', event => {.... könnte man auch einfacher so schreiben: Entwickler_ToolBarButton.addEventListener('click', event => {......

    Man beachte dabei den Unterstrich in der ID, statt dem originalen Bindestrich, wegen JS Dingens (Fachbegriff).

    Aber buttonID.addEventListener('click', event => {..... scheint nicht zu funktionieren, auch wenn ich die Angabe in der Variable zu Entwickler_ToolBarButton (mit Unterstrich) ändere.:/

    Wobei ich mich auch frage weshalb ich das schreibe, eigentlich ist es wohl wumpe sich bei einem Button das document.getElementById sparen zu können, fand ich nur seltsam.

    Die Variable hilft aber auf jeden Fall, besonders auch bei komplexen Scripten; bei ID Namen könnte man sich auch überlegen keine Bindestriche o.ä. zu verwenden, zwecks potentieller Vereinfachung/Vielseitigkeit.
    Nicht daß ich Ahnung vom Thema hätte...;)

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 24. Januar 2025 um 21:44

    Sorry, war unangemessen....?(

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 24. Januar 2025 um 12:29
    Zitat von milupo

    Wenn du bessere Kenntnisse hast und dich berufener fühlst, dann bringe dich ein, bitte. Das ist besser, als hier nur Forderungen zu stellen. Wo warst du denn, als wir versucht haben, Nutzern beim Skript Firefox_ToolBarButtons.uc.js zu helfen?

    Ich und bessere Kenntnisse? Ha!:D

    Haste einen Link zu diesem Thema Firefox_ToolBarButtons, oder soll ich mich zurückquälen?
    War das ein extra wichtig und spannendes Problem, das alle User zur Teilnahme verpflichtet hat, oder sowas?

    Und die (bescheidenen) Beiträge von mir hier im Thread hast du alle gesehen, ob erfolgreich/hilfreich oder nicht?:/

    Wenn du mir erzählen willst nicht dass ich mich nicht einbringe, dann mach vorher wenigstens deine Recherche - Username klicken und Beiträge kucken. Wenn du das dann alles für nutzlosen Schrott hälst, dann ist das halt deine Meinung, genauso wie meine Meine ist.;)

    Zum Thema:
    Würde mich aber interessieren ob einer den Codevorschlag/Lösungsansatz von oben --> Link!!! ;) mal getestet hat.
    Für den Code von hier sehe ich keine universelle Verwendung, aber das mag an meine schwachen JS Skills liegen.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 24. Januar 2025 um 11:43
    Zitat von Mira_Belle

    ...
    Das Board hat hier für doch so viele Möglichkeiten!
    Es geht mir also nicht darum, dass beteiligte User wissen, worum es geht, sondern dass andere es auch nachvollziehen können.

    Aber jetzt ist es gut mit Kritik und Anmerkungen! Ich bitte der Übersichtlichkeit einfach mal die Möglichkeit des Zitats zu nutzen,
    wenn die Frage oder der Bezug zig Beiträge davor sich befindet.
    Und wenn betreffender Beitrag noch "älter" ist, schadet auch ein #XXX Link nicht.
    <3lichen Dank. :*

    Genau.

    Idealerweise wäre jeder Lösungsbeitrag ein in sich schlüssiger Lösungsansatz für das Grundproblem, quasi nach Kant, inkl. Querverweisen.

    Das zu verlangen wäre etwas übertrieben, aber m.A.n. ist liegt Hauptwert eines Lösungsbeitrags in der Nachhaltigkeit bzw. generellen Anwendbarkeit.
    Einem einzelnen User zu helfen ist zwar nett, aber einen etwas weiterreichenden Lösungsansatz und Links/Infos bereitzustellen ist noch wertvoller; während der Diskussion und v.a. auch für's Archiv bzw die Suche.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 24. Januar 2025 um 09:48
    Zitat von Speravir
    Zitat von mkpcxxl

    Der Fehler ist, dass wenn ich den Button im zweiten Fenster drücke die Seite about:config in einem neuen Tab im ersten Fenster geöffnet wird.

    Dasselbe Verhalten ist mir auch bei dem Skript für die Entwicklerwerkzeuge aufgefallen. Mit der Version mit Inline-Handlern ging es aber. Ich nutze im Prinzip Entwicklerwerkzeuge-button.uc.js · Endor8/userChrome.js, auch wenn ich die ID, den Label- und Tooltiptext sowie den CSS-Code in eine Variable gesetzt habe.

    Ich habe mal ein paar Skripts verglichen, und das hier scheint momentan zu funktionieren; ich hoffe die Anmerkungen im Script machen das Prinzip klar.

    Generell hänge ich einfach den addEventlistener unten an, mit der ID des Buttons, und ausserhalb des oberen Codeabschnitts (...?).

    JavaScript
    //  aboutconfig-button.uc.js Test #3
    
      (function() {
       if (location != 'chrome://browser/content/browser.xhtml') return;
        try {
            CustomizableUI.createWidget({
                id: 'aboutconfig_button',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                onBuild: function(aDocument) {
                let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
                let buttonicon = "LettersC-1.png"
                let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                    var props = {
                        id: 'aboutconfig_button',
                        class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                        label: 'About:Config',
                        tooltiptext: 'About:Config',
                        style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");'
    
                        // alte Version
                        //onclick: 'if (event.button == 0) { \
                        //                   openTrustedLinkIn("about:config", "tab");\
                        //          }; '
                    };
                    for (var p in props)
                        toolbaritem.setAttribute(p, props[p]);
    
                      // Fix #1
                      //  toolbaritem.addEventListener('click', event => {
                      //  if (event.button == 0) {
                      //     openTrustedLinkIn("about:config", "tab");
                      //}
                      //});
    
                    return toolbaritem;
                }
            });
        } catch(e) { };
    
        // Fix #2
        document.getElementById('aboutconfig_button').addEventListener('click', event => {
        if (event.button == 0) {
             openTrustedLinkIn("about:config", "tab");
            }
        });
    
    })();
    Alles anzeigen


    Für das von dir verlinkte Script dann evtl: sowas -->

    JavaScript
      //  Entwicklerwerkzeuge-button.uc.js test
    
    (function() {
    
    	if (location != 'chrome://browser/content/browser.xhtml') return;
    
    	try {
    		CustomizableUI.createWidget({
    			id: 'Entwickler-ToolBarButton',
    			type: 'custom',
    			defaultArea: CustomizableUI.AREA_NAVBAR,
    			onBuild: function(aDocument) {
    				var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
    				var props = {
    					id: 'Entwickler-ToolBarButton',
    					class: 'toolbarbutton-1 chromeclass-toolbar-additional',
    					label: 'Entwicklerwerkzeuge',
    					tooltiptext: 'Entwickler Werkzeuge öffnen',
    					style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAqJJREFUeNp0k11IU2EYx593Q0RDL1wOmheihBCoiNHFrIYgYSBDKoRMIWgwduGFjTiIdRHiQIw+iBAS6qKUrJsVlRGsC2vWRUFzEclmxMZKXWzObe377PR/cLOB64Xfzt7zPv/f+8URAwMDVNoUReGHGeRAGITy+bwfbIB0JpMhWZZ369X19fXGqqqqbgR1wJPNZrngK9jAf11bW9vRlpaWE5FI5EAikVBDEkJdblfg8/m6nU7nXeDa3NxcTiaTVFlZyQVRCHyBQEBjsVguGI3G0zU1NQ0ej0eg5gcmyEBGahTq7Ha7a3JycsjtdtcGg8FliIgH0+l0DmRTqZS2tbX1mE6nO9TU1LTf4XAEcrmcF5AKguder3d6eHh4HjMNYUsSD/j9ftre3qZoNPoLYj+vDHJqbGzUx+NxLY9xX1Xcy9ra2rTJZJofGRkZ0mq1Eh/U+vo6bW1txVQqlZb7fIDYVkUsFmPaIac9rbm5WcKWVjo6OqTjtbX7Ojs7pcXFxRW9Xn+dbweysaWlJZ9GozHX1dX1ULmGfUoLkvTWWV3tdptMQe6XDLezJBwOK4XrLttO3Sf6o0xNKfaKisCMEIdXhSALKLQeluB5sFz4PHDNdnUpqJBD/f0RhJ99E+KSC4KZf5Ky7Qr4YjAYeHnJk0QTL4k+xc1mBeEXn4WQPkBw8z8SPqTVvr4+DqeA9Sx+nhLZ7JAkR0cVhF+9F2LsDQRPMHamJHwLfB8cHORwBtzmlyxAmIttjyHJjI8rCDscQlxmwXwhfAf4zVhm4QOaK1qLAoTpISQPIJEnJhSE3y0QXS0KflutVg7LJdI9AoQJN2O7BwnfzizRR0B8GhfBDfAInCuGr/Wq6UiDoMRPhWKvZUrjXXZniTbM1ivvbHvurwADAH3gYJeBXh2yAAAAAElFTkSuQmCC)',
    				};
    				for (var p in props)
    					toolbaritem.setAttribute(p, props[p]);
    					 // Fix #1, alt
    					//toolbaritem.addEventListener('click', event => {
    					//if (event.button == 0) {
                        //       document.getElementById('menu_devToolbox').click();
                        //      }
                        //});
    				return toolbaritem;
    			}
    		});
           } catch(e) { };
    
                 // Fix #2
    			 document.getElementById('Entwickler-ToolBarButton').addEventListener('click', event => {
    			 if (event.button == 0) {
                 document.getElementById('menu_devToolbox').click();
    			   }
    			 });
    
    	setTimeout(function() {
    		if (document.getElementById('menuWebDeveloperPopup').childElementCount <= 5) {
    			let { require } = ChromeUtils.importESModule("resource://devtools/shared/loader/Loader.sys.mjs", {});
    			require("devtools/client/framework/devtools-browser");
    		};
    	}, 0);
    
    })();
    Alles anzeigen
  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 23. Januar 2025 um 22:25
    Zitat von 2002Andreas
    Zitat von Horstmann

    Zeile 126 von was denn?

    Von dem Skript, welches mkpcxxl angesprochen hatte.

    Und er wusste sofort was gemeint war, und andere auch.

    Du kannst das aber gerne ganz genau alles beschreiben, wäre auch eine Unterstützung.

    Ich kann nicht ganz genau alles beschreiben was du ausgelassen hast, weil es eben von dir ausgelassen war.;)

    Meine Unterstützung: gleiches Thema, hier tatsächlich mal mit Link, nicht irgendwo mal in irgendeinem nicht erwähnten Skript gesehen.:*
    Umsetzung dazu für die meisten der obigen Skripts ist mir unklar, weil dort eine separat definierte bzw. benannte Funktion vorrausgesetzt wird.

    Deine Methode funktioniert übrigens, also dankeschön dafür :); sieht aber etwas gewalttätig aus.

    Die Problematik mit Skripts, die nach manchen von Sören Hentzschel 's Methode(n) geändert sind, und nur im ersten geöffneten Browserfenster funktionieren (s. auch Link oben), sehe ich bei den meisten meiner danach adaptierten JS Skripts.

    Ergo, von meiner Seite fange ich nochmal von vorne an, das Schema F funktioniert mir nur zu eingeschränkt.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 23. Januar 2025 um 20:41
    Zitat von 2002Andreas
    Zitat von mkpcxxl

    dass about:config in dem Fenster geöffnet wird in dem ich gerade bin.

    Teste bitte:

    Zeile 126:

    Statt:

    openTrustedLinkIn("about:config", "tab");

    Neu:

    event.target.ownerGlobal.openTrustedLinkIn("about:config", "tab");

    Alles anzeigen

    Zeile 126 von was denn?:/
    Das Dingens vielleicht?
    Und ich habe gesucht, ....

    Leute, ein Chat Stil ohne klare Referenzen und mit Codeschnipseln ohne Zusammenhang, und hier noch nicht mal der ganzen Codezeile erwähnt, damit wird das wieder nur ein verzettelter Monsterthread von dem Keiner viel lernen kann.X/

    Bei der Zeit und dem Aufwand den wir hier für Lösungen investieren, sollte die Minute extra für einen nachvollziehbar formulierten Beitrag mit relevanten Links wohl noch machbar sein.;)

  • Seit heute Profile in der Menü-Leiste

    • Horstmann
    • 19. Januar 2025 um 13:49
    Zitat von Boersenfeger
    Zitat von Horstmann

    Browserwerkzeuge

    Tja, damit tue ich mich tatsächlich schwer, aber ich versuche mich reinzufrickeln. Nightly verwende ich schon sehr lange. Danke für deine aufbauenden Worte! 8o

    Nur die ersten paar Schritte sind fummelig, wenn man mal angefangen hat ist es das Beste was man über Firefox Modifikationen je gelernt hat.:)

    Vor allem wenn man an der Nighly rumschraubt, was sich naturgemäss dauernd ändert, und nicht alles immer in der Release landet.

  • Seit heute Profile in der Menü-Leiste

    • Horstmann
    • 18. Januar 2025 um 19:34
    Zitat von 2002Andreas
    Zitat von Boersenfeger

    ich hatte analog zu Chronik

    Mit den Browser-Werkzeugen hättest du das in 5 Sekunden gefunden;)

    Aber es würde ja wohl kaum jemand Nightly benutzen - und sogar diskutieren wollen - der nicht mal die Browserwerkzeuge verwenden kann?:/;)

  • Altes Add-on wiederbeleben: bookmarks_title_styles-1.4.0-fx.xpi

    • Horstmann
    • 17. Januar 2025 um 22:01
    Zitat von .DeJaVu

    Damit komme ich leider auch nicht an die einzelnen Ordner hier. "treechildren" wie oben, Ende.

    Genau, Ende.
    Nix, nada, geht nicht;).

    Quasi, weil etwas weiter runter geht schon, aber nicht bis zu spezifischen Einträgen wie Ordner oder sogar einzelnen Lesezeichen.


    Zitat von .DeJaVu

    Für die Lesezeichenleiste (siehe oben). Ordner+Text rot.

    Das ist aber kein tree.

  • Altes Add-on wiederbeleben: bookmarks_title_styles-1.4.0-fx.xpi

    • Horstmann
    • 17. Januar 2025 um 20:37
    Zitat von .DeJaVu

    Ich hab wie immer kein Plan, wie ich an dessen Daten komme, oder in der Bibliothek, bei mir ist mit treeview Ende. Ich wusste es mal, aber da ich dort nie für mich bin - verdrängt/vergessen. Hast du nen Tipp für mich?

    Du kannst dir in der Browser Toolbox via Icon oben rechts die Sidebar aussuchen, s.Bild, und dich dort dann durchhangeln.

    Ist aber immer ein Gehampel, trees sind so ein Ärgernis....

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 17. Januar 2025 um 10:52
    Zitat von Speravir

    Endor & Horstmann:

    In meiner vorigen Antwort war mir nicht genau bewusst, womit ihr Probleme habt. Das ist mir erst später klar geworden. Nehmen wir das Beispiel Browsertools-Button, ich beziehe mich auf die am 7. Juni 2023 gepostete Version (als browsertoolbox.uc.js):

    Vielen Dank für die ausführliche Erklärung!:thumbup:

    Mich hat diese Zeile verwirrt : oncommand: '(' + onCommand.toString() + ')()' , wusste einfach nicht wie ich das alternativ einbinden sollte, v.a. mit der irreführenden Verwendung von onCommand als Funktionsname.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 16. Januar 2025 um 22:27
    Zitat von Endor

    Nö, zu dritt.;)

    Denn sonst würde meine Version funktionieren.
    Wer mag sich das mal anschauen:

    Code
    // ==UserScript==
    // @name           externalApplications.uc.js
    // @namespace      ithinc#mozine.cn
    // @description    External Applications
    // @include        main
    // @compatibility  Firefox 3.5.x 3.6.x 17.01
    // @author         ithinc
    // @Version        Fix by aborix
    // @Version        20190108.2.0.0 Frei verschiebbare Schaltflächen von aborix
    // @version        20091216.1.0.0 Final release
    // @version        20091215.0.0.2 Handle toolbar apps and menu apps separately
    // @version        20091212.0.0.1 Initial release
    // ==/UserScript==
    
    /* :::: External Applications :::: */
    
    var gExternalApplications = {
      toolbar: {
        apps: [
          {name: 'Photoshop', path: 'C:\\Program Files (x86)\\Adobe\\Adobe Photoshop CS2\\Photoshop.exe'},
    	  {name: 'Wetter', path: 'C:\\Users\\Paulmichl\\Wetter'},
          {name: 'Notepad++', path: 'C:\\Program Files\\Notepad++\\notepad++.exe'},
    	  {name: 'Microsoft Outlook', path: 'C:\\Program Files (x86)\\Microsoft Office\\OFFICE14\\Outlook.exe'},
    	  {name: 'Phoenix Hotel', path: 'C:\\Program Files (x86)\\PCS Phoenix\\Phoenix.exe'},
    	  {name: 'Videolan Player', path: 'C:\\Program Files\\VideoLAN\\VLC\\vlc.exe'},
    	  {name: 'Windows Explorer', path: 'C:\\Windows\\explorer.exe'},
    	  {name: 'WinMergeU', path: 'F:\\Adaten\\Downloads\\Freecomander\\WinMerge-2.14.0\\WinMerge-2.16.12-x64-exe\\WinMerge\\WinMergeU.exe'},
    	  {name: 'Filezilla', path: 'F:\\Adaten\\Downloads\\Filezilla\\FileZilla_3.10.3_win64\\FileZilla-3.56.2\\filezilla.exe'},
    	  {name: 'CarotDAV', path: 'F:\\Adaten\\Downloads\\Dropbox\\CarotDAV1.9.9.portable\\CarotDAV\\CarotDAV.exe'},	  
    	  {name: 'Pickpick', path: 'F:\\Adaten\\Downloads\\picpick\\picpick.exe'},
    	  {name: 'Profilmanager', path: 'F:\\Adaten\\Downloads\\Firefox\\Profile-Manager\\profilemanager.exe'},
    	  {name: 'Profile', path: 'C:\\Users\\Paulmichl\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles'},
    	  {name: 'FreeCommander', path: 'F:\\Adaten\\Downloads\\FreeComander\\FreeCommanderPortable\\FreeCommanderPortable.exe'},
    	  {name: 'TV Browser', path: 'F:\\Adaten\\Downloads\\TVBrowser\\tvbrowser_3.2.1_bin_transportable\\tvbrowser-transportable\\tvbrowser-transportable.exe'},
    	  {name: 'Radio Sure', path: 'F:\\Adaten\\Downloads\\Radio\\RadioSure.exe'},
       ]
      },
    // Menü für Firefox Extras - Externe Anwendungen
      menu: {
        apps: [
          {name: 'Notepad', path: 'C:\\WINDOWS\\system32\\notepad.exe'},
          {name: 'Rechner', path: 'C:\\WINDOWS\\system32\\calc.exe'},
          {name: 'DOS', path: 'C:\\WINDOWS\\system32\\cmd.exe'},
          {name: 'separator'},
          {name: 'UltraSearch', path: 'F:\\Adaten\\Downloads\\FreeComander\\UltraSearch\\UltraSearch.exe'},
          {name: 'CarotDAV', path: 'F:\\Adaten\\Downloads\\Dropbox\\CarotDAV1.9.9.portable\\CarotDAV\\CarotDAV.exe'},
          {name: 'Windows Explorer', path: 'c:\\windows\\explorer.exe'},/*x?????*/
          {name: 'Internet Explorer', path: 'C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE', args: ['%u']},
          {name: 'Firefox', path: 'F:\\Adaten\\Downloads\\Firefox'},
    	  {name: 'Videos', path: 'F:\\Video'},
    	  {name: 'Videos2', path: 'F:\\Adaten\\Müll'},
        ],
      id: 'ExternalApplicationsMenu',
        insertafter: 'menu_openAddons', // 'helpMenu', 'tools-menu' oder 'browserToolsSeparator'
        label: 'Externe Anwendungen',
        accesskey: 'A'
      },
    
      init: function() {
        this.handleRelativePath(this.toolbar.apps);
        this.handleRelativePath(this.menu.apps);
    
        this.createToolbarbuttons(this.toolbar.apps);
    
        if (this.menu.apps.length > 0) {
          var refNode = document.getElementById(this.menu.insertafter);
          if (refNode) {
            var menu = refNode.parentNode.insertBefore(document.createXULElement('menu'), refNode.nextSibling);
            menu.setAttribute('id', this.menu.id);
            menu.setAttribute('label', this.menu.label);
            menu.setAttribute('accesskey', this.menu.accesskey);
            menu.appendChild(this.createMenupopup(this.menu.apps));
          }
        }
      },
    
      handleRelativePath: function(apps) {
        for (var i=0; i<apps.length; i++) {
          var app = apps[i];
          if (app.path) {
            app.path = app.path.replace(/\//g, '\\');
    
            var ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get('CurProcD', Ci.nsIFile).path;
            if (/^(\.)/.test(app.path)) {
              app.path = ffdir + '\\' + app.path;
            }
            else if (/^(\\)/.test(app.path)) {
              app.path = ffdir.substr(0,2) + app.path;
            }
          }
        }
      },
    
      exec: function(path, args) {
        args = args || [];
        for (var i=0; i<args.length; i++) {
          args[i] = args[i].replace(/%u/g, gBrowser.currentURI.spec);
        }
    
        var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        file.initWithPath(path);
        if (!file.exists()) {
          Cu.reportError('File Not Found: ' + path);
          return;
        }
    
        if (!file.isExecutable()) {
          file.launch();
        }
        else {
          var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
          process.init(file);
          process.run(false, args, args.length);
        }
      },
    
      createToolbarbuttons: function(apps) {
        for (var i=0; i<apps.length; i++) {
          var app = apps[i];
          if (app.name != 'separator') {
            createButton(app);
          }
        };
        function createButton(app) {
          var buttonId = app.name.replace(/ /g, '_').replace(/\+/g, 'Plus') + '-ExtApp-button';
          try {
            CustomizableUI.createWidget({
              id: buttonId,
              type: 'custom',
              defaultArea: CustomizableUI.AREA_NAVBAR,
              onBuild: function(aDocument) {
                var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                var attributes = {
                  id: buttonId,
                  class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                  label: app.name,
                  tooltiptext: app.name,
                  image: 'moz-icon:file:///' + app.path + '?size=16',
                  //oncommand: 'gExternalApplications.exec(this.path, this.args);',
    
                };
                for (var a in attributes) {
                  toolbaritem.setAttribute(a, attributes[a]);
    			  toolbaritem.addEventListener('click', event => {
    					if (event.button == 0) { 
                                gExternalApplications.exec(this.path, this.args).click();	  
                }
    		    });	
                toolbaritem.path = app.path;
                toolbaritem.args = app.args;
                return toolbaritem;
    			}
    		  }
            });
          } catch(e) {};
        }
      },
      createMenupopup: function(apps) {
        var menupopup = document.createXULElement('menupopup');
        for (var i=0; i<apps.length; i++) {
          var app = apps[i];
          if (app.name == 'separator') {
            menupopup.appendChild(document.createXULElement('menuseparator'));
          }
          else {
            var item = menupopup.appendChild(document.createXULElement('menuitem'));
            item.setAttribute('class', 'menuitem-iconic');
            item.setAttribute('label', app.name);
            item.setAttribute('image', 'moz-icon:file://' + app.path + '?size=16');
            item.addEventListener ('command', function (event) {
    	    if (event.button == 0) {
    		   gExternalApplications.exec(this.path, this.args);
    	    }
    		});
            item.path = app.path;
            item.args = app.args;
    		return menupopup;
    		}
    	}
      };
    };
    gExternalApplications.init();
    Alles anzeigen

    Mfg.
    Endor

    Mitglied #4 hier: in Zeile 146, grob geraten, wüsste nicht wie ich das testen kann: bei gExternalApplications.exec(this.path, this.args).click(); zu gExternalApplications.exec(this.path, this.args); , also .click() rauswerfen.

    Ansonsten für den Bereich auch nochmal bei Sören's Vorschlägen schauen, die dritte Umsetzung.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 16. Januar 2025 um 17:19
    Zitat von Endor

    Hallo Horstmann .


    Script funktioniert wieder einwandfrei.

    Blindes Huhn ==> Korn.... ;)

    Prima daß es klappt!:)

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 16. Januar 2025 um 15:03
    Zitat von Endor

    Hallo Horstmann .
    Leider nein.

    Mfg.
    Endor

    Also, ich hab mal weitergebastelt, und das hier funktioniert bei mir; ob sowas für dein Script anwendbar ist musst du mal testen.
    Im Prinzip ist das einfach die unten im Script definierte Funktion namens onCommand() in die erwähnte Formel für addEventListener gepackt.

    Übrigens habe ich bei mir onCommand mit Otto ausgetauscht; onCommand zu benutzen scheint mir sehr verwirrend zu sein in dem Zusammenhang, und ist auch in der alten Version nicht nötig als Variable mit dem Namen. :/

    JavaScript
    //    Button für Browserwerkzeuge
    //    browsertoolbox.uc.js von Endor von hier:
    //    https://www.camp-firefox.de/forum/thema/129954-symbole-zu-kontextmen%C3%BCs-mit-javascript-und-css-hinzuf%C3%BCgen/?postID=1138524#post1138524
    //
    //  200214:    Einbau
    //    200215: berechneter Path mit "werkzeuge.png"
    
    (function() {
    
        if (location != 'chrome://browser/content/browser.xhtml')
            return;
    
        try {
            CustomizableUI.createWidget({
                id: 'browser-console-button',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                onBuild: function(aDocument) {
                    var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
                    var buttonicon = "LettersK-1.png"
                    var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                    var props = {
                        id: 'browser-console-button',
                        class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                        label: 'Browser Konsole',
                        tooltiptext: 'Browser-Konsole',
                        style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
    
                        //oncommand: '(' + onCommand.toString() + ')()'
                    };
                    for (var p in props)
                        toolbaritem.setAttribute(p, props[p]);
    
                        // neu dazu
                        toolbaritem.addEventListener('click', event => {
                        if (event.button == 0) {
                             onCommand()
                       }
                    });
                         // neu dazu Ende
    
                    return toolbaritem;
                }
            });
            CustomizableUI.registerToolbarNode(tb);
           } catch(e) { };
    
        function onCommand() {
            var document = event.target.ownerDocument;
            if (!document.getElementById('menu_browserConsole')) {
                //let { require } = Cu.import("resource://devtools/shared/loader/Loader.jsm", {});
                let { require } = ChromeUtils.importESModule("resource://devtools/shared/loader/Loader.sys.mjs", {});
                require("devtools/client/framework/devtools-browser");
            };
            document.getElementById('menu_browserConsole').click();
        };
    
    })();
    Alles anzeigen

    Nachtrag, für dieses Script brauchts das angehängte Icon im chrome/icons Ordner.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 16. Januar 2025 um 10:47
    Zitat von Endor

    Andere Frage:
    In einem Script habe ich dies:

    Code
    oncommand: '(' + onCommand.toString() + ')()'

    Habe es nach so geändert:

    Code
    toolbaritem.addEventListener('click', event => {
    					if (event.button == 0) { 
                                (' + onCommand.toString() + ')();
                                     }

    Funktioniert aber nicht.
    Mfg.
    Endor

    Gibt's denn dafür schon eine Lösung?

    Ich habe alle Beiträge dazu gelesen, aber ihr schreibt da ziemlich wild durcheinander.;)

    Hier ist ein altes Script von Dir, das ich umgemodelt habe um die Konsole per Button aufzurufen, mit der strittigen oncommand Zeile:

    JavaScript
    //    Button für Browserwerkzeuge
    //    browsertoolbox.uc.js von Endor von hier:
    //    https://www.camp-firefox.de/forum/thema/129954-symbole-zu-kontextmen%C3%BCs-mit-javascript-und-css-hinzuf%C3%BCgen/?postID=1138524#post1138524
    //   
    //  200214:    Einbau
    //    200215: berechneter Path mit "werkzeuge.png"
    
    (function() {
    
        if (location != 'chrome://browser/content/browser.xhtml')
            return;
    
        try {
            CustomizableUI.createWidget({
                id: 'browser-console-button',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                onBuild: function(aDocument) {
                    var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
                    var buttonicon = "LettersK-1.png"
                    var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                    var props = {
                        id: 'browser-console-button',
                        class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                        label: 'Browser Konsole',
                        tooltiptext: 'Browser-Konsole',
                        style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
    
                        oncommand: '(' + onCommand.toString() + ')()'
                    };
                    for (var p in props)
                        toolbaritem.setAttribute(p, props[p]);
                    return toolbaritem;
                }
            });
            CustomizableUI.registerToolbarNode(tb);
           } catch(e) { };  
    
        function onCommand() {
            var document = event.target.ownerDocument;
            if (!document.getElementById('menu_browserConsole')) {
                //let { require } = Cu.import("resource://devtools/shared/loader/Loader.jsm", {});
                let { require } = ChromeUtils.importESModule("resource://devtools/shared/loader/Loader.sys.mjs", {});
                require("devtools/client/framework/devtools-browser");
            };
            document.getElementById('menu_browserConsole').click();
        };
    
    })();
    Alles anzeigen
  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 14. Januar 2025 um 14:31
    Zitat von Sören Hentzschel

    Das item.command ist quasi eine Variable, die das auszuführende Script beinhaltet. ......

    Aha, herzlichen Dank für die Erklärung! :) :thumbup:

    Das sind so die kleinen Stolpersteine, die einem als Amateur eine Menge Zeit kosten können.

Unterstütze uns!

Jährlich (2025)

101,9 %

101,9% (662,48 von 650 EUR)

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