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

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

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

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

    Sieht nicht einfach aus, da haste recht. ;)

    Sieht es nicht?

    Aus:

    JavaScript
    element.setAttribute('onEvent', 'function();');

    wird:

    JavaScript
    element.addEventListener('event', () => {
      function();
    });

    Das ist das ganze Prinzip, welches sich die ganze Zeit wiederholt. ;)

    Hab ich gesehen, aber wenn du dir hier Zeilen 282+, und 319+ anschaust, da hat Mia ein paar Dinge umgebastelt.

    z.B.:

    JavaScript
            if (item.command) {
            //  menuItem.setAttribute("oncommand", item.command);
              menuItem.addEventListener("command", function() {
                eval(item.command);
              });

    Ob oder wieso das so umgesetzt sein soll kann ich nicht einschätzen, das ist der komplizierte Teil für mich; vermutlich aus den Gründen die du gerade beschrieben hast, und halt wg. mangelden JS Kentnissen.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 14. Januar 2025 um 11:44
    Zitat von Mira_Belle

    Horstmann Vergleiche.

    Altes Skript!

    #208

    VS.

    Neues Skript!

    #248

    Und, ist es einfach?

    Alles anzeigen

    Sieht nicht einfach aus, da haste recht.;)
    Es war auch eher eine Frage.
    Danke für die übersichtliche alt/neu Darstellung, ist abgespeichert! :thumbup:

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

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

    Mir ist ehrlich gesagt nicht klar, ob ich deine Frage richtig verstehe. Aber ja, es geht in diesem Thema um genau diese Inline-Eventlistener, die mittels addEventListener-Aufrufe ersetzt werden.

    Meine Frage ist offensichtlich, ob die Lösung generell so einfach ist wie von dir beschrieben, und von mir vermutet.:/

    Und falls ja, warum dann hier jedes Script einzeln diskutiert wird, falls eine solche Lösung generell für betroffene Scripts angewendet werden kann.;)

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Horstmann
    • 13. Januar 2025 um 22:30
    Zitat von Sören Hentzschel

    Gleiches Prinzip:

    Vielleicht steh ich hier mal wieder auf dem Schlauch, aber ist es nicht sowas , oder ist das zu einfach gedacht?
    Also dem gewünschten Element weist man die gewünschte Funktion zu, via addEventListener?

    In letzter Zeit hab ich etwas an meiner Website rumgepfuscht, und addEventListener war ziemlich simpel in der Anwendung, eigentlich wie von Dir beschrieben.

  • Tabbreite dynamisch an Tabtext anpassen

    • Horstmann
    • 21. Dezember 2024 um 19:48
    Zitat von Arsen

    Kann man eigentlich den Close-Button innerhalb eines Tabs verschieben bzw. 1-2px nach rechts rücken?

    Ohne das komplett durchgetestet zu haben, evtl. so etwas, und den Pixel Wert dann halt anpassen nach gusto:

    CSS
    .tab-content {
      padding-right: 4px !important;
    }
  • Tabbreite dynamisch an Tabtext anpassen

    • Horstmann
    • 21. Dezember 2024 um 17:55
    Zitat von Arsen

    Ah ja, so kann man das hauchfein einstellen. :thumbup:

    Kann man tatsächlich nicht, das ist nur CSS um den Fx-eigenen Code für das Close-Button Verhalten auszuhebeln, der Wert ist nicht variabel ohne Probleme zu erzeugen.

    Es sind momentan immer noch 6px, und es ist momentan immer noch in Stein gemeisselt.;)

Unterstütze uns!

Jährlich (2025)

92,9 %

92,9% (604,17 von 650 EUR)

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