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

Beiträge von bege

  • addonbar.us.js funktioniert nicht mehr

    • bege
    • 26. Januar 2025 um 17:47

    Danke für eure Bemühungen. Wenn ihr mein oben verlinktes Github-Issue bei Aris anschaut und die folgenden Beiträge auf meinen zitierten Beitrag zu dem Problem hier in diesem Forum, wird klar, das im Fx 134 aus der Download-Button Funktion der Event-Handler entfernt wurde (oder so ähnlich, sorry für den Kauderwelsch eines Nur-Bastlers). Der soll durch den Zusatzcode ersetzt werden. Für Nutzer, die einen anderen Skript-Loader benutzen, scheint das zu funktionieren (siehe nochmal das Github-Issue, hier aber nicht.

  • addonbar.us.js funktioniert nicht mehr

    • bege
    • 25. Januar 2025 um 21:37
    Zitat von bege

    Mit Fx 133.0 funktioniert der Downloads-Button in der Addon-Bar von aris nicht mehr, das Popup-Fenster wird nicht angezeigt. In der normalen Leiste des Fx und im Überhangmenü funktioniert es. Kann das jemand bestätigen?

    JavaScript: addonbar.us.js
    // Add-on Bar script for Firefox 126+ by Aris
    //
    // no 'close' button
    // 'toggle' toolbar with 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS
    // no 'Add-on Bar' entry in toolbar context menu
    //
    // option: smaller buttons / reduced toolbar button height
    //
    // flexible spaces on add-on bar behave like on old Firefox versions
    
    // [!] Fix for WebExtensions with own windows by 黒仪大螃蟹 (for 1-N scripts)
    
    
    var appversion = parseInt(Services.appinfo.version);
    
    var compact_buttons = false; // reduced toolbar height and smaller buttons
    
    var AddAddonbar = {
      init: function() {
    
    	if (location != 'chrome://browser/content/browser.xhtml')
          return;
    	  
    	/* blank tab workaround */
    	try {
    	  if(gBrowser.selectedBrowser.getAttribute('blank')) gBrowser.selectedBrowser.removeAttribute('blank');
    	} catch(e) {}
    	
    	try {
    	  Services.prefs.getDefaultBranch('browser.addonbar.').setBoolPref('enabled',true);
    	} catch(e) {}
    
    	var addonbar_label = 'Add-on Bar';
    	var compact_buttons_code = '';
    	
    	if(compact_buttons)
    	  compact_buttons_code = `
    		#addonbar toolbarbutton .toolbarbutton-icon {
    		  padding: 0 !important;
    		  width: 16px !important;
    		  height: 16px !important;
    		}
    		#addonbar .toolbarbutton-badge-stack {
    		  padding: 0 !important;
    		  margin: 0 !important;
    		  width: 16px !important;
    		  min-width: 16px !important;
    		  height: 16px !important;
    		  min-height: 16px !important;
    		}
    		#addonbar toolbarbutton .toolbarbutton-badge {
    		  margin-top: 0px !important;
    		  font-size: 5pt !important;
    		  min-width: unset !important;
    		  min-height: unset !important;
    		  margin-inline-start: 0px !important;
    		  margin-inline-end: 0px !important;
    		}
    		#addonbar .toolbaritem-combined-buttons {
    		  margin-inline: 0px !important;
    		}
    		#addonbar toolbarbutton {
    		  padding: 0 !important;
    		}
    	  `;
    
    	// style sheet
    	Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).loadAndRegisterSheet(
    	  Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(`
    		  #addonbar toolbarpaletteitem[place=toolbar][id^=wrapper-customizableui-special-spring],
    		  #addonbar toolbarspring {
    			-moz-box-flex: 1 !important;
    			min-width: unset !important;
    			width: unset !important;
    			max-width: unset !important;
    		  }
    		  #main-window[customizing] #addonbar {
    			outline: 1px dashed !important;
    			outline-offset: -2px !important;
    		  }
    		  #addonbar {
    			border-top: 1px solid var(--sidebar-border-color,rgba(0,0,0,0.1)) !important;
    			background-color: var(--toolbar-bgcolor);
    			background-image: var(--toolbar-bgimage);
    			-moz-window-dragging: no-drag !important;
    		  }
    		  :root[lwtheme] #addonbar {
    			background: var(--lwt-accent-color) !important;
    		  }
    		  :root[lwtheme][lwtheme-image='true'] #addonbar {
    			background: var(--lwt-header-image) !important;
    			background-position: 0vw 50vh !important;
    		  }
    		  /* autohide add-on bar in fullscreen mode */
    		  /*#main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar {
    			visibility: visible !important;
    			display: block !important;
    			min-height: 1px !important;
    			height: 1px !important;
    			max-height: 1px !important;
    		  }
    		  #main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar:hover {
    			min-height: 24px !important;
    			height: 24px !important;
    			max-height: 24px !important;
    		  }*/
    		  #unified-extensions-button[hidden]{
    			visibility: visible !important;
    			display: flex !important;
    		  }
    		  `+compact_buttons_code+`
    	  `), null, null),
    	  Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).AGENT_SHEET
    	);
    
    	// toolbar
    	try {
    	  if(document.getElementById('addonbar') == null) {
    		var tb_addonbar = document.createXULElement('toolbar');
    		tb_addonbar.setAttribute('id','addonbar');
    		tb_addonbar.setAttribute('collapsed', 'false');
    		tb_addonbar.setAttribute('toolbarname', addonbar_label);
    		tb_addonbar.setAttribute('defaultset','spring,spring'); 
    		tb_addonbar.setAttribute('customizable','true');
    		tb_addonbar.setAttribute('mode','icons');
    		tb_addonbar.setAttribute('iconsize','small');
    		tb_addonbar.setAttribute('context','toolbar-context-menu');
    		tb_addonbar.setAttribute('lockiconsize','true');
    		tb_addonbar.setAttribute('class','toolbar-primary chromeclass-toolbar browser-toolbar customization-target');
    
    		document.getElementById('browser').parentNode.appendChild(tb_addonbar);
    		
    		CustomizableUI.registerArea('addonbar', {legacy: true});
    		
    		setTimeout(function(){
    		  CustomizableUI.registerArea('addonbar', {legacy: true});
    		},2000);
    	  
    		CustomizableUI.registerToolbarNode(tb_addonbar);
    		
    		// 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS to toggle add-on bar
    		var key = document.createXULElement('key');
    		key.id = 'key_toggleAddonBar';
    		key.setAttribute('key', '/');
    		key.setAttribute('modifiers', 'accel');
    		key.setAttribute('oncommand',`
    			var newAddonBar = document.getElementById('addonbar');
    			setToolbarVisibility(newAddonBar, newAddonBar.collapsed);
    			Services.prefs.getBranch('browser.addonbar.').setBoolPref('enabled',!newAddonBar.collapsed);
    		  `);
    		document.getElementById('mainKeyset').appendChild(key);
    		
    		
    		try {
    		  setToolbarVisibility(document.getElementById('addonbar'), Services.prefs.getBranch('browser.addonbar.').getBoolPref('enabled'));
    		} catch(e) {}
    	  
    	  }
    	} catch(e) {}
    
      }
    
    }
    
    /* initialization delay workaround */
    document.addEventListener('DOMContentLoaded', AddAddonbar.init(), false);
    /* Use the below code instead of the one above this line, if issues occur */
    /*
    setTimeout(function(){
      AddAddonbar.init();
    },2000);
    */
    Alles anzeigen

    Das Problem besteht weiter, obwohl es gerade ein Update für das Skript gab.

    Meine Meldung auf Github ist verwaist. Dort gibt es Lösungsvorschläge, die aber wohl nur mit einem anderen Skriptloader funktionieren. Weiß jemand eine Lösung mit "unserem" Skriptloader, also dem in Endors Github?

  • Links öffnen nicht in einen neuen Tab

    • bege
    • 8. Dezember 2024 um 14:13
    Zitat von Road-Runner
    Zitat

    Links aus der Adressleiste: ab Fx 60: about:config - browser.urlbar.openintab auf true setzen

    Links aus der Suchzeile: about:config - browser.search.openintab auf true setzen

    Links aus den Lesezeichen: about:config - browser.tabs.loadBookmarksInTabs auf true setzen

    Links zu anderen Seiten: Erweiterung Open Link with New Tab https://addons.mozilla.org/de/firefox/add…k-with-new-tab/

    Links im Vordergrund öffnen: about:config browser.tabs.loadBookmarksInBackground auf false setzen

    Aus meinem Notizen kopiert. Ob alle Werte noch so stimmen, weis ich nicht. Aber ein Versuch kann nicht schaden.

    Alles anzeigen

    Genau so steht's in meiner user.js und funktioniert.

    Code: user.js
    // Links öffnen
    user_pref("browser.search.openintab", true);
    user_pref("browser.urlbar.openintab", true);
    user_pref("browser.tabs.loadBookmarksInTabs", true);
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • bege
    • 28. November 2024 um 10:25
    Zitat von 2002Andreas
    Zitat von bege

    Kann das jemand bestätigen?

    Ist hier auch so.

    Klick auf den Button, und es passiert nichts.

    Dankeschön! Ich habe das bei Aris gemeldet.

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

    • bege
    • 27. November 2024 um 20:28

    Mit Fx 133.0 funktioniert der Downloads-Button in der Addon-Bar von aris nicht mehr, das Popup-Fenster wird nicht angezeigt. In der normalen Leiste des Fx und im Überhangmenü funktioniert es. Kann das jemand bestätigen?

    JavaScript: addonbar.us.js
    // Add-on Bar script for Firefox 126+ by Aris
    //
    // no 'close' button
    // 'toggle' toolbar with 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS
    // no 'Add-on Bar' entry in toolbar context menu
    //
    // option: smaller buttons / reduced toolbar button height
    //
    // flexible spaces on add-on bar behave like on old Firefox versions
    
    // [!] Fix for WebExtensions with own windows by 黒仪大螃蟹 (for 1-N scripts)
    
    
    var appversion = parseInt(Services.appinfo.version);
    
    var compact_buttons = false; // reduced toolbar height and smaller buttons
    
    var AddAddonbar = {
      init: function() {
    
    	if (location != 'chrome://browser/content/browser.xhtml')
          return;
    	  
    	/* blank tab workaround */
    	try {
    	  if(gBrowser.selectedBrowser.getAttribute('blank')) gBrowser.selectedBrowser.removeAttribute('blank');
    	} catch(e) {}
    	
    	try {
    	  Services.prefs.getDefaultBranch('browser.addonbar.').setBoolPref('enabled',true);
    	} catch(e) {}
    
    	var addonbar_label = 'Add-on Bar';
    	var compact_buttons_code = '';
    	
    	if(compact_buttons)
    	  compact_buttons_code = `
    		#addonbar toolbarbutton .toolbarbutton-icon {
    		  padding: 0 !important;
    		  width: 16px !important;
    		  height: 16px !important;
    		}
    		#addonbar .toolbarbutton-badge-stack {
    		  padding: 0 !important;
    		  margin: 0 !important;
    		  width: 16px !important;
    		  min-width: 16px !important;
    		  height: 16px !important;
    		  min-height: 16px !important;
    		}
    		#addonbar toolbarbutton .toolbarbutton-badge {
    		  margin-top: 0px !important;
    		  font-size: 5pt !important;
    		  min-width: unset !important;
    		  min-height: unset !important;
    		  margin-inline-start: 0px !important;
    		  margin-inline-end: 0px !important;
    		}
    		#addonbar .toolbaritem-combined-buttons {
    		  margin-inline: 0px !important;
    		}
    		#addonbar toolbarbutton {
    		  padding: 0 !important;
    		}
    	  `;
    
    	// style sheet
    	Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).loadAndRegisterSheet(
    	  Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(`
    		  #addonbar toolbarpaletteitem[place=toolbar][id^=wrapper-customizableui-special-spring],
    		  #addonbar toolbarspring {
    			-moz-box-flex: 1 !important;
    			min-width: unset !important;
    			width: unset !important;
    			max-width: unset !important;
    		  }
    		  #main-window[customizing] #addonbar {
    			outline: 1px dashed !important;
    			outline-offset: -2px !important;
    		  }
    		  #addonbar {
    			border-top: 1px solid var(--sidebar-border-color,rgba(0,0,0,0.1)) !important;
    			background-color: var(--toolbar-bgcolor);
    			background-image: var(--toolbar-bgimage);
    			-moz-window-dragging: no-drag !important;
    		  }
    		  :root[lwtheme] #addonbar {
    			background: var(--lwt-accent-color) !important;
    		  }
    		  :root[lwtheme][lwtheme-image='true'] #addonbar {
    			background: var(--lwt-header-image) !important;
    			background-position: 0vw 50vh !important;
    		  }
    		  /* autohide add-on bar in fullscreen mode */
    		  /*#main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar {
    			visibility: visible !important;
    			display: block !important;
    			min-height: 1px !important;
    			height: 1px !important;
    			max-height: 1px !important;
    		  }
    		  #main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar:hover {
    			min-height: 24px !important;
    			height: 24px !important;
    			max-height: 24px !important;
    		  }*/
    		  #unified-extensions-button[hidden]{
    			visibility: visible !important;
    			display: flex !important;
    		  }
    		  `+compact_buttons_code+`
    	  `), null, null),
    	  Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).AGENT_SHEET
    	);
    
    	// toolbar
    	try {
    	  if(document.getElementById('addonbar') == null) {
    		var tb_addonbar = document.createXULElement('toolbar');
    		tb_addonbar.setAttribute('id','addonbar');
    		tb_addonbar.setAttribute('collapsed', 'false');
    		tb_addonbar.setAttribute('toolbarname', addonbar_label);
    		tb_addonbar.setAttribute('defaultset','spring,spring'); 
    		tb_addonbar.setAttribute('customizable','true');
    		tb_addonbar.setAttribute('mode','icons');
    		tb_addonbar.setAttribute('iconsize','small');
    		tb_addonbar.setAttribute('context','toolbar-context-menu');
    		tb_addonbar.setAttribute('lockiconsize','true');
    		tb_addonbar.setAttribute('class','toolbar-primary chromeclass-toolbar browser-toolbar customization-target');
    
    		document.getElementById('browser').parentNode.appendChild(tb_addonbar);
    		
    		CustomizableUI.registerArea('addonbar', {legacy: true});
    		
    		setTimeout(function(){
    		  CustomizableUI.registerArea('addonbar', {legacy: true});
    		},2000);
    	  
    		CustomizableUI.registerToolbarNode(tb_addonbar);
    		
    		// 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS to toggle add-on bar
    		var key = document.createXULElement('key');
    		key.id = 'key_toggleAddonBar';
    		key.setAttribute('key', '/');
    		key.setAttribute('modifiers', 'accel');
    		key.setAttribute('oncommand',`
    			var newAddonBar = document.getElementById('addonbar');
    			setToolbarVisibility(newAddonBar, newAddonBar.collapsed);
    			Services.prefs.getBranch('browser.addonbar.').setBoolPref('enabled',!newAddonBar.collapsed);
    		  `);
    		document.getElementById('mainKeyset').appendChild(key);
    		
    		
    		try {
    		  setToolbarVisibility(document.getElementById('addonbar'), Services.prefs.getBranch('browser.addonbar.').getBoolPref('enabled'));
    		} catch(e) {}
    	  
    	  }
    	} catch(e) {}
    
      }
    
    }
    
    /* initialization delay workaround */
    document.addEventListener('DOMContentLoaded', AddAddonbar.init(), false);
    /* Use the below code instead of the one above this line, if issues occur */
    /*
    setTimeout(function(){
      AddAddonbar.init();
    },2000);
    */
    Alles anzeigen
  • Eine einzelne Website aus Ihrer Chronik per JavaScript automatisch löschen!

    • bege
    • 19. Oktober 2024 um 20:58
    Zitat von .DeJaVu

    bis auf Cookies nichts bewirkt, und dafür habe ich schon was anderes.

    OT: Was nutzt du?


    Zitat von .DeJaVu

    diese Erweiterung steinalt ist weil re-signed, da wurde in den letzten 5 Jahren nichts dran verändert.

    Ich nutze das hier, ist "erst" 4 Jahre alt.

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • bege
    • 25. September 2024 um 01:08
    Zitat von Mira_Belle

    Wärst Du so lieb und würdest noch einmal testen?

    Hast du es selber getestet? Jetzt wird im Hilfemenü alles drei mal geöffnet.

    Du hast jetzt wohl eine Kombination aus den zwei Versionen des AppMenu_edit gemacht, damit die beiden Menüs vollständig sind. Damit werden die Menüs aus Skripten nicht automatisch mit verschoben. Das Menü von extra-config-menu ist ganz verschwunden. Die Firefox-Menüs werden jetzt nicht kopiert, sondern verschoben. Bis auf die Menüs aus Skripten ist die Menüleiste leer und die Alt-Taste zum anzeigen der Menüleiste funktioniert nicht mehr.

    Mir ist das zu umständlich. In meiner Version funktioniert alles, was ich brauche. Wenn Jizz (wer ist das?) bereit ist, die Fehler zu überarbeiten, bin ich gern bereit, nochmal zu testen. Für uns "Bastler" scheint mir das zu kompliziert.

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • bege
    • 24. September 2024 um 18:52

    Meine Version sieht so aus, davon gibt es aber noch andere Versionen in diesem Forum. Bei Endor wird es sicher auch eine Version geben.

    JavaScript
    // ==UserScript==
    // @name           extras_config_menu.uc.js
    // @compatibility  Firefox ab 92
    // @include        main
    // @version........1.0.20180914 Aktualisierung von aborix für Firefox 62+
    // @version        1.0.20190504 überarbeitet von bege
    // ==/UserScript==
    
    var uProfMenu = {
      // Beginn der Konfiguration -----------------
      // In der folgenden Zeile den Pfad zum Texteditor eintragen (unter Ubuntu 10.04 z.B.: '/usr/bin/gedit'). Bei Fehleintrag wird view_source.editor.path ausgelesen:
      TextOpenExe: 'C:\\Program Files\\Notepad++\\notepad++.exe',
      // Falls gewuenscht, in der Zeile nach den Beispielen einen Dateimanager eintragen (komplett leer lassen fuer Dateimanager des Systems) Beispiele:
      // vFileManager: 'E:\\Total Commander\\Totalcmd.exe',
      // vFileManager: 'C:\\Program Files (x86)\\FreeCommander\\FreeCommander.exe'
      vFileManager: 'C:\\Program Files\\FreeCommander XE\\FreeCommander.exe',
      // Falls die JavaScript-Scripte nicht im chrome-Verzeichnis, sondern einem Unterverzeichnis sind,
      // in der folgenden Zeile das Unterverzeichnis eintragen, sonst '':
      jsSubfolder: 'JS',
      // Im Folgenden bei "warmenuto" 'menu' eintragen, damit es in der Menueleiste erscheint, sonst die id des gewuenschten
      // Elements *nach* dem der Button erscheinen soll (z.B. 'urlbar', 'searchbar', 'undoclosetab-button','abp-toolbarbutton')
      // Bitte nicht so etwas wie die Menue- oder Navigationsleiste (sondern einen Menuepunkt oder einen Button mit id auf diesen Leisten) eintragen:
      warpmenuto: 'menu',
      // Für die Einstellung 'menu' wird hier der Ort festgelegt, wo das Menü angezeigt werden soll.
      // (0: in der Menueleiste, 1: im Extras-Menue)
      menuLocation: 0,
     // Unter Linux sollte/kann versucht werden, die userChromeJS-Skripte zu sortieren, unter Windows ist das evtl. nicht noetig (die Sortierung wird Gross- und Kleinschreibung *nicht* beruecksichtigen - dazu wird die sort()-Funktion entsprechend mit einer Vergleichsfunktion aufgerufen)
      sortScripts: 0,   // 1 zum Erzwingen der Sortierung
      // Einbindung GM-Skripte-Ordner (0: nein, 1: Greasemonkey [Profil-Verzeichnis], 2: UserScriptLoader [Chrome-Verzeichnis], 3: Scriptish [Profil-Verzeichnis]):
      gmOrdner: 0,
      // Einbindung CSS-Ordner (0: nein, 1: ja, Chrome-Unterordner, 2: ja, anderer Pfad):
      cssOrdner: 0,
      // Wenn cssOrdner = 1 oder 2, hier entweder Chrome-Unterordner (z.B. 'CSS') oder andere vollständige Pfade (z.B. 'C:\\Dropbox\\Chrome\\Thunderbird\\CSS-Ordner\\css-dateien') entragen, sonst '':
      cssLocation1: 'CSS',
      cssLocation2: '',
      cssLocation3: '',
      //Anzeigenamen für die CSS-Ordner
      cssLocation1Name: 'CSS-Ordner',
      cssLocation2Name: 'CSS-Ordner2',
      cssLocation3Name: 'CSS-Ordner3',
      // In einer der folgenden Zeilen gueltige about:Adressen eintragen, die ebenfalls aufgerufen werden sollen.
      // - Zum Ausblenden: abouts: [],
      // - Damit die about:-Seiten nicht als Untermenue, sondern direkt als Menuepunkte aufgefuehrt werden, muss das erste Element '0' sein:
      // abouts: ['0','about:config','about:about','about:cache','about:certificate','about:checkerboard','about:crashes','about:debugging','about:devtools','about:memory','about:networking','about:performance','about:policies','about:profiles','about:serviceworkers','about:support','about:telemetry','about:url-classifier','about:webrtc'],
      // abouts: ['about:config','about:about','about:cache','about:certificate','about:checkerboard','about:crashes','about:debugging','about:devtools','about:memory','about:networking','about:performance','about:policies','about:profiles','about:serviceworkers','about:support','about:telemetry','about:url-classifier','about:webrtc'],
       abouts: [],
      // Einbindung config-Dateien wie user.js etc. (0: nein, 1: ja)
       configFiles: 0,
      // Die Firefox-Ordner anzeigen (0: nein, 1: ja):
       firefoxOrdner: 0,
      // Die normalen Firefox-Einstellungen auch zur Verfuegung stellen (0: nein, 1: ja):
      showNormalPrefs: 0,
      // Stellt "Skriptliste in Zwischenablage" zur Verfuegung (1: ja, 2: mit getrennter Nummerierung, 3: mit gemeinsamer Nummerierung) oder nicht (0):
      enableScriptsToClip: 3,
      // Den Eintrag "Neustart" anzeigen (0: nein, 1: ja):
      enableRestart: 0,
      // Ende der Konfiguration -------------------
    
      init: function() {
        if (this.warpmenuto.toLowerCase() == 'menu') {
          // aufgrund des gewaehlten warpmenuto als Menue anlegen
          if (this.menuLocation) {
          var zielmenu = document.getElementById('appMenu-toolsView');
          } else {
             var zielmenu = document.getElementById('main-menubar');
          }
        
          if (zielmenu==null) {
            userChrome.log("extras_config_menu.uc.js findet Zielmenue nicht, evtl. weil ein anderes Fenster als das Hauptfenster " +
                           "geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition " +
                           "von 'zielmenu' kontrollieren.");
            return;
          }
          var menu = zielmenu.appendChild(this.createME("menu","Config-Menü",0,0,"ExtraConfigMenu"));
          menu.setAttribute("class","menu-iconic");
          menu.setAttribute("ondblclick","openTrustedLinkIn('about:config', 'tab');");
          menu.setAttribute("tooltiptext","Doppelklick öffnet about:config");
         } else {
          // als Button nach dem per warpmenuto gewaehlten Element anlegen (s. Kommentar ueber warpmenuto im Konfigurationsabschnitt)
          var zielmenu = document.getElementById(this.warpmenuto);
          if (zielmenu==null) {
            userChrome.log("extras_config_menu.uc.js findet Zielpunkt '"+this.warpmenuto+"' nicht, evtl. weil ein anderes Fenster als das Hauptfenster " +
                           "geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition " +
                           "von 'warpmenuto' kontrollieren.");
            return;
          }
          var menu = zielmenu.parentNode.insertBefore(document.createXULElement('toolbarbutton'), zielmenu.nextSibling);
          menu.setAttribute("id", "ExtraConfigMenu-button");
          menu.setAttribute("class", "toolbarbutton-1");
          menu.setAttribute("type", "menu");
          menu.setAttribute("tooltiptext", "Extra Config Menü\nMittelklick \öffnet about:config");
          menu.setAttribute("onclick", "if (event.button === 1 && !this.open) {openTrustedLinkIn('about:config','tab')};");
        }
        //ab hier ist alles gleich, egal ob Button oder Menue
        var css = " \
          /* #ExtraConfigMenu, */ #ExtraConfigMenu-button { \
           background: 12px no-repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnElEQVR4Xm2RzYtbZRSHn/fr3pvJzTB3qiNM2k2pMBUGhEHaqsUqdeFGQalCobgREaFu/B/cqCtxVSjoQhBEQRBmIfWDKgNGJUPt0Nhah9JJ4iSd5E6+bu5972tAO4SS5/DjXZ1znsMrNiq1eikMQqYYJCmjxNH5+zdW777L0J5KKl9VPmnf+ut9KWkwhbheuzNcOVYOmGKc5iRO0r1ykeXCx0h7kt4fC3z5wfqbQnAJwQHa5S7jAZSRuJ0mkf81cheobhBXZa+ri1uptQjHAZoZCEC1PiPgDuwxCfwerBU7b73zXn//3usCcdt4HkZ7SGZg431U51NUCgwlO3cV/bVXhR/6p9ut+nP9QYeNn7/n8qUPZxvQ/Q6VVWHk4ZqWRvlJjpx9hcGfW2wO95N2q8m3618A2WwDt/0RplSAXsBed57eyossHl5GYdHacG3zGpADM06wjQ1UUIN+CLHPvfAxojPnKLiE+bDE1R9+5GatAmgPeGCAteQ7l5GBhGSyuROyd/gFouUyWkqEErR2mwXAAA8BRS0AgMQBjSra30ZkEeDzz9Dn4ZcvMO51SMcJcTdGChmA0ABA6cAgzyG3I8jLEBylV4fWoaeIc0V7t0Uv7pFbC+CA+28mp/8+SwXKnMVmz1O9HpE+eobMZdjcoY1GIHD/NwIdoH1fBaNguzlg88pVyoUi4vTbFI8eJxsNAIfSkrliESllH/L0v0jktNNomFGv1TFrL3Fo9QSMR3jaEEXzLC09gjaKp595No0WjyCEB4zRclICUMDxtRMce/wJ1MIi2SglXShhfI/cOjxPoZRmbq4gXzt/gVrtBrdvbiG+Wf+p/mvll1BpiVAGhCDPxuAUDotz4HKHlIJON6bRbL4hhPjcMx5mkn8BBLEUrsVZbq0AAAAASUVORK5CYII=) \
          } \
          // #ExtraConfigMenu .menubar-text { \
            // margin-inline-start: 34px !important;\
            // }\
          #ExtraConfigMenu-button > dropmarker, #ExtraConfigMenu-button > hbox > .toolbarbutton-menu-dropmarker { \
            display: none !important; \
          }";
        var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
        var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
        sss.loadAndRegisterSheet(uri,sss.AGENT_SHEET);
        menu.setAttribute("onpopupshowing","uProfMenu.getScripts(0)");
        var menupopup = menu.appendChild(this.createME("menupopup",0,0,0,"ExtraConfigMenu-popup"));
    
        // Anlegen von Untermenues fuer die userChromeJS-Skripte (befuellt werden sie spaeter)
        var submenu=menupopup.appendChild(this.createME("menu","uc.js",0,0,"submenu-ucjs"));
        var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucjs-items"));
        // var submenu=menupopup.appendChild(this.createME("menu","uc.xul",0,0,"submenu-ucxul"));
        // var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucxul-items"));
        menupopup.appendChild(this.createME("menuitem","us.js-Datei erstellen","uProfMenu.createJSfile()","uProfMenu_createJSfile",0));
        if (this.enableScriptsToClip) menupopup.appendChild(this.createME("menuitem","Skriptliste in Zwischenablage","uProfMenu.getScripts(1)","uProfMenu_clipboard",0));
         // Ende Anlegen von Untermenues fuer die userChromeJS-Skripte
         
        if (this.configFiles) menupopup.appendChild(document.createXULElement('menuseparator'));
           
        // Einbindung von Konfigdateien
        if (this.configFiles) {
        menupopup.appendChild(this.createME("menuitem","userChrome.js","uProfMenu.edit(3,'userChrome.js');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","userChrome.css","uProfMenu.edit(3,'userChrome.css');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","userContent.css","uProfMenu.edit(3,'userContent.css');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","prefs.js","uProfMenu.edit(1,'prefs.js');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","user.js","uProfMenu.edit(1,'user.js');","uProfMenu_edit"),0);
        };
        // Ende Einbindung von Konfigdateien
        
        if (this.gmOrdner || this.cssOrdner) menupopup.appendChild(document.createXULElement('menuseparator'));
    
        // Einbindung von Ordnern
        switch (this.gmOrdner) {
          case 1:
            menupopup.appendChild(this.createME("menuitem","GM-Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'gm_scripts');","uProfMenu_folder"),0);
            break;
          case 2:
            menupopup.appendChild(this.createME("menuitem","USL-Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'UserScriptLoader');","uProfMenu_folder"),0);
            break;
          case 3:
            menupopup.appendChild(this.createME("menuitem","Scriptish-Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'scriptish_scripts');","uProfMenu_folder"),0);
            break;
        }
        
        if (this.cssOrdner) {
           if (this.cssOrdner == 1) {
          menupopup.appendChild(this.createME("menuitem",this.cssLocation1Name,"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+uProfMenu.cssLocation1);","uProfMenu_folder"),0);
              if (this.cssLocation2.length>0) {
                 menupopup.appendChild(this.createME("menuitem",this.cssLocation2Name,"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+uProfMenu.cssLocation2);","uProfMenu_folder"),0);
              };
              if (this.cssLocation3.length>0) {
                 menupopup.appendChild(this.createME("menuitem",this.cssLocation3Name,"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+uProfMenu.cssLocation2);","uProfMenu_folder"),0);
              };
           } else {menupopup.appendChild(this.createME("menuitem",this.cssLocation1Name,"uProfMenu.dirOpen(uProfMenu.cssLocation1);","uProfMenu_folder"),0);
                if (this.cssLocation2.length>0) {
                menupopup.appendChild(this.createME("menuitem",this.cssLocation2Name,"uProfMenu.dirOpen(uProfMenu.cssLocation2);","uProfMenu_folder"),0);
                };
                if (this.cssLocation3.length>0) {
                menupopup.appendChild(this.createME("menuitem",this.cssLocation3Name,"uProfMenu.dirOpen(uProfMenu.cssLocation3);","uProfMenu_folder"),0);
                };
            }
        }
        
        if (this.firefoxOrdner) menupopup.appendChild(document.createXULElement('menuseparator'));
    
        if (this.firefoxOrdner) {
        menupopup.appendChild(this.createME("menuitem","Chromeordner","uProfMenu.prefDirOpen('UChrm');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Profilordner","uProfMenu.prefDirOpen('ProfD');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Addonordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'extensions');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Installationsordner","uProfMenu.prefDirOpen('CurProcD');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Startup-Cacheordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfLD')+uProfMenu.getDirSep()+'startupCache');","uProfMenu_folder"),0);
        }
        // Ende Einbindung von Ordnern
        
        if (this.abouts.length>0 || this.showNormalPrefs) menupopup.appendChild(document.createXULElement('menuseparator'));
        
        // Einbindung von abouts
        if (this.abouts.length>0) {
          // falls der erste Eintrag des arrays ='0' ist, dann kein Untermenue anlegen, sondern direkt als Menuepunkte einbinden
          if (this.abouts[0]=='0') {
            for (var i = 1; i < this.abouts.length; i++) {
            menupopup.appendChild(this.createME("menuitem",this.abouts[i],"openTrustedLinkIn('"+this.abouts[i]+"','tab')","uProfMenu_about"),0);
            }
          } else {
            // der erste Eintrag des arrays ist ungleich '0', deshalb als Untermenue einrichten
            var submenu=menupopup.appendChild(this.createME("menu","uc.js",0,0,"submenu-about"));
            var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-about-items"));
            this.fillMenu("submenu-about","submenu-about-items", "about:",this.abouts,"uProfMenu_about",1);
            }
        };
        // Ende Einbindung von abouts
        
        // Falls gewuenscht (s. Konfigurationsabschnitt), Zugriff auf die normalen Einstellungen
        if (this.showNormalPrefs) menupopup.appendChild(this.createME("menuitem","Einstellungen","try{openOptionsDialog();}catch(e){openPreferences();}","uProfMenu_prefs"),0);
        
        if (this.enableRestart) menupopup.appendChild(document.createXULElement('menuseparator'));
    
        // Falls enableRestart = 1, Neustart-Menuepunkt zur Verfügung stellen
        if(this.enableRestart) menupopup.appendChild(this.createME("menuitem","Neustart",
        "Services.appinfo.invalidateCachesOnRestart(); Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit,0);"));
    
      },
    
    
      getDirSep:function() {
        // Betriebssystem nach https://developer.mozilla.org/en/Code_snippets/Miscellaneous ermitteln
        var osString = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
        var dirsep="/";
        switch(osString) {
          case "WINNT":
            dirsep="\\";
            break;
          case "Linux":
            dirsep="/";
            break;
          case "Darwin":
            dirsep="/";
            break;
        }
        return dirsep;
      },
    
    
      edit:function(OpenMode,Filename){
        var Path = "";
        var dSep = this.getDirSep();  // die Trennzeichen zwischen Ordnern abhaengig vom Betriebssystem machen
        switch (OpenMode){
          //Current is Chrome Directory or Subfolder
          case 0:
            if (this.jsSubfolder.length != 0) {
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + this.jsSubfolder + dSep + Filename;
            } else {
               var Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename;
            }
            break;
          //Current is Profile Directory
          case 1:
            var Path = this.getPrefDirectoryPath("ProfD") + dSep + Filename;
            break;
          //Current is Root
          case 2:
            var Path = Filename;
            break;
          //Current is Chrome Directory
          case 3:
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename;
            break;
        }
        this.launch(this.TextOpenExe,Path);
      },
    
    
      dirOpen:function(Path){
        if (this.vFileManager.length != 0) {
          var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
          var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
          var args=[Path];
          file.initWithPath(this.vFileManager);
          process.init(file);
          // Verzeichnis mit anderem Dateimanager oeffnen
          process.run(false, args, args.length);
         } else {
          // Verzeichnis mit Dateimanager des Systems oeffnen
          var dir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          dir.initWithPath(Path);
          dir.launch();
        }
      },
    
    
      prefDirOpen:function(prefDir){
        Path = this.getPrefDirectoryPath(prefDir);
        this.dirOpen(Path);
      },
    
    
      getPrefDirectoryPath:function(str){
        // get profile directory
        var file = Components.classes["@mozilla.org/file/directory_service;1"]
          .getService(Components.interfaces.nsIProperties)
          .get(str, Components.interfaces.nsIFile);
       // folgende 3 Zeilen nur für Firefox, nicht für Thunderbird
        if (str == 'CurProcD') {
          file = file.parent;
        };
        return file.path;
      },
    
    
      launch:function(RanPath,OpenPath){
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
        var proc = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
        var args = [OpenPath];
        file.initWithPath(RanPath);
        // falls der im Konfigurationsabschnitt definierte Editor nicht gefunden wird, auf Einstellung in about:config ausweichen:
        if (!file.exists()) {
          var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
          RanPath=pref.getCharPref("view_source.editor.path");
          file.initWithPath(RanPath);
        }
        proc.init(file);
        proc.run(false, args, args.length);
      },
    
    
      stringComparison:function(a, b){
        a = a.toLowerCase();
        a = a.replace(/ä/g,"a");
        a = a.replace(/ö/g,"o");
        a = a.replace(/ü/g,"u");
        a = a.replace(/ß/g,"s");
        b = b.toLowerCase();
        b = b.replace(/ä/g,"a");
        b = b.replace(/ö/g,"o");
        b = b.replace(/ü/g,"u");
        b = b.replace(/ß/g,"s");
        return(a==b)?0:(a>b)?1:-1;
      },
    
    
      getScripts:function(iType) {
        // Arrays (jeweils ein Array fuer uc.js und uc.xul) nehmen Namen der gefundenen Skripte auf
        let ucJsScripts = [];
        // let ucXulScripts = [];
        // Suchmuster, also die Dateierweiterungen uc.js und uc.xul
        let extjs = /\.uc\.js$/i;
        // let extxul= /\.uc\.xul$/i;
        let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        if (this.jsSubfolder.length != 0) {
           aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+uProfMenu.getDirSep()+this.jsSubfolder);
        } else {
            aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path);
        };
        // files mit Eintraegen im Chrome-Ordner befuellen
        let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
        // Ordner bzw. files durchlaufen und kontrollieren, ob gesuchte Dateien dabei sind
        while (files.hasMoreElements()) {
          let file = files.getNext().QueryInterface(Ci.nsIFile);
          // keine gewuenschte Datei, deshalb continue
          if (!extjs.test(file.leafName) /* && !extxul.test(file.leafName) */) continue;
          // uc.js gefunden -> im Array ablegen
          if (extjs.test(file.leafName)) ucJsScripts.push(file.leafName);
          // uc.xul gefunden -> im Array ablegen
          // if (extxul.test(file.leafName)) ucXulScripts.push(file.leafName);
        }
        if (this.sortScripts) {
          ucJsScripts.sort(this.stringComparison);
          // ucXulScripts.sort(this.stringComparison);
        }
        // Aufruf der naechsten Methoden um die beiden Untermenues oder die Zwischenablage zu befuellen
        if (iType==0) {
          this.fillMenu("submenu-ucjs","submenu-ucjs-items", "uc.js",ucJsScripts,"uProfMenu_ucjs",0);
          // this.fillMenu("submenu-ucxul","submenu-ucxul-items", "uc.xul",ucXulScripts,"uProfMenu_ucxul",0);
         } else {
          var result=this.fillClipboardValue(ucJsScripts/* ,ucXulScripts */);
          Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(result);
        }
      },
    
    
      fillMenu:function(whichsubmenu, whichsubmenuitems, strlabel, scriptArray,sClass,sTyp) {
        // Beschriftung des Untermenues mit Anzahl der gefundenen Dateien ergaenzen
        var e = document.getElementById(whichsubmenu);
        e.setAttribute('label',strlabel + ' (' + scriptArray.length + ')');
        var popup = document.getElementById(whichsubmenuitems);
        // zunaechst Untermenue zuruecksetzen
        while(popup.hasChildNodes()){
          popup.removeChild(popup.firstChild);
        }
        // Untermenue endlich befuellen
        for (var i = scriptArray.length-1; i > -1; i--) {
          // bisher nur eine Typunterscheidung (userChromeJS-Skript oder about:)
          if (sTyp==0){
            var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(0,'"+scriptArray[i]+"')",sClass,0);
            mitem.setAttribute("onclick","uProfMenu.openAtGithub(event,'"+scriptArray[i]+"')");
            mitem.setAttribute("tooltiptext"," Linksklick: Bearbeiten,\n Mittelklick: https://github.com/.../"+this.cleanFileName(scriptArray[i])+" oeffnen,\n Rechtsklick: Suche auf GitHub");
           } else {
            var mitem = this.createME("menuitem",scriptArray[i],"openTrustedLinkIn('"+scriptArray[i]+"','tab')",sClass,0);
          }
          popup.insertBefore(mitem, popup.firstChild);
        }
      },
    
    
      fillClipboardValue:function(sArray/* ,xArray */) {
        var retValue;
        var s = 0;
        // var x = 0;
        s = sArray.length;
        // x = xArray.length;
        switch(this.enableScriptsToClip) {
          case 1:
            retValue = "userChromeJS/uc.js ("+s+"):\n------------------------\n"+sArray.join("\n");
                       // "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------\n"+xArray.join("\n");
            break;
          default:
            retValue = "userChromeJS/uc.js ("+s+"):\n------------------------";
            for (var i = 0; i < s ; i++) {
              j = i + 1;
              retValue = retValue + "\n" + j + ". " + sArray[i];
            }
            // retValue = retValue + "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------";
            // if (this.enableScriptsToClip==2) s = 0;
            // for (var i = 0; i < x ; i++) {
              // j = i + s + 1;
              // retValue = retValue + "\n" + j + ". " + xArray[i];
            // }
            break;
        }
        return retValue;
      },
    
    
      createME:function(sTyp,sLabel,sCommand,sClass,sId) {
        // Anlegen von menuitem, menu oder menupop - fuer bestimmte Typen nicht eingesetzte Parameter werden als 0 uebergeben
        const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
        var m = document.createElementNS(XUL_NS, sTyp);
        switch (sTyp) {
          case "menuitem":
            // this.createME("menuitem","Label des Items","ZuzuweisenderCodeFueroncommand","GewuenschteKlasseDesItems",0)
            m.setAttribute('label', sLabel);
            m.setAttribute('oncommand',sCommand);
            m.setAttribute('class',sClass);
            break;
          case "menu":
            // this.createME("menu","Label des Menues",0,0,"GewuenschteIdDesMenues")
            m.setAttribute('label', sLabel);
            m.setAttribute('id', sId);
            break;
          case "menupopup":
            //this.createME("menupopup",0,0,0,"GewuenschteIdDesMenupopups");
            m.setAttribute('id', sId);
            break;
        }
        return m;
      },
    
    
      openAtGithub:function(e,sScript) {
        if (e.button==1){
          // Mittelklick - Seite auf GitHub oeffnen (funktioniert nur, wenn Ordner- und bereinigter Dateiname [ohne Erweiterung] uebereinstimmen):
          e.preventDefault();
          var sUrl="https://github.com/Endor8/userChrome.js/tree/master/"+this.cleanFileName(sScript);
          openWebLinkIn(sUrl, 'tab');
        }
        if (e.button==2){
          // Rechtsklick - Suche auf GitHub starten (funktioniert nur, wenn der Dateiname im Code hinterlegt ist):
          e.preventDefault();
          var sUrl="https://github.com/search?langOverride=&language=&q="+this.cleanFileName(sScript)+"&repo=&start_value=1&type=Code";
          openWebLinkIn(sUrl, 'tab');
        }
      },
    
    
    	createJSfile: function(Filename) {
    		if (!Filename) Filename = prompt("Name des Skripts", "skriptName");
    		if (Filename) Filename = Filename.replace(/\s+/g, " ").replace(/[\\/:*?\"<>|]/g, "");
    		if (!Filename || !/\S/.test(Filename)) return;
    		if (!/\.uc.js$/.test(Filename)) Filename += ".uc.js";
    		this.edit(0, Filename);
    	},
    
    
       cleanFileName:function(sName) {
        sName=sName.toLowerCase();
        /* Das folgende Array enthaelt regulaere Ausdruecke, um ungueltige Zeichenfolgen entfernen:
        /Datei-Erweiterungen am Ende/, /"ucjs_" am Anfang/, /"_"gefolgtVonZahlUndDanachBeliebigenZeichen/
        / "_fx"gefolgtVonZahl(en)/, /"-" oder "+" oder "."/, /"_v"gefolgtVonZahlen
        */
        var regs=[/\.uc\.js$/,/\.uc\.xul$/,/^ucjs_/,/_\d.+/,/_fx\d+/,/[-+\.]/g,/_v\d+/];
        for (var i = 0; i < regs.length; i++) {
          sName=sName.replace(regs[i],"");
        }
        return sName;
      }
    
    
    };
    uProfMenu.init();
    Alles anzeigen
  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • bege
    • 24. September 2024 um 15:21
    Zitat von 2002Andreas
    Zitat von bege

    Das Menü des Skripts "extra-config-menu.us.js" funktioniert nicht mehr.

    Das funktioniert hier einwandfrei.

    Ich habe es als Menü in der Menüleiste und verschiebe es auch mit AppMenu_edit ins AppMenu. Dort funktioniert es nicht mehr.

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • bege
    • 24. September 2024 um 14:59
    Zitat von Mira_Belle

    Und hier das zweite, um die Menüs der Menüleiste zu spiegeln (klonen):

    Danke für deine Nachricht. Zwar ist jetzt das Untermenü "Ansicht/Symbolleisten" vollständig, aber es treten diese Probleme auf:

    Bei mir ist mit diesem Skript das Hilfemenü unvollständig ("Seitenproblem melden" und "Betrügerische Website melden" fehlen). Das gleiche gilt für das Menü "Extras" und dessen Untermenü "Browser-Werkzeuge".

    Im Hilfemenü wird alles doppelt geöffnet.

    Das Menü des Skripts "extra-config-menu.us.js" funktioniert nicht mehr.

  • Mit uBlock Origin Suchergebnisse von nervigen Websites ausblenden

    • bege
    • 30. August 2024 um 21:46
    Zitat von .DeJaVu

    Wenn du auf dem ublock-Button allerdings das Auge ausge-x-t siehst, dann sind solche kosmetischen Filter nicht wirksam.

    Au Mann, das wars! Echt peinlich, dass ich das nicht gefunden habe. 🙈Zum Glück habe ich nicht noch Stunden lang weiter gesucht, sondern hier gefragt. Vielen Dank!


    Zitat von .DeJaVu

    Nachtrag - auch der Filter bei DDG funktioniert bei mir, allerdings solltest du nicht dieses Tag nehmen, sondern jenes:

    duckduckgo.com##a[href*="camp-firefox.de"]:upward(li[data-layout="organic"])

    Warum meinst du das?

  • Mit uBlock Origin Suchergebnisse von nervigen Websites ausblenden

    • bege
    • 30. August 2024 um 03:57

    Ich nutze schon lange uBlock Origin, um Suchergebnisse von nervigen Websites auf duckduckgo.com und startpage.com auszublenden.

    Das hat so lange funktioniert, bis dort die class-Namen geändert wurden. Das habe ich jetzt wieder angepasst, aber jetzt funktioniert es nur noch auf duckduckgo.com und nicht mehr auf startpage.com.

    Hier zwei Beispiele aus dem Tab "Meine Filter":

    duckduckgo.com##a[href*="file.net"]:upward(.wLL07_0Xnd1QZpzpfR4W)

    startpage.com##a[href*="file.net"]:upward(.result)

    Ich habe alles mögliche probiert: eu.startpage.com, weil ich diese URL nutze, mit den zwei classes experimentiert, die dem Suchergebnis-div zugeordnet sind - hat alles nichts genützt.

    Wo liegt der Fehler?

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

    • bege
    • 20. August 2024 um 21:04

    Sören Hentzschel

    Beim Verschieben des Menüs "Ansicht"

    in das mit Appmenu.uc.js erstellte Firefox-Menü RE: userChrome.js Scripte für den Fuchs (Diskussion) verschwinden im Untermenü "Symbolleisten" die ersten beiden Menüeinträge.

    Mir ist aufgefallen, dass diese beiden Einträge das Attribut toolbarId haben, was die anderen Menüeinträge auch anderer Menüs nicht haben. Hängt das damit zusammen?

    menuitem label="Menüleiste" id="toggle_toolbar-menubar" toolbarId="toolbar-menubar"

    menu label="Lesezeichen-Symbolleiste" id="toggle_PersonalToolbar" toolbarId="PersonalToolbar"

    Fällt dir ein Workaround ein, um diese Menüeinträge auch im verschobenen Menü angezeigt zu bekommen?

    Edit: Diese beiden Einträge werden in "https://searchfox.org/mozilla-centra…menubar.inc#125 im Ansicht-Menü gar nicht definiert! Sie tauchen auch an an anderen Stellen in der Benutzeroberfläche mit der gleichen ID auf. Und die IDs scheinen auch nicht fest definiert zu sein, sondern z.B. in einer solchen Codezeile https://searchfox.org/mozilla-centra…-places.js#1463

    Ich konnte nicht herausfinden, wo und wie diese Menüeinträge und ihre IDs definiert werden.

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • bege
    • 19. August 2024 um 23:08

    Hm, da fällt mir nichts ein. Hier funktioniert alles, bis auf Ansicht/Symbolleiten. Da fehlen nach dem Verschieben die ersten zwei Einträge, das war mir noch nicht aufgefallen. Das könnte allerdings auch ein älterer Fehler sein, weil ich das Menü kaum nutze.

    Du hast das browser-menubar.uc.js mit den drei Änderungen genommen? Hast du ins Log geschaut, ob es geladen wird und keinen Fehler hat?

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • bege
    • 19. August 2024 um 21:52
    Zitat von Mira_Belle

    Kannst Du bitte mal auf das oder die Skripte verlinken? Besonders jenes, welches es fertigbringt, alle Menüs aus der Menüleiste in das Appmenü zu verschieben. Bitte.

    Das Skript zum Verschieben kennst du schon. Und das zusätzliche, das die verschobenen Menüs wieder funktionsfähig macht, ist hier RE: userChrome.js Scripte für den Fuchs (Diskussion)
    (Chronik und Lesezeichen verschiebe ich nicht, die öffne ich über Buttons.)

  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • bege
    • 19. August 2024 um 18:19
    Zitat von Mira_Belle

    Wie würdet Ihr Euch so ein zusätzliches Menü vorstellen und welche Funktionen sollte es präsentieren?

    Ich nutze das "alte" aktualisierte AppMenu.uc.js wie im anderen Thema besprochen und es enthält das, was ich so nutze. Nachdem das Verschieben der Menüs aus der Menüleiste in dieses Menü nun auch wieder klappt, brauche ich nichts anderes.

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

    • bege
    • 17. August 2024 um 23:01
    Zitat von Sören Hentzschel

    ...

    Das ist eine Folge dieser Änderung:

    https://bugzilla.mozilla.org/show_bug.cgi?id=1893068

    Vielleicht geht es schöner, aber das Einfachste ist, wir duplizieren etwas Code. Füge im zweiten Script in Zeile 33 (also da, wo jetzt eine leere Zeile ist) Folgendes ein:

    ...

    Nochmal Danke für diesen Tipp. Ohne den wäre ich aufgeschmissen gewesen.

    Wenn nach einem Update etwas mehr nicht funktioniert, ist es für mich einfacher das ganze Skript zu kopieren, anstatt es in einem der Skripte "AppMenu.uc.js oder "AppMenu_edit.uc.js" nachzubauen und nach Änderungen zu suchen. Deshalb habe ich das Skript als eigenes uc.js-Skript angelegt.

    Das Skript ist hier zu finden:

    browser-menubar.js - mozsearch

    Ich habe nur die Zeilen 8 und 117 hinzugefügt und die Zeile 12 geändert. Die andere Arbeit überlasse ich lieber weiterhin den Mozilla-Entwicklern. 😉

    Es sieht jetzt so aus:

    JavaScript: browser-menubar.uc.js
    /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
     * This Source Code Form is subject to the terms of the Mozilla Public
     * License, v. 2.0. If a copy of the MPL was not distributed with this
     * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
    
    /* eslint-env mozilla/browser-window */
    
    (function () { // ZUGEFÜGT!
    document.addEventListener(
     "DOMContentLoaded",
     () => {
        let mainMenuBar = document.getElementById("AMpopup"); // GEÄNDERT!
        mainMenuBar.addEventListener("command", event => {
          switch (event.target.id) {
            // == edit-menu ==
            case "menu_preferences":
              openPreferences(undefined);
              break;
    
            // == view-menu ==
            case "menu_pageStyleNoStyle":
              gPageStyleMenu.disableStyle();
              break;
            case "menu_pageStylePersistentOnly":
              gPageStyleMenu.switchStyleSheet(null);
              break;
            case "repair-text-encoding":
              BrowserCommands.forceEncodingDetection();
              break;
            case "documentDirection-swap":
              gBrowser.selectedBrowser.sendMessageToActor(
                "SwitchDocumentDirection",
                {},
                "SwitchDocumentDirection",
                "roots"
              );
              break;
    
            // == history-menu ==
            case "sync-tabs-menuitem":
              gSync.openSyncedTabsPanel();
              break;
            case "hiddenTabsMenu":
              gTabsPanel.showHiddenTabsPanel(event, "hidden-tabs-menuitem");
              break;
            case "sync-setup":
              gSync.openPrefs("menubar");
              break;
            case "sync-enable":
              gSync.openPrefs("menubar");
              break;
            case "sync-unverifieditem":
              gSync.openPrefs("menubar");
              break;
            case "sync-syncnowitem":
              gSync.doSync(event);
              break;
            case "sync-reauthitem":
              gSync.openSignInAgainPage("menubar");
              break;
            case "menu_openFirefoxView":
              FirefoxViewHandler.openTab();
              break;
    
            // == menu_HelpPopup ==
            // (Duplicated in PanelUI._onHelpCommand)
            case "menu_openHelp":
              openHelpLink("firefox-help");
              break;
            case "menu_layout_debugger":
              toOpenWindowByType(
                "mozapp:layoutdebug",
                "chrome://layoutdebug/content/layoutdebug.xhtml"
              );
              break;
            case "feedbackPage":
              openFeedbackPage();
              break;
            case "helpSafeMode":
              safeModeRestart();
              break;
            case "troubleShooting":
              openTroubleshootingPage();
              break;
            case "help_reportSiteIssue":
              ReportSiteIssue();
              break;
            case "menu_HelpPopup_reportPhishingtoolmenu":
              openUILink(gSafeBrowsing.getReportURL("Phish"), event, {
                triggeringPrincipal:
                  Services.scriptSecurityManager.createNullPrincipal({}),
              });
              break;
            case "menu_HelpPopup_reportPhishingErrortoolmenu":
              ReportFalseDeceptiveSite();
              break;
            case "helpSwitchDevice":
              openSwitchingDevicesPage();
              break;
            case "aboutName":
              openAboutDialog();
              break;
            case "helpPolicySupport":
              openTrustedLinkIn(Services.policies.getSupportMenu().URL.href, "tab");
              break;
                }
        });
    
        document
          .getElementById("menu_EditPopup")
          .addEventListener("popuphidden", () => {
            updateEditUIVisibility();
          });
      },
      { once: true }
    );
    }) (); // ZUGEFÜGT!
    Alles anzeigen
  • "Neues", altes Appmenu. Update, und bräuchte Hilfe!

    • bege
    • 13. August 2024 um 19:47
    Zitat von Mira_Belle

    Weiß irgendjemand zufällig, wie man in einem Untermenü (subdir) einen Separator erstellt?
    Und wie schaut es mit einem Untermenü in einem Untermenü aus? Wie geht das?

    Meinst du im Skript Appmenu.uc.js? Da sind Separatoren drin. Einfach abgucken. Da funktioniert es anders als in "normalen" Skripten, wie es Endor geschrieben hat.

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

    • bege
    • 12. August 2024 um 23:19
    Zitat von Mira_Belle

    Nur, verrate mir, uns, doch wie Du dem Code auf die Schliche gekommen bist. Bitte.

    Hm, blindes Huhn findet auch mal'n Korn. Mal schauen, ob ich es noch rekonstruieren kann.

    1. In den Browser-Werkzeugen gibt es beim Eintrag der Entwickler-Werkzeuge im Extras-Menü den Punkt event
    2. Da zwei Mal geklickt ist der Befehl gDevToolsBrowser.toggleToolboxCommand(window.gBrowser, Cu.now()); zu sehen
    3. Dann habe ich versucht, die Struktur des Skripteintrags für die Browser-Konsole auf diesen Befehl anzuwenden

    Ich habe auch im Firefox Quellcode https://searchfox.org/mozilla-central/source nach den Pfaden gesucht, die in den Variablen angegeben sind, aber das mich in diesem Fall nicht viel weiter gebracht.

    Edit: Doch was im Quellcode gefunden, nämlich dass innerhalb der Datei devtools/client/framework/devtools-browser.js der Befehl toggleToolboxCommand heißt. Also habe ich vermutet, dass ich entsprechend dem Code für die Browser-Konsole den Teil davor als Variable definieren muss.

    Aber wie gesagt, blindes Huhn ..., oder ein Bastler braucht halt im Unterschied zu einem Programmierer viel Zeit und Glück.


    Zitat von milupo

    Ich habe auch etwas gebastelt, aber immer noch ohne appmenu_edit.uc.js. Es ist eine Notlösung. Ich habe einfach die Hilfe-Einträge in der appmenu.uc.js angelegt. Nutzt sie oder nutzt sie nicht.

    Ja, da besteht mit AppMenu_edit.uc.js das gleiche Problem, dass der Klick auf einen Menüeintrag imitiert wird, anstatt dass der zugrunde liegende Befehl aufgerufen wird.

    Jetzt muss ich aber ins Bett. Gute Nacht

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

    • bege
    • 12. August 2024 um 22:43

    Puh! Gefunden.

    So lautet der direkte Befehl, der nicht vom Klick auf den Menüeintrag abhängig ist. Damit funktioniert's auch mit AppMenu_edit.uc.js. Hier der ganze Abschnitt für das Skript:

    JavaScript
    {
                name: 'Entwickler-Werkzeuge',
                command: "var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
                    var { gDevToolsBrowser } = require('devtools/client/framework/devtools-browser');\
                    gDevToolsBrowser.toggleToolboxCommand(window.gBrowser, Cu.now());",
                subdir: 'Firefox Funktionen',
                image:'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',
            },

    Endor Magst du das auf Github noch ändern?

Unterstütze uns!

Jährlich (2025)

82,4 %

82,4% (535,86 von 650 EUR)

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