Bin dann mal weg...
Beiträge von visoer
-
-
Das vielleicht, etwas umständlich, aber funzt?
JavaScript
Alles anzeigen(function ptbut() { // start customisation area---------------------------------- let startHeight = '22px'; // '0px' oder Hoehe der Leiste in px im Startzustand let Height = '22px'; // normal ist '22px' (Hoehe der Leiste im ausgeklappten Zustand). // ACHTUNG: es darf keine Höhe der Leiste in der css definiert sein. let autoCloseTime = 0; // 0 = kein Auto-Close / >0 Zeit in Millisekunden / 5000 => 5sec let buttonIcon = "16_checkbox-circle_white.svg" // Name & Dateiendung des anzuzeigenden Symbols let buttonPath = "chrome/css/image/" // Pfad zum Ordner der das Icon beinhaltet // end customisation area----------------------------------- let d2 = document.getElementById('PersonalToolbar'); let intervalID = 0; if (location.href !== 'chrome://browser/content/browser.xhtml') return; try { CustomizableUI.createWidget({ id: 'PersonalToolbar-button', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { let toolbaritem = aDocument.createXULElement('toolbarbutton'); let props = { id: 'PersonalToolbar-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', removable: true, label: 'PersonalToolbar on/off (Strg+y)', tooltiptext: 'PersonalToolbar on/off (Strg+y)', style: "list-style-image: url('" + PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)) + buttonPath + buttonIcon + "');", }; for(var p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); } catch(e) { }; //Tastenkombi Windows und Linux Möglichkeit 1 document.addEventListener('keydown', (event) => { let keyName = event.key; //STRG + y if (event.ctrlKey && keyName == 'y') { onClick(event); } }, false ); //Tastenkombi Windows und Linux Möglichkeit 2 document.addEventListener('keydown', (event) => { //AltGR + 1 let keyName = event.key; if (event.getModifierState("AltGraph") && keyName == '1') { onClick(event); } }, false ); document.getElementById('PersonalToolbar').style.minHeight = '0'; if( startHeight === Height || startHeight === '0px' ) { document.getElementById('PersonalToolbar').style.height = startHeight; } else { document.getElementById('PersonalToolbar').style.height = Height; } document.getElementById('PersonalToolbar-button').addEventListener( "click", onClick ); function onClick(aEvent) { if (event.button == 0) { if (d2.style.height == '') { d2.style.height = '0px'; } else if (d2.style.height == Height) { d2.style.height = '0px'; } else if(d2.style.height == '0px') { d2.style.height = Height; if(!intervalID && autoCloseTime) { intervalID = aEvent.target.ownerGlobal.setInterval( autoClose, autoCloseTime ); } } } else if (event.button == 1) { return; } else if (event.button == 2) { return; } } function autoClose() { if( intervalID ) { if( d2.style.height == Height) { d2.style.height = '0px'; clearInterval(intervalID); intervalID=0; } } } })();
-
Bingo!
Kann dann ja ohne weitere Überlegung einfach übernommen werden.
Lerneffekt?
-
Hier noch ein Tipp:
Die Position der Klammer ist falsch, sie muss nur nach unten verschoben werden.
Jetzt müsstest du es aber lösen können!
-
Klammerfehler Zeile 5.
Hier mal meine ähnliche etwas umfangreichere Lösung (mit einer Funktion auf Mittelclick) zum Vergleichen:
JavaScript
Alles anzeigen//----------------------------------------------- function onClick(aEvent) { let b2 = document.getElementById('PersonalToolbar-button'); if (event.button == 0) { if (d2.style.height == '') { d2.style.height = '0px'; b2.style.backgroundColor = '#72a572'; } else if (d2.style.height == Height) { d2.style.height = '0px'; b2.style.backgroundColor = '#72a572'; } else if(d2.style.height == '0px') { d2.style.height = Height; b2.style.backgroundColor = '#323232'; if(!intervalID && autoCloseTime) { intervalID = aEvent.target.ownerGlobal.setInterval( autoClose, autoCloseTime ); } } } else if (event.button == 1) { tabclick(); } else if (event.button == 2) { event.preventDefault(); event.stopPropagation(); return; } } //----------------------------------------------- function autoClose() {
-
Das wirst du wohl mit der replace-Methode machen müssen. Hier der Anfang von meiner Uhr als Beispiel:
JavaScript
Alles anzeigen(function() { function doDatClock() { var timestr = new Date().toLocaleDateString( locale , options ).replace(/[\,]/,' \u2011'); const blanks = '\u2013'; let i = timestr.lastIndexOf(' '); timestr = timestr.substring(0,i).replace(/[\,]/,' \u2011 ').replace(/[\.]/,'')+ ''+ timestr.substring(i+1).replace(/[\,]/,' \u2011 '); if( count == 1 ) { var counter = new Date( 2000 * sec ).toISOString().substr( 11 , 8 ).replace(/^[0:]+/, ''); timestr = timestr + ' 🕛️ ' + counter; sec++; } ClockLabel.setAttribute( 'value', timestr ); }
Aber vielleicht geht das auch ohne regex. Das müsste so sein:
die Position musst du ausprobieren.
-
Ein Fehler könnten die auskommentierten Zeilen 29+30 sein.Habe deine Vers. getestet, funzt tatsächlich bei mir auch nicht.Da muss noch irgendwo ein anderer Fehler in deinem Script stecken.Viel spaß bei der Suche, oder eben noch einmal ganz von vorne anfangen.So, nun habe ich selber einen Fehler gemacht und vergessen deinen Pfad zu ersetzen.
Bei mir funktioniert deine Version genauso wie meine! Ich tippe mal auf die Schreibweise des Namens des Icons?
-
Meine Version sieht so aus:
JavaScript
Alles anzeigen(function() { // start customisation area---------------------------------- let buttonIcon = "16synchronization-13yellow.svg" // Name & Dateiendung des anzuzeigenden Symbols let buttonPath = "chrome/css/image/" // Pfad zum Ordner der das Icon beinhaltet // end customisation area----------------------------------- if (location.href !== 'chrome://browser/content/browser.xhtml') return; CustomizableUI.createWidget({ id: 'addons-update-button', defaultArea: CustomizableUI.AREA_NAVBAR, label: 'Add-ons Update', tooltiptext: 'Add-ons aktualisieren', onCommand: onCommand, onCreated: function(button) { button.style.listStyleImage = "url('" + PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)) + buttonPath + buttonIcon + "')";} }); function onCommand(event) { let targetUpdateMessage=null; let categories=null; event.target.ownerGlobal.openTrustedLinkIn('about:addons', 'tab'); addEventListener('pageshow', function onPageshow(event) { let document = event.target; if (document.URL != 'about:addons') return; removeEventListener('pageshow', onPageshow); categories = document.getElementById('categories'); targetUpdateMessage = document.querySelector('#page-header .main-heading #updates-message'); const configObserver = { attributes: true }; const observerUpdateMessage = new MutationObserver(callback); observerUpdateMessage.observe(targetUpdateMessage, configObserver); document.querySelector('addon-page-options panel-item[action="check-for-updates"]').click(); }); const callback = (mutationList, observer) => { for (const mutation of mutationList) { if (mutation.type === 'attributes') { message = targetUpdateMessage.getAttribute('state'); if( message == "manual-updates-found" ) { setTimeout(function() { gBrowser.selectedTab.linkedBrowser.reload(); }, 1000); categories.querySelector('button[viewid="addons://updates/available"]').click(); return; } else if( message == "none-found" ) { //.. return; } else if( message == "installed" ) { document.querySelector('addon-page-options panel-item[action="view-recent-updates"]').click(); setTimeout(function() { categories.querySelector('button[viewid="addons://updates/recent"]').click(); }, 1000); return; } } } } }; })();
Vielleicht kannst du daraus etwas ableiten.
-
Zitat
ich vermute, es ist "mein" Script gemeint.
Ich habe noch Spekulatius von Weihnachten und würde die Kekse hier einsetzten. Mein Tipp ist: 80:20 für Andreas vs. Mira.
Steigt jemand ein?
Aber in jedem Fall zählt: The winner is nierewa.
-
Und hier noch eine Lösung mit der Tastenkombi AltGr+1:
JavaScript
Alles anzeigen(function ptbut() { let startHeight = '0px'; //'0px' oder Hoehe der Leiste in px im Startzustand let Height = '36px'; //normal ist '36px' (Hoehe der Leiste im ausgeklappten Zustand). // ACHTUNG: es darf keine Höhe der Leiste in der css definiert sein. let autoCloseTime = 0; // 0 = kein Auto-Close / >0 Zeit in Millisekunden /5000 => 5sec let intervalID = 0; let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); // Die Pfadangabe zu dem Profilordner let buttonicon = "beispiel.svg" // Name & Dateiendung des anzuzeigenden Symbols im Ordner: /chrome/css/image/ Pfad kann hier geändert werden: Zeile 25/26 let d2 = document.getElementById('PersonalToolbar'); if (location.href !== 'chrome://browser/content/browser.xul' && location.href !== 'chrome://browser/content/browser.xhtml') return; try { CustomizableUI.createWidget({ id: 'PersonalToolbar-button', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { let toolbaritem = aDocument.createXULElement('toolbarbutton'); let props = { id: 'PersonalToolbar-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', removable: true, label: 'PersonalToolbar on/off (AltGr+1)', tooltiptext: 'PersonalToolbar on/off (AltGr+1)', style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/css/image/" + buttonicon) +'");', }; for(var p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); CustomizableUI.registerToolbarNode(tb); } catch(e) { }; //Tastenkombi Windows und Linux document.addEventListener('keydown', (event) => { //AltGr + 1 let keyName = event.key; if (event.getModifierState("AltGraph") && keyName == '1') { onClick(); } }, false ); document.getElementById('PersonalToolbar').style.minHeight = '0'; if( startHeight === Height || startHeight === '0px' ) { document.getElementById('PersonalToolbar').style.height = startHeight; } else { document.getElementById('PersonalToolbar').style.height = Height; } document.getElementById('PersonalToolbar-button').addEventListener( "click", onClick ); function onClick(aEvent) { if (d2.style.height == '') { d2.style.height = '0px'; } else if (d2.style.height == Height) { d2.style.height = '0px'; } else if(d2.style.height == '0px') { d2.style.height = Height; if(!intervalID && autoCloseTime) { intervalID = aEvent.target.ownerGlobal.setInterval( autoClose, autoCloseTime ); } } } function autoClose() { if( intervalID ) { if( d2.style.height == Height) { d2.style.height = '0px'; clearInterval(intervalID); intervalID=0; } } } })();
-
Wer weiß schon woher die merkwürdigen Variablennamen d1 d2 oder die Funkktionsnamen ntbut/btbut kommen.
Dieser Namensgeber war sicherlich der Urheber des Ganzen.
Der Dank gebührt Allen, die daran beteiligt waren.
Für mich zählt nur das: Bis zum nächsten Update ist das Problem gelöst!
-
Ja, das habe ich bereits wieder gelöscht.
War überflüssig, kommt von diesem Relikt hier:
Code
Alles anzeigenfunction onClick(aEvent) { let b1 = document.getElementById('nav-bar-button'); if (d1.style.height == '') { d1.style.height = '0px'; b1.style.backgroundColor = '#72a572'; } else if (d1.style.height == '22px') { d1.style.height = '0px'; b1.style.backgroundColor = '#72a572'; } else if(d1.style.height == '0px') { d1.style.height = '22px'; b1.style.backgroundColor = '#323232';
Ein persönlicher Touch.
Danke fürs Testen und selbstverständlich für die tolle Leistung!
-
Ich habe mir mal die Freiheit genommen und diese tolle Arbeit zu einem Code zusammengefügt, vielleicht kann's ja jemand brauchen. Ob das allerdings noch mit dem Update auf 109 funktioniert, weiss ich nicht.
Für die PersonalToolbar:
Code
Alles anzeigen(function ptbut() { let startHeight = '0px'; //'0px' oder Hoehe der Leiste in px im Startzustand let Height = '22px'; //normal ist '36px' (Hoehe der Leiste im ausgeklappten Zustand). // ACHTUNG: es darf keine Höhe der Leiste in der css definiert sein. let autoCloseTime = 0; // 0 = kein Auto-Close / >0 Zeit in Millisekunden /5000 => 5sec let intervalID = 0; let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); // Die Pfadangabe zu dem Profilordner let buttonicon = "beispiel.svg" // Name & Dateiendung des anzuzeigenden Symbols im Ordner: /chrome/css/image/ Pfad kann hier geändert werden: Zeile 25/26 let d2 = document.getElementById('PersonalToolbar'); if (location.href !== 'chrome://browser/content/browser.xul' && location.href !== 'chrome://browser/content/browser.xhtml') return; try { CustomizableUI.createWidget({ id: 'PersonalToolbar-button', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { let toolbaritem = aDocument.createXULElement('toolbarbutton'); let props = { id: 'PersonalToolbar-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', removable: true, label: 'PersonalToolbar on/off (Strg+y)', tooltiptext: 'PersonalToolbar on/off (Strg+y)', style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/css/image/" + buttonicon) +'");', }; for(var p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); CustomizableUI.registerToolbarNode(tb); } catch(e) { }; // Tastenkombi Windows und Linux document.addEventListener('keydown', (event) => { var keyName = event.key; //STRG + y if (event.ctrlKey && keyName == 'y') { onClick(); } }, false ); document.getElementById('PersonalToolbar').style.minHeight = '0'; if( startHeight === Height || startHeight === '0px' ) { document.getElementById('PersonalToolbar').style.height = startHeight; } else { document.getElementById('PersonalToolbar').style.height = Height; } document.getElementById('PersonalToolbar-button').addEventListener( "click", onClick ); function onClick(aEvent) { if (d2.style.height == '') { d2.style.height = '0px'; } else if (d2.style.height == Height) { d2.style.height = '0px'; } else if(d2.style.height == '0px') { d2.style.height = Height; if(!intervalID && autoCloseTime) { intervalID = aEvent.target.ownerGlobal.setInterval( autoClose, autoCloseTime ); } } } function autoClose() { if( intervalID ) { if( d2.style.height == Height) { d2.style.height = '0px'; clearInterval(intervalID); intervalID=0; } } } })();
und hier für die nav-bar:
Code
Alles anzeigen(function nbbut() { let startHeight = '0px'; //'0px' oder Hoehe der Leiste in px im Startzustand let Height = '22px'; //normal ist '36px' (Hoehe der Leiste im ausgeklappten Zustand). // ACHTUNG: es darf keine Höhe der Leiste in der css definiert sein. let autoCloseTime = 0; // 0 = kein Auto-Close / >0 Zeit in Millisekunden /5000 => 5sec let intervalID = 0; let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); // Die Pfadangabe zu dem Profilordner let buttonicon = "beispiel.svg" // Name & Dateiendung des anzuzeigenden Symbols im Ordner: /chrome/css/image/ Pfad kann hier geändert werden: Zeile 25/26 let d1 = document.getElementById('nav-bar'); if (location.href !== 'chrome://browser/content/browser.xul' && location.href !== 'chrome://browser/content/browser.xhtml') return; try { CustomizableUI.createWidget({ id: 'nav-bar-button', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { let toolbaritem = aDocument.createXULElement('toolbarbutton'); let props = { id: 'nav-bar-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', removable: true, label: 'NavBar on/off (Strg+w)', tooltiptext: 'NavBar on/off (Strg+w)', style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/css/image/" + buttonicon) +'");', }; for(var p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); CustomizableUI.registerToolbarNode(tb); } catch(e) { }; // Tastenkombi Windows und Linux document.addEventListener('keydown', (event) => { var keyName = event.key; //STRG + w if (event.ctrlKey && keyName == 'w') { onClick(); } }, false ); document.getElementById('nav-bar').style.minHeight = '0'; if( startHeight === Height || startHeight === '0px' ) { document.getElementById('nav-bar').style.height = startHeight; } else { document.getElementById('nav-bar').style.height = Height; } document.getElementById('nav-bar-button').addEventListener( "click", onClick ); function onClick(aEvent) { if (d1.style.height == '') { d1.style.height = '0px'; } else if (d1.style.height == Height) { d1.style.height = '0px'; } else if(d1.style.height == '0px') { d1.style.height = Height; if(!intervalID && autoCloseTime) { intervalID = aEvent.target.ownerGlobal.setInterval( autoClose, autoCloseTime ); } } } function autoClose() { if( intervalID ) { if( d1.style.height == Height) { d1.style.height = '0px'; clearInterval(intervalID); intervalID=0; } } } })();
-
Deshalb habe ich genau diese Tastenkombi gewählt.
Weil es eine Konfrontation mit der firefoxeigen Kombi gibt.
Funktioniert bei mir auf Linux und Windows,
sollte eigentlich bei Tastenkombinationen, die anderweitig bereits "belegt" sind, keinen Event ergeben. Durch deinen Test bin ich wohl des Besseren belehrt worden. Danke für den Test!
-
Zitat
Du müsstest nur den Teil für die Tastenkombi irgendwie reinbasteln,
oder reinbasteln lassen.
Ich habe es probiert, bekomme es aber einfach nicht hin.
Bei deinem Script geht das bei mir so:
Code
Alles anzeigenCustomizableUI.registerToolbarNode(tb); } catch(e) { }; //----------BEGINN---------------------- // Funktion zum Abfragen der Tastatur ("belauscht" Eingaben) // Hinweis: Tasten, die anderweitig bereits "abgefangen" werden, ergeben keinen Event document.addEventListener('keydown', (event) => { var keyName = event.key; // Funktion wird ausgeführt, wenn STRG + w gedrückt wird if (event.ctrlKey && keyName == 'w') { onClick(); } }, false ); //----------ENDE------------------------ document.getElementById('nav-bar').style.minHeight = '0'; if( startHeight === '22px' || startHeight === '0px' ) {
-
Ich hatte das gleich Problem.
Es lag dann tatsächlich daran, dass im Startvorgang das Script zu schnell war, d.h. überschrieben wurde.
Es lag an d2.style.visibility = "collapse";
Geändert auf d2.style.visibility = "visible";
Dann ging es. Das ist natürlich keine Lösung, aber vielleicht ein Ansatz.
-
Ich habe ein ähnliches Problem.
Zumindest bei den Add-On-Buttons ging es bei mir so:
(width sollte evtl. angepasst werden)