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

Beiträge von Mitleser

  • Script für animierte Grafiken funktioniert ab FF 94 nicht mehr vollständig

    • Mitleser
    • 12. Januar 2025 um 02:15

    Wie Du vielleicht bemerkt hast, ist mir die 'ConfigArea' in meinen Scripten sehr wichtig. Es gibt Menschen, die kaum Ahnung von JavaScript haben die Möglichkeit einfach ein Script zu konfigurieren. Deshalb gibt es z.B. die Möglichkeit den Pfad einzustellen (const iconPath = '/chrome/icons/';). Außerdem nutze ich meist mehrere Icons in den Pfaden zu den ListStylImages. Wenn ein 'switch' besser als ein 'if' sein sollte, benutze ich diesen auch. Aber trotzdem: Danke für Deine Anmerkungen!

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mitleser
    • 12. Januar 2025 um 01:05

    Ich hätte dies:

    Translate_DeepL.uc.js
    16_deepl_logo_moz.svg

    JavaScript
    // JavaScript Document
    // M_Translate_DeepL.uc.js
    
    // Das Script erstellt einen neuen Menüeintrag. Beim Klick auf den Eintrag öffnet die Seite https://www.deepl.com/...in einem neuen Tab und der vorher markierte Text wird übernommen.
    
    // Bug: Sprache erkennen funktioniert nicht.
    
    // Das .svg-Icon kann - je nach Hover-Zustand - mit zwei unterschiedlichen Farben gefüllt werden [fill]. Beim Überfahren des Menuitems vergrößert sich das Icon [scale: 1.1].
    // Das Menü für den Menüeintrag kann selektiert werden (Seitenkontextmenü oder Tabkontextmenü).
    // Die Position des Menüeintrags innerhalb des Menüs kann bestimmt werden.
    // Darstellung des Menüeintrags mit/ohne Icon kann gewählt werden.
    // Für das mitgelieferte Icon als .svg-Datei mit [moz-context-properties] ändert das Script - bei gewählter Iconanzeige [const isIcon = 1;] -  die Einstellung [svg.context-properties.content.enabled] in about:config auf 'true'.
    
    (function() {
      if (!window.gBrowser)
    	return;
    // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    const id = 'contextDeepletranslate'; // ID des neuen menuitems
    const label = 'Deepl Translate'; // Bezeichnung des neuen menuitems
    const tooltiptext = 'Mit DeeplTranslate übersetzen'; 
    // Icon-------------------------------------------------------
    const isIcon = 1;
    // const isIcon = 1; mit Icon 
    // const isIcon = 0; ohne Icon; die Konstanten icon, iconPath, iconColOu und iconColOv haben dann keine Funktion und sollten unberührt bleiben
    const icon = '16_deepl_logo_moz.svg';  // [Name.Dateiendung] des anzuzeigenden Symbols
    const iconPath = '/chrome/icons/'; // Pfad zum Ordner der das Icon beinhaltet
    const iconColOu = 'steelblue';  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties], bei anderen Icons hat const iconColOu keine Funktion)
    const iconColOv = 'currentColor';  // Farbe des Icons beim Überfahren des Items (nur .svg-Datei mit [moz-context-properties], bei anderen Icons hat const iconColOv keine Funktion)
    // Menü-------------------------------------------------------
    const isMenu = 1; 
    // const isMenu = 1; für Seitenkontextmenü; 
    // const isMenu = 2; für Tabkontextmenü'; 
    const isPos = 'context-translate-selection'; 
    // Option A: 
    // const isPos = 12; [Zahlen von -5 bis 20] 
    // Menuitem an einer bestimmten Position im Menü einfügen 
    // wie in CSS: [order:12!important;] 
    // Option B: 
    // const isPos = 'context-translate-selection'; [String] 
    // Menuitem auf diesen Menüpunkt folgend einfügen 
    // wie in CSS: [#context-translate-selection] 
    // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    const curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
    const cl = 'image';
    const menu1 = document.getElementById('contentAreaContextMenu');
    const menu2 = document.getElementById('tabContextMenu');
    
    const menuitem = document.createXULElement('menuitem');
          menuitem.id = id;
          menuitem.setAttribute('label', label);
          menuitem.setAttribute('tooltiptext', tooltiptext);
    //mit Icon	  
    if (isIcon === 1) {
    //----
    	if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
    		Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
    	}
    //----   
    	  menuitem.classList.add('menuitem-iconic');
    	  menuitem.style.MozContextProperties = 'fill';
    	  menuitem.style.listStyleImage = 'url("' + curProfDir + iconPath + icon + '")';
    //Icon start
    switch (isMenu) {
    	case 1:
    	menu1.addEventListener('popupshowing', () => {
    	menuitem.querySelector(cl).style.fill = iconColOu;
    });
    	break;
    	case 2:
    	menu2.addEventListener('popupshowing', () => {
    	menuitem.querySelector(cl).style.fill = iconColOu;
    });
    	break;
    }
    //Icon over
    menuitem.addEventListener('mouseover', () => {
    	  menuitem.querySelector(cl).setAttribute('style','fill:'+iconColOv+';scale: 1.1;transition: scale 0.2s ease-in-out 0.0s;');
    });
    //Icon out
    menuitem.addEventListener('mouseout', () => {
    	  menuitem.querySelector(cl).setAttribute('style','fill:'+iconColOu+';scale: 1.0;transition: scale 0.2s ease-in-out 0.0s;');
    });
    
    }
    //Icon end
    //click
    menuitem.addEventListener('click', () => {
    	if (event.button == 0) {
           	 translate();
                }
    });
    //Position order
    if (isPos > -6 && isPos < 21) {
    	if (isMenu === 1) {
    		  menu1.append(menuitem);
    	} 
    	else
    	if (isMenu === 2) {
    	  	  menu2.append(menuitem);
    	}
    menuitem.style.order = isPos;
    }
    //Position reference
    else {
    const refItem = document.getElementById(isPos); 
     	  refItem.parentNode.insertBefore(menuitem, refItem.nextSibling);
    }
    //----
    function translate() {
    const browserMM = gBrowser.selectedBrowser.messageManager;
    	  browserMM.addMessageListener('getSelection', function listener(message) {
    const t = (message.data !== '');
    const e = (document.charset || document.characterSet);
    	if (t) {
    		openTrustedLinkIn('https://www.deepl.com/translator#en/de/' + encodeURIComponent(message.data), 'tab');
    	} 
    	else {
    		openTrustedLinkIn('https://www.deepl.com/translate?u=' + encodeURIComponent(gBrowser.currentURI.spec) + '&hl=de-DE&ie=' + e + '&sl=auto&tl=de-DE', 'tab');
    	};
    		browserMM.removeMessageListener('getSelection', listener, true);
    		});
    		browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
    };
    //----
    })();
    Alles anzeigen

    Dateien

    16_deepl_logo_moz.svg 1,84 kB – 66 Downloads
  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mitleser
    • 12. Januar 2025 um 00:47
    Zitat von milupo

    Mitleser Die Inline-Eventhandler sind ja schon lange nur eine Altlast nebenher, die Variante mit addEventListener und seinem Gegenstück removeEventListener gibt es ja schon seit einer Ewigkeit.

    Ach so :thumbup:, Danke!,

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mitleser
    • 12. Januar 2025 um 00:12
    Zitat von BrokenHeart

    Brauchst du auch gar nicht. Wenn du das angepasste Skript in der Release-Version testest und es genau das macht, was das Skript vorher gemacht hat, dann wird es auch in der Nightly funktionieren.

    Getestet in Release und funzt!

    Danke!!

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mitleser
    • 11. Januar 2025 um 23:47
    Zitat von BrokenHeart

    Funktioniert das angepasste Script aus #91 bei dir nicht?

    Habe leider kein Nightly zum testen...

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mitleser
    • 11. Januar 2025 um 23:34

    Schade. war einen Versuch wert. Da ich das nicht testen kann gebe ich auf. Danke für die Rückmeldungen.

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mitleser
    • 11. Januar 2025 um 23:27
    Zitat von BrokenHeart

    Gerne :) . Ich glaube ihr beide seid die einzigen, die dieses Skript nutzen (mag mich natürlich irren) ^^ .

    Nö, ich auch (dann wären wir schon zu dritt). Eine Lsg. bei diesem doch komplizierten Script wäre schön...

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mitleser
    • 11. Januar 2025 um 23:15
    Zitat von 2002Andreas

    Es werden immer mehr ;)

    Funzt das?

    JavaScript
    //ScrollTopAndBottom.uc.js
    (function() {
    
    let menuitem = document.createXULElement('menuitem');
    menuitem.id = 'context-to-top';
    menuitem.classList.add('menuitem-iconic');
    menuitem.setAttribute('tooltiptext' , '');
    menuitem.style.listStyleImage='url("chrome://browser/skin/downloads/downloads.svg")';
    menuitem.setAttribute('oncommand' , "ownerGlobal.gBrowser.selectedBrowser.messageManager.loadFrameScript(' data: , content.scrollTo(0,0) ' , false);");
    let refItem = document.getElementById('context-reload');
    refItem.parentNode.insertBefore(menuitem, refItem);
    
    })();
    
    (function() {
    
    let menuitem = document.createXULElement('menuitem');
    menuitem.id = 'context-to-bottom';
    menuitem.classList.add('menuitem-iconic');
    menuitem.setAttribute('tooltiptext' , '');
    menuitem.style.listStyleImage='url("chrome://browser/skin/downloads/downloads.svg")';
    let refItem = document.getElementById('context-reload');
    refItem.parentNode.insertBefore(menuitem, refItem);
    //click
    menuitem.addEventListener('click', () => {
    	if (event.button == 0) {
    		ownerGlobal.gBrowser.selectedBrowser.messageManager.loadFrameScript(' data: , content.scrollTo(0,100000) ' , false);
                }
    }); 
    
    var css = '\
    #context-to-top { \
    list-style-image: url("chrome://browser/skin/downloads/downloads.svg");\
      transform:rotate(180deg)!important;\
      margin-left: 0px !important;\
      margin-right: 15px !important;\
    }\
    }';
    var cssUri = Services.io.newURI('data:text/css,' + encodeURIComponent(css), null, null);
    var SSS = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
    SSS.loadAndRegisterSheet(cssUri, SSS.AGENT_SHEET);
    })();
    Alles anzeigen
  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mitleser
    • 11. Januar 2025 um 20:25
    Zitat von 2002Andreas

    Und noch eins:

    Ich kann das ja nicht testen aber vielleicht klappt das ja:

    JavaScript
    (function() {
    
      if (location != 'chrome://browser/content/browser.xhtml')
        return;
    
      let menuitem = document.createXULElement('menuitem');
      menuitem.id = 'context_closeLeftTabs';
      menuitem.setAttribute('label', 'Linke Tabs schließen');
      let tabContextMenu = document.getElementById('tabContextMenu');
      let refItem = document.getElementById('context_undoCloseTab');
      tabContextMenu.insertBefore(menuitem, refItem);
      tabContextMenu.insertBefore(document.getElementById('context_closeTabsToTheEnd'), refItem);
      tabContextMenu.insertBefore(document.getElementById('context_closeOtherTabs'), refItem);
      //tabContextMenu.removeChild(document.getElementById('context_closeTabOptions'));
    //click
    menuitem.addEventListener('click', () => {
    	if (event.button == 0) {
           	 for (let i = TabContextMenu.contextTab._tPos - 1; i >= 0; i--)gBrowser.removeTab(gBrowser.tabs[i], {animate: true});
                }
    }); 
    
    })();
    Alles anzeigen

    Das Script war aber vorher auch nicht i.O., "Linke Tabs schließen" bleibt als menuitem obwohl es keinen Linken Tab gibt!

  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mitleser
    • 11. Januar 2025 um 17:36
    Zitat von 2002Andreas

    Och nö..noch einer..

    Wieder nur 'meine' angepasste Version:
    Icon: 16_close-box_large_moz.svg

    JavaScript
    // JavaScript Document
    // M_contentAreaContextMenuCloseTab.uc.js
    
    (function() {
      if (!window.gBrowser)
    	return;
    // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    const id = 'context-closetab-test'; // ID des neuen menuitems
    const label = 'Aktuellen Tab schließen'; // Bezeichnung des neuen menuitems
    const tooltiptext = 'Aktuellen Tab schließen'; 
    // Icon-------------------------------------------------------
    const icon = '16_close-box_large_moz.svg';  // [Name.Dateiendung] des anzuzeigenden Symbols
    const iconPath = '/chrome/icons/'; // Pfad zum Ordner der das Icon beinhaltet
    const iconColor = 'currentColor';  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties], bei anderen Icons hat const iconColor keine Funktion)
    // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    const curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
    //----
    	if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
    		Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
    	}
    //----  
      var contextMenu = document.getElementById('contentAreaContextMenu');
      var menuseparator = document.createXULElement('menuseparator');
      menuseparator.id = 'context-sep-closetab';
      contextMenu.append(menuseparator);
    
      var menuitem = document.createXULElement('menuitem');
      menuitem.id = id;
      menuitem.setAttribute('label', label);
      menuitem.setAttribute('tooltiptext', tooltiptext);
    	  menuitem.style.MozContextProperties = 'fill';
    	  menuitem.style.fill = iconColor;
    	  menuitem.classList.add('menuitem-iconic');
    	  menuitem.style.listStyleImage = 'url("' + curProfDir + iconPath + icon + '")';
    
    menuitem.addEventListener('click', () => {
    	BrowserCommands.closeTabOrWindow();
    });
    
      contextMenu.append(menuitem);
    
    //Feld in die Iconleiste
    //let ref = document.getElementById('context-bookmarkpage');
    //ref.parentNode.insertBefore(menuitem, ref.nextSibling);
    
      var appcontent = document.getElementById('tabbrowser-tabbox');
      appcontent.addEventListener('contextmenu', event => {
        setTimeout(() => {
          if (gContextMenu && !gContextMenu.shouldDisplay) {
            for (let string of 'back forward reload bookmarkpage'.split(' ')) {
              document.getElementById('context-' + string).removeAttribute('hidden');
            }
            document.getElementById('context-stop').setAttribute('hidden', 'true');
            const A = 'navigation sep-navigation savepage sep-paste selectall sep-viewsource viewsource viewinfo sep-bidi inspect-a11y inspect sep-closetab closetab'.split(' ');
            for (let node of contextMenu.childNodes) {
              if (A.includes(node.id.substring(8)))
                node.removeAttribute('hidden');
              else
                node.setAttribute('hidden', 'true');
            }
            contextMenu.openPopupAtScreen(event.screenX, event.screenY, true, event);
          }
        }, 50);
      });
    
    })();
    Alles anzeigen
  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mitleser
    • 11. Januar 2025 um 15:46
    Zitat von 2002Andreas

    Noch eins was nicht mehr funktioniert ;)

    Auch da habe ich leider nur ein Alternativ-Script (mit den Icons aus #23):

    JavaScript
    // JavaScript Document
    // B_UserPrefContextMenuEnabled.uc.js
    
    // Das Script erstellt einen Button, der in about:config boolsche Werte ändert. In der UserConfiguration unter 'const boolPref' kann die zu ändernde Einstellung festgelegt werden. Das icon/label/tooltiptext kann in der UserConfiguration dem jeweiligen Zustand angepasst werden (true/false).
    // Für das mitgelieferte Icon als .svg-Datei mit [moz-context-properties] ändert das Script die Einstellung [svg.context-properties.content.enabled] in about:config auf 'true'.
    // In einem neuen Profil ist die Einstellung in about:config 'dom.event.contextmenu.enabled, true' gesetzt. Allerdings kann die Anzeige des Kontextmenüs durch die Website manchmal unterdrückt sein. Dieses Script toggelt 'dom.event.contextmenu.enabled, true'/'dom.event.contextmenu.enabled, false', 'umgeht' die 'Sperre' und blendet das Menü wieder ein. ACHTUNG: Diese Einstellung kann (z.B. mit Mausgesten+Kontextmenü) zu Konflikten führen, deshalb ist diese Schalterstellung nur für kurzzeitigen Einsatz geeignet.   
    
    (function() {
      if (!window.gBrowser)
    	return;
    // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    const id = 'UserPref-cmE-button'; // Id des neuen Buttons
    const boolPref = 'dom.event.contextmenu.enabled'; // Einstellung in about:config deren boolesche Variable geschaltet werden soll
    const labelT = 'Seitenkontextmenü normal anzeigen'; // Bezeichnung des neuen Buttons bei boolPref=true
    const labelF = 'Durch Site "gesperrtes" Kontextmenü anzeigen'; // Bezeichnung des neuen Buttons bei boolPref=false
    const tooltiptextT = 'Seitenkontextmenü normal anzeigen';
    const tooltiptextF = 'Durch eine Site "unterdrücktes"\nSeitenkontextmenü anzeigen';
    // Icon-------------------------------------------------------
    const iconT = '16-control-panel-18_moz.svg';  // [Name.Dateiendung] des anzuzeigenden Symbols für boolPref=true
    const iconF = '16-control-panel-20_moz.svg';  // [Name.Dateiendung] des anzuzeigenden Symbols für boolPref=false
    //const bgImage = 'blue'; // Farbe des Indikators (zur Unterscheidung mehrerer UserPref-buttons;)
    const iconPath = '/chrome/icons/'; // Pfad zum Ordner der das Icon beinhaltet
    const iconColorT = 'firebrick';  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties] für boolPref=true, bei anderen Icons hat const iconColorT keine Funktion)
    const iconColorF = 'forestgreen';  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties] für boolPref=false, bei anderen Icons hat const iconColorF keine Funktion)
    // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    const curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
    //----
    	if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
    		Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
    	}
    //----  
    CustomizableUI.createWidget({
        id: id,
        defaultArea: CustomizableUI.AREA_NAVBAR,
        onCreated: function(button) {
    		button.style.MozContextProperties = 'fill';
    //bgImage
    //		button.style = 'background-image:linear-gradient('+bgImage+','+bgImage+'); background-repeat: no-repeat; background-size: 4px 4px; background-position: left 2px top calc(50% - 8px);';
    	}
    });
    
    const el = document.getElementById(id);
    const cl = '.toolbarbutton-icon';
    //start
    if (Services.prefs.getBoolPref(boolPref) == false ) {
    		el.querySelector(cl).style.fill = iconColorF;
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconF + '")';
        	el.setAttribute('label', labelF);
        	el.setAttribute('tooltiptext', tooltiptextF);
    }
    else
    if (Services.prefs.getBoolPref(boolPref) == true ) {
    		el.querySelector(cl).style.fill = iconColorT;
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconT + '")';
        	el.setAttribute('label', labelT);
        	el.setAttribute('tooltiptext', tooltiptextT);
    }
    //click
    el.addEventListener('click', () => {
    if (event.button == 0) {
    	if (Services.prefs.getBoolPref(boolPref) == false ) {
    		el.querySelector(cl).style.fill = iconColorT;
    		Services.prefs.setBoolPref(boolPref, true);
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconT + '")';
        	el.setAttribute('label', labelT);
        	el.setAttribute('tooltiptext', tooltiptextT);
    	}
    	else
    	if (Services.prefs.getBoolPref(boolPref) == true ) {
    		el.querySelector(cl).style.fill = iconColorF;
    		Services.prefs.setBoolPref(boolPref, false);
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconF + '")';
        	el.setAttribute('label', labelF);
        	el.setAttribute('tooltiptext', tooltiptextF);
    	}
    }
    });
    //----
    })();
    Alles anzeigen
  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mitleser
    • 11. Januar 2025 um 12:33
    Zitat von 2002Andreas

    Mit dem unteren Skript wird der config Eintrag: media.mediasource.enabled

    von false auf true umgestellt.

    Meine Frage/Bitte: Kann mir jemand diese Skripte anpassen?

    Daran bin ich auch gescheitert, deshalb habe ich auch nur ein alternatives Script (mit den Icons aus #23):

    JavaScript
    // JavaScript Document
    // B_UserPrefMediaSource.uc.js
    
    // Das Script erstellt einen Button, der in about:config boolsche Werte ändert. In der UserConfiguration unter 'const boolPref' kann die zu ändernde Einstellung festgelegt werden. Das icon/label/tooltiptext kann in der UserConfiguration dem jeweiligen Zustand angepasst werden (true/false).
    // Für das mitgelieferte Icon als .svg-Datei mit [moz-context-properties] ändert das Script die Einstellung [svg.context-properties.content.enabled] in about:config auf 'true'.
    // In einem neuen Profil ist die Einstellung in about:config 'media.mediasource.enabled, true' gesetzt. Allerdings werden einige Menuitems im Mediendropdown nicht angezeigt z.B.:'Video speichern unter'. Dieses Script toggelt 'media.mediasource.enabled, true'/'media.mediasource.enabled, false'. Die Einstellung 'media.mediasource.enabled, false' könnte z.B.: auf 'youtube.com' interessant sein ( =>'Video speichern unter'). Bei Livestreams (z.b.: 'ardmediathek.de/live/') kann es bei der Einstellung 'media.mediasource.enabled, false' zu Fehlermeldungen der Seite (Wiedergabefehler) kommen. Beim Umschalten wird der Seiteninhalt des AKTIVEN Tabs neu geladen.
    
    (function() {
      if (!window.gBrowser)
    	return;
    // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    const id = 'UserPref-msE-button'; // Id des neuen Buttons
    const boolPref = 'media.mediasource.enabled'; // Einstellung in about:config deren boolesche Variable geschaltet werden soll (Wichtig: Beim Umschalten wird der Seiteninhalt des aktiven Tabs neu geladen)
    const labelT = 'Mediendropdown ohne DownloadItem (Livestream)'; // Bezeichnung des neuen Buttons bei boolPref=true
    const labelF = 'Mediendropdown mit DownloadItem (Youtube)'; // Bezeichnung des neuen Buttons bei boolPref=false
    const tooltiptextT = 'Mediendropdown ohne DownloadItem (Livestream)';
    const tooltiptextF = 'Mediendropdown mit DownloadItem (Youtube)';
    // Icon-------------------------------------------------------
    const iconT = '16-control-panel-18_moz.svg';  // [Name.Dateiendung] des anzuzeigenden Symbols für boolPref=true
    const iconF = '16-control-panel-20_moz.svg';  // [Name.Dateiendung] des anzuzeigenden Symbols für boolPref=false
    //const bgImage = 'magenta'; // Farbe des Indikators (zur Unterscheidung mehrerer UserPref-buttons;)
    const iconPath = '/chrome/icons/'; // Pfad zum Ordner der das Icon beinhaltet
    const iconColorT = 'firebrick';  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties] für boolPref=true, bei anderen Icons hat const iconColorT keine Funktion)
    const iconColorF = 'forestgreen';  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties] für boolPref=false, bei anderen Icons hat const iconColorF keine Funktion)
    // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    const curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
    //----
    	if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
    		Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
    	}
    //----  
    CustomizableUI.createWidget({
        id: id,
        defaultArea: CustomizableUI.AREA_NAVBAR,
        onCreated: function(button) {
    		button.style.MozContextProperties = 'fill';
    //bgImage
    //		button.style = 'background-image:linear-gradient('+bgImage+','+bgImage+'); background-repeat: no-repeat; background-size: 4px 4px; background-position: left 2px top calc(50% - 8px);';
    	}
    });
    
    const el = document.getElementById(id);
    const cl = '.toolbarbutton-icon';
    //start
    if (Services.prefs.getBoolPref(boolPref) == false ) {
    		el.querySelector(cl).style.fill = iconColorF;
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconF + '")';
        	el.setAttribute('label', labelF);
        	el.setAttribute('tooltiptext', tooltiptextF);
    }
    else
    if (Services.prefs.getBoolPref(boolPref) == true ) {
    		el.querySelector(cl).style.fill = iconColorT;
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconT + '")';
        	el.setAttribute('label', labelT);
        	el.setAttribute('tooltiptext', tooltiptextT);
    }
    //click
    el.addEventListener('click', () => {
    if (event.button == 0) {
      BrowserCommands.reloadSkipCache();
    	if (Services.prefs.getBoolPref(boolPref) == false ) {
    		el.querySelector(cl).style.fill = iconColorT;
    		Services.prefs.setBoolPref(boolPref, true);
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconT + '")';
        	el.setAttribute('label', labelT);
        	el.setAttribute('tooltiptext', tooltiptextT);
    	}
    	else
    	if (Services.prefs.getBoolPref(boolPref) == true ) {
    		el.querySelector(cl).style.fill = iconColorF;
    		Services.prefs.setBoolPref(boolPref, false);
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconF + '")';
        	el.setAttribute('label', labelF);
        	el.setAttribute('tooltiptext', tooltiptextF);
    	}
    }
    });
    //----
    })();
    Alles anzeigen
  • Script für animierte Grafiken funktioniert ab FF 94 nicht mehr vollständig

    • Mitleser
    • 11. Januar 2025 um 00:58
    Zitat von Speravir

    Danke, sehr interessant. Kannst du das bitte im oben verlinkten Thread nochmal posten? Ich hätte einige kleinere Anmerkungen dazu, die thematisch nicht hierher gehören.

    Beitrag

    RE: Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    Speravir Als Sören Hentzschel die kommenden Änderungen an den Inline-Eventhandlern publiziert hat, habe ich angefangen einige Button-Scripte umzuschreiben, darunter auch einige Scripte die Userprefs betreffen
    (setIntPref/setBoolPref oder setCharPref). Bei mir befinden sich diese Buttons in einer zusätzlichen Seitenleiste am rechten Rand. Hier mein Script um den 'image.animation_mode' zu schalten. Aber ob das auch auf Nightly 136 läuft?

    Hier die Icons: icons.zip

    (Quelltext, 100 Zeilen)

    Mitleser
    10. Januar 2025 um 04:09
  • Div. Skripte funktionieren im aktuellem Nightly nicht mehr

    • Mitleser
    • 10. Januar 2025 um 04:09

    Speravir Als Sören Hentzschel die kommenden Änderungen an den Inline-Eventhandlern publiziert hat, habe ich angefangen einige Button-Scripte umzuschreiben, darunter auch einige Scripte die Userprefs betreffen
    (setIntPref/setBoolPref oder setCharPref). Bei mir befinden sich diese Buttons in einer zusätzlichen Seitenleiste am rechten Rand. Hier mein Script um den 'image.animation_mode' zu schalten. Aber ob das auch auf Nightly 136 läuft?

    Hier die Icons: icons.zip

    JavaScript
    // JavaScript Document
    // B_UserPrefAnimationMode.uc.js
    
    // Das Script erstellt einen Button, der in about:config character/string-Variablen ändert. In der UserConfiguration unter 'const charPref' kann die zu ändernde Einstellung festgelegt werden. Das icon/label/tooltiptext kann in der UserConfiguration dem jeweiligen Zustand angepasst werden (normal/once/none).
    // Für das mitgelieferte Icon als .svg-Datei mit [moz-context-properties] ändert das Script die Einstellung [svg.context-properties.content.enabled] in about:config auf 'true'.
    // In einem neuen Profil ist die Einstellung in about:config 'image.animation_mode, normal' gesetzt. Der Button schaltet per Linksklick einen Zustand weiter (von 'image.animation_mode, normal' auf 'once', von 'once' auf 'none' und von 'none' auf 'normal'. Beim Umschalten wird der Seiteninhalt des AKTIVEN Tabs neu geladen.
    
    (function() {
      if (!window.gBrowser)
    	return;
    // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    const id = 'UserPref-iA_m-button'; // Id des neuen Buttons
    const charPref = 'image.animation_mode'; // Einstellung in about:config deren character-Variable geschaltet werden soll
    const labelNorm = 'Normale Gifanimation (Schleife)'; // Bezeichnung des neuen Buttons bei charPref=normal
    const labelOnce = 'Einmalige Gifanimation'; // Bezeichnung des neuen Buttons bei charPref=once
    const labelNone = 'Keine Gifanimation'; // Bezeichnung des neuen Buttons bei charPref=none
    const ttTextNorm = 'Normale Gifanimation (Schleife)'; // Tooltiptext
    const ttTextOnce = 'Einmalige Gifanimation';
    const ttTextNone = 'Keine Gifanimation';
    // Icon-------------------------------------------------------
    const iconNorm = '16-control-panel-20_moz.svg';  // [Name.Dateiendung] des anzuzeigenden Symbols für charPref=normal
    const iconOnce = '16-control-panel-19_moz.svg';  // [Name.Dateiendung] des anzuzeigenden Symbols charPref=once
    const iconNone = '16-control-panel-18_moz.svg';  // [Name.Dateiendung] des anzuzeigenden Symbols für charPref=none
    //const bgImage = '#f9f9f9'; // Farbe des Indikators (zur Unterscheidung mehrerer UserPref-buttons)
    const iconPath = '/chrome/icons/'; // Pfad zum Ordner der das Icon beinhaltet
    const iconColNorm = 'forestgreen';  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties] für charPref=normal, bei anderen Icons hat const iconColNorm keine Funktion)
    const iconColOnce = 'goldenrod';  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties] für charPref=once, bei anderen Icons hat const iconColOnce keine Funktion)
    const iconColNone = 'firebrick';  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties] für charPref=none, bei anderen Icons hat const iconColNone keine Funktion)
    // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    const curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
    //----
    	if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
    		Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
    	}
    //----  
    CustomizableUI.createWidget({
        id: id,
        defaultArea: CustomizableUI.AREA_NAVBAR,
        onCreated: function(button) {
    		button.style.MozContextProperties = 'fill';
    //bgImage
    //		button.style = 'background-image:linear-gradient('+bgImage+','+bgImage+'); background-repeat: no-repeat; background-size: 4px 4px; background-position: left 2px top calc(50% - 8px);';
    	}
    });
    
    const el = document.getElementById(id);
    const cl = '.toolbarbutton-icon';
    //start
    if (Services.prefs.getCharPref(charPref) == 'normal' ) {
    		el.querySelector(cl).style.fill = iconColNorm;
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconNorm + '")';
        	el.setAttribute('label', labelNorm);
        	el.setAttribute('tooltiptext', ttTextNorm);
    }
    else
    if (Services.prefs.getCharPref(charPref) == 'once' ) {
    		el.querySelector(cl).style.fill = iconColOnce;
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconOnce + '")';
        	el.setAttribute('label', labelOnce);
        	el.setAttribute('tooltiptext', ttTextOnce);
    }
    else
    if (Services.prefs.getCharPref(charPref) == 'none' ) {
    		el.querySelector(cl).style.fill = iconColNone;
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconNone + '")';
        	el.setAttribute('label', labelNone);
        	el.setAttribute('tooltiptext', ttTextNone);
    }
    //click
    el.addEventListener('click', () => {
    if (event.button == 0) {
      BrowserCommands.reloadSkipCache();
    	if (Services.prefs.getCharPref(charPref) == 'normal' ) {
    		Services.prefs.setCharPref(charPref, 'once');
    		el.querySelector(cl).style.fill = iconColOnce;
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconOnce + '")';
        	el.setAttribute('label', labelOnce);
        	el.setAttribute('tooltiptext', ttTextOnce);
    	}
    	else
    	if (Services.prefs.getCharPref(charPref) == 'once' ) {
    		Services.prefs.setCharPref(charPref, 'none');
    		el.querySelector(cl).style.fill = iconColNone;
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconNone + '")';
        	el.setAttribute('label', labelNone);
        	el.setAttribute('tooltiptext', ttTextNone);
    	}
    	else
    	if (Services.prefs.getCharPref(charPref) == 'none' ) {
    		Services.prefs.setCharPref(charPref, 'normal');
    		el.querySelector(cl).style.fill = iconColNorm;
    		el.style.listStyleImage = 'url("' + curProfDir + iconPath + iconNorm + '")';
        	el.setAttribute('label', labelNorm);
        	el.setAttribute('tooltiptext', ttTextNorm);
    	}
    }
    });
    //----
    })();
    Alles anzeigen
  • Firefox Scrollbalken breiter machen

    • Mitleser
    • 24. Dezember 2024 um 16:42
    Zitat von Sören Hentzschel

    Daher auch das win im Optionsnamen - das steht für Windows. ;)

    Und ich dachte schon das würde für winner stehen :huh: !
    Frohe Weihnachten!

  • Firefox Scrollbalken breiter machen

    • Mitleser
    • 24. Dezember 2024 um 15:40
    Zitat von Mitleser

    Versuch es mal mit: widget.non-native-theme.scrollbar.size.override

    Zitat von Sören Hentzschel

    Damit diese Option berücksichtigt wird, muss zusätzlich widget.non-native-theme.win.scrollbar.use-system-size auf false gesetzt werden.

    Danke für die Info. Hier unter Linux mit widget.non-native-theme.scrollbar.style = 0 funktioniert widget.non-native-theme.scrollbar.size.override = n .

  • Firefox Scrollbalken breiter machen

    • Mitleser
    • 24. Dezember 2024 um 07:06

    Die Scrollbars sind ein eben ein komplexes Thema.

    Aus der Community FirefoxCSS auf Reddit
    Entdecke diesen Beitrag und mehr aus der Community FirefoxCSS
    www.reddit.com
  • Firefox Scrollbalken breiter machen

    • Mitleser
    • 24. Dezember 2024 um 05:59

    Versuch es mal mit: widget.non-native-theme.scrollbar.size.override

  • "ZDF heute" zu 20 Jahren Firefox

    • Mitleser
    • 9. November 2024 um 23:25

    Was meinst Du damit?

    Habe gerade mal ohne ublock in einem neuen Profil getestet....:/
    Da ist keine Werbung:) , sind keine Werbelinks...
    Oder meinst Du der Artikel ist eine gute Werbung für Firefox?

  • Daten synchronisieren vom PC auf USB-Stick

    • Mitleser
    • 2. November 2024 um 22:30
    Zitat von Luna-1

    schlingo,

    habe es verstanden. Werde es gleich erledigen.

    Danke!

    'Der Zuhörer ist ein schweigender Schmeichler' [Immanuel Kant]

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