Volltreffer, Dankeschön!
Beiträge von bege
-
-
milupo In dem Skript sind nur die Texte und ein paar Attribute anders, leider funktioniert es auch nicht.
So lange ist es auch nicht her, dass das Skript noch funktionierte, spätestens letztes Jahr habe ich es noch benutzt.
Die Fehlermeldung meckert konkret über Zeile 56. Vielleicht fällt Sören Hentzschel auf, was sich da geändert hat.
-
Dieses Skript lädt und installiert ein Skript von Github über das Fx-Kontextmenü. Ich habe es eine Weile nicht benutzt, deshalb weiß ich nicht, ab welcher Fx-Version es nicht mehr funktioniert.
Die Fehlerkonsole zeigt diesen Fehler:
Zitat22:50:54.338 Uncaught NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 0 [nsIFilePicker.init]
saveUCJS file:///C:/Users/bege/AppData/Roaming/Mozilla/Firefox/Profiles/487kit50.Quantum/chrome/JS/saveUCJS_lite.uc.js:56
onload file:///C:/Users/bege/AppData/Roaming/Mozilla/Firefox/Profiles/487kit50.Quantum/chrome/JS/saveUCJS_lite.uc.js:49
saveUCJS_lite.uc.js:56Was muss da geändert werden?
JSON: saveUCJS_lite.uc.js
Alles anzeigen// ==UserScript== // @name saveUCJS_lite.uc.js // @description GitHub Scripte Downloaden und Installieren // @charset UTF-8 // @include main // @note userChrome.js Update-Funktion entfernen // ==/UserScript== (function(){ "use strict"; // config Anfang true = ja / false = nein const skipDialogCxt = false // Speichern Dialog nicht anzeigen - übergehen const urgeRestart = true // Firefox Neustarten Aufforderung nach dem Runterladen anzeigen // config Ende const areaMenu = document.getElementById('contentAreaContextMenu'); const saveLink = document.getElementById('context-savelink'); const github = 'https://github.com/'; const sep = navigator.platform.indexOf('Win') != -1? '\\' : '/'; areaMenu.addEventListener('popupshowing', function(){ const _areaMenu = document.getElementById('ucjs_getUCJS_areamenu'); if(_areaMenu) this.removeChild(_areaMenu); if(!gBrowser.currentURI.spec.startsWith(github)) return; if((gBrowser.currentURI.spec + gContextMenu.linkURL).indexOf('blob') == -1) return; createMenu(gContextMenu.onLink? gContextMenu.linkURL : gBrowser.currentURI.spec); }, false); function createMenu(file){ const url = file.replace('/blob/', '/raw/'); const menu = document.createXULElement('menuitem'); menu.setAttribute('id', 'ucjs_getUCJS_areamenu'); menu.setAttribute('label',(gContextMenu.onLink? 'Link' : 'Seite') + ' als uc.js Script' + ' speichern'); menu.setAttribute('tooltiptext', 'als uc.js speichern'); menu.setAttribute('class', 'menuitem-iconic'); menu.setAttribute('style', 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANTSURBVHgBvVeNTdtAFH7vbCilUptuYFQihUhNzQQJEzSZoGSChgkIEwATNJ0AmICM4ISKWCKoHiGtVDUCn1/v2cRx4nNIcNRPgpzvnd/fvT8jLAnLsgrGVqEOQlaR0AYECwgKIRFhpNYeITkQYFeOf195njdahi8+K7hUsgzcaCPi51jgElDKdGTweOK5rgcvUYAtNl+/PVbLFuSBoDP/j3Hiec5oaQUiqzevFdGCNYAAPEkPBzpviPmNYrlsr1M4g3kxz2KxbGtoU6zb8nnoPBF7IIzyOeH8gvp/Gf2uCJUZRNRRK2e6FXnCsuxCSgEOuJTlBO3h4KZxP+jvKGbNWBFOu5AxdeO/aO9JMBwOb/vv792bJlBwNKsXWOYbeZx4jlxv4ubPlBG+2L+7c2ILLFtpPh4XslLLKtkWjGGUjHjeMzFI8fbpYYf5mPzAea5j+GjATOp4Tsg4s8B4ruPBkjDEBnuhKdgqBPyiPQSyBjlhZgS0qqZ1jgVhjGVddyCMWDC6kBP+FjgZQaxKu6wLFQU10GvQXsWlWeBrQwqaeqqoClXjP+lIciyuYE0Yuj+mWZIACrI5Da15Arssq3bngAdpQZZYpcPlApHOoIKA/wVEraFCezdhZbbX6xkCW7M7Yg94uvPGtqzCmrBbsmtaAoInKICelkY5B5EECOWhdj9AR0TNRKtCbXevkluJ4l7la1alZdlCbhmXujh4wuluuXIMOYSrlD7LonOtCbvhh71KRy0iLQlOwukW8HTSnrkuKFedEYne0HW6sEho0bbBDKqEcJgReJEYws6922s+teNpywzrtqQjuW10zYfgOs0EL4eDXkPHdLf88UJdeB2WgE9ih0t9WAd4oQSfh+yVPmjgN+77fiAaqUZC8jyTa0DZtCQLJWvSZ+JCJF+JdkIYj2ctPiRJHPALPF4p5VphXc/AIlpCuCf/ivbkeW4otdXMFsRzIfq+mohuHVgBKnNooXBlULLLpr4LeCwPyLyIA1B94QhCJyDxS2Dw7m7QP3+JAmEgo2goe2YMyvgwmfVEEsNBH1dVQGf5BNpmxAd5EuaUhJzg+FF3vp813CzshkO33+Z0UUy+w7LgohaO5tjhd5UhrbXMFtwdeXx/9py6vlU66T98qp4a9HCubgAAAABJRU5ErkJggg==)'); menu.addEventListener('command', function(){getFile(url)}, false); areaMenu.insertBefore(menu, saveLink? saveLink : areaMenu.firstChild); } function getFile(url){ const title = url.split(/\//)[url.split(/\//).length -1] const date = new Date(); const stamp = '?' + date.getTime(); const xhr = new XMLHttpRequest(); xhr.responseType = ''; xhr.open('GET', url + stamp); xhr.send(); xhr.onload = function(){ saveUCJS(xhr.responseText, title) } } function saveUCJS(string, title){ if(!skipDialogCxt){ const fp =Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); fp.init(window, 'Select a File', Ci.nsIFilePicker.modeSave); fp.appendFilter('userChrome.js', '*.uc.js'); fp.displayDirectory = Services.dirsvc.get('UChrm', Ci.nsIFile); fp.defaultExtension = 'uc.js'; fp.defaultString = (title == 'userChrome.js.uc.js')? 'userChrome.js' : title; const result = fp.open(_saveUCJS); function _saveUCJS(result){ if (result == Ci.nsIFilePicker.returnOK || result == Ci.nsIFilePicker.returnReplace){ writeFile(fp.file, string) } } }else{ const aFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); const dir = Services.dirsvc.get('UChrm', Ci.nsIFile).path; const path = dir + sep +((title == 'userChrome.js.uc.js')? 'userChrome.js' : title); aFile.initWithPath(path); writeFile(aFile, string); } } function writeFile(file, string){ const charset = 'UTF-8'; const fileStream = Cc['@mozilla.org/network/file-output-stream;1'] .createInstance(Ci.nsIFileOutputStream); fileStream.init(file, 0x02 | 0x08 | 0x20, -1, 0); const converterStream = Cc['@mozilla.org/intl/converter-output-stream;1'] .createInstance(Ci.nsIConverterOutputStream); converterStream.init( fileStream, charset, string.length, Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER ); converterStream.writeString(string); converterStream.close(); fileStream.close(); setTimeout(function(){ if(urgeRestart && window.confirm('Downladen abgeschlossen. Möchten Sie Firefox sofort neu starten?')) Services.appinfo.invalidateCachesOnRestart() || Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); },100); } })()
-
Zur Information: Es gibt keine JSM-Module mehr (.jsm), nur noch ESM-Module (.sys.mjs). Letztere werden eben mit ChromeUtils.importESModule geladen.
Danke für die Info.
Du hast unterschiedliche Werte für id in den Zeilen 10 und 16. Bei mir sind die IDs identisch. Ich habe das Problem nicht. Es würde mich dann aber wundern, wenn das Problem vor Fx 126 nicht auftrat. Die Zeile mit removable: habe ich nicht.
Das wars, danke! Die Zeile mit removable scheint nichts zu bewirken.
Ich hatte den Button bisher nicht in Verwendung, nur die anderen Teile des Skripts. Deshalb ist es mir bisher nicht aufgefallen.
-
Der verschiebbare Neustart-Button im Skript RestartFirefox_plus.uc.js verschwindet bei mir im Fx 126.0 nach einem Neustart wieder von der Navigationsleiste zurück in die Sammlung der Buttons.
In anderen Skripten, wo das nicht passiert, fehlt mal die Zeile removable: false,, mal heißt sie removable: true,.
Aber beide Varianten ändern in diesem Skript nichts am Verschwinden des Buttons. Woran liegt das?
JavaScript: RestartFirefox_plus.uc.js
Alles anzeigen// RestartFirefox_plus.uc.js 2 (function() { if (location != 'chrome://browser/content/browser.xhtml') return; /* Movable Button */ try { CustomizableUI.createWidget({ id: 'restart-button', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton'); var props = { id: 'restartfirefox-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', removable: false, label: 'Neustart', tooltiptext: 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)', style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAEZ0FNQQAAsY58%2B1GTAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAN8SURBVHjaVJFNTBxlAIafb2Z29gd2l4VdYCkokAUt1AJplQRTrVqjUWMPPWHSCzb21IOn9qIHY2xMahoTTb00NmkUm5qAjdpUI61VaCxCpCVYixt%2ByvKzCwu7LDs7zMw3HmhM%2Bt6fJ0%2FyCp69wiOzZBCPcqSmIXg0HPHuC4R8nkLWyOXyYiIzfuVHzMIA%2BZsLtH18EApntUdhpzUSD5577nDLi%2FGWKjx%2BHVfR8HpFwNwsxTMzza%2BOXJ1%2B58Ev2sVEV%2ByEawXqxf8FllNWEQ9ePXzsqQOecIDU8jampSAVD76Al2BIIx4Dv2Nz7%2FYq%2B5%2BP8sNXE6WdAhdQlOM9rzUdaGiN8M9UjnKvQjzuA0UjV3AxDIcHywqRoEbXoVrKgyBtKXYEUvprmiN9oaoyvr9wl62NHJbtJeDzOo17YmprVzWOppLO2RRNwf1FSOzSUAXsCIR4QdP13UPfjhUde2mjuBXUjcXNEabOnJmq7Y4Nd7z1fu%2BJ%2FR2Jpgrm0jauAI8GlnSlBi4I0bO6sLBWHc9esxRdmjOZf5n%2B5CLWzCzOvsbKupBZ1xgmElUoC%2BgoKtRGQfNomoaND8P8XS%2Bby1olO7O6GHTl1DejGDOrNB%2BvpO7I%2Ba31%2FDP9Z28YUmqoqhCKcG2EYD6ZMUTojZ8WHmsqD%2BI6wnWFajugCkuuZaV%2FZS47wp99R7E3LbxPV6rtr7dV1pmyuBWs3hr7dZ380LC2tzseffvUHm86C1JC2A%2FrGcn509cn%2BPvTk9ibc1R06qL91Ms1CadF000ll9rVS2VykLzVr0lHOgtpuJ9yUFyXxqhKZjbH2nJRI9IZwyw2kXjvXV%2FIOWgaBcc2a%2BtjdVXR1J3iBDx8QUpQUJAuJJclseogxz441H5vrPO72cm0VSyVPJq27ZaHm8ST3Y0M9d9Kkr19A1A1x4VIObTGBfNrsJ5XmE9b6KqgvrOGhr1Vns2sgeNIkXiigvHf1liZuHWZYjINSEXRVLewZjN6bYmYbvN4rcDvVzFKLnOpErMLBpvbklClznyyyPDA6DjTX3wJWICr%2Bnb3ffjXSGpl5Nxnn88uh2ORUCBaHfVQU%2BsjVuGhKqJT5lFYShr8fGH4j42bH53EnJ4EtgEEPQOTzHx9mqXLl9AT9TS82RvreOmVcMTXVh4JhIr5kp3LFu6u3Lk%2ByMylQazU3ENYAvw3AFUTimFqj5i7AAAAAElFTkSuQmCC)', onclick: 'if (event.button == 0) { \ Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \ }; \ if (event.button == 1 || event.button == 2) { \ Services.appinfo.invalidateCachesOnRestart(); \ Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \ };' }; for (var p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); CustomizableUI.registerToolbarNode(tb); } catch(e) { }; /* File Menu */ var menuitem = document.createXULElement('menuitem'); var props = { id: 'restartfirefox-fileMenu', class: 'menuitem-iconic', label: 'Neustart', tooltiptext: 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)', style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAEZ0FNQQAAsY58%2B1GTAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAN8SURBVHjaVJFNTBxlAIafb2Z29gd2l4VdYCkokAUt1AJplQRTrVqjUWMPPWHSCzb21IOn9qIHY2xMahoTTb00NmkUm5qAjdpUI61VaCxCpCVYixt%2ByvKzCwu7LDs7zMw3HmhM%2Bt6fJ0%2FyCp69wiOzZBCPcqSmIXg0HPHuC4R8nkLWyOXyYiIzfuVHzMIA%2BZsLtH18EApntUdhpzUSD5577nDLi%2FGWKjx%2BHVfR8HpFwNwsxTMzza%2BOXJ1%2B58Ev2sVEV%2ByEawXqxf8FllNWEQ9ePXzsqQOecIDU8jampSAVD76Al2BIIx4Dv2Nz7%2FYq%2B5%2BP8sNXE6WdAhdQlOM9rzUdaGiN8M9UjnKvQjzuA0UjV3AxDIcHywqRoEbXoVrKgyBtKXYEUvprmiN9oaoyvr9wl62NHJbtJeDzOo17YmprVzWOppLO2RRNwf1FSOzSUAXsCIR4QdP13UPfjhUde2mjuBXUjcXNEabOnJmq7Y4Nd7z1fu%2BJ%2FR2Jpgrm0jauAI8GlnSlBi4I0bO6sLBWHc9esxRdmjOZf5n%2B5CLWzCzOvsbKupBZ1xgmElUoC%2BgoKtRGQfNomoaND8P8XS%2Bby1olO7O6GHTl1DejGDOrNB%2BvpO7I%2Ba31%2FDP9Z28YUmqoqhCKcG2EYD6ZMUTojZ8WHmsqD%2BI6wnWFajugCkuuZaV%2FZS47wp99R7E3LbxPV6rtr7dV1pmyuBWs3hr7dZ380LC2tzseffvUHm86C1JC2A%2FrGcn509cn%2BPvTk9ibc1R06qL91Ms1CadF000ll9rVS2VykLzVr0lHOgtpuJ9yUFyXxqhKZjbH2nJRI9IZwyw2kXjvXV%2FIOWgaBcc2a%2BtjdVXR1J3iBDx8QUpQUJAuJJclseogxz441H5vrPO72cm0VSyVPJq27ZaHm8ST3Y0M9d9Kkr19A1A1x4VIObTGBfNrsJ5XmE9b6KqgvrOGhr1Vns2sgeNIkXiigvHf1liZuHWZYjINSEXRVLewZjN6bYmYbvN4rcDvVzFKLnOpErMLBpvbklClznyyyPDA6DjTX3wJWICr%2Bnb3ffjXSGpl5Nxnn88uh2ORUCBaHfVQU%2BsjVuGhKqJT5lFYShr8fGH4j42bH53EnJ4EtgEEPQOTzHx9mqXLl9AT9TS82RvreOmVcMTXVh4JhIr5kp3LFu6u3Lk%2ByMylQazU3ENYAvw3AFUTimFqj5i7AAAAAElFTkSuQmCC)', onclick: 'if (event.button == 0) { \ Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \ }; \ if (event.button == 1 || event.button == 2) { \ Services.appinfo.invalidateCachesOnRestart(); \ Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \ };' }; for (var p in props) menuitem.setAttribute(p, props[p]); document.getElementById('menu_FilePopup').insertBefore(menuitem, document.getElementById('menu_FileQuitItem')); /* App (Hamburger) Menu */ // (function() { var menuitem = document.createXULElement('toolbarbutton'); menuitem.id = 'restartfirefox-appMenu'; menuitem.classList.add('subviewbutton', 'subviewbutton-iconic'); menuitem.setAttribute('label' , 'Neustart'); menuitem.setAttribute('tooltiptext' , 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)'); menuitem.style.listStyleImage= 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAEZ0FNQQAAsY58%2B1GTAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAN8SURBVHjaVJFNTBxlAIafb2Z29gd2l4VdYCkokAUt1AJplQRTrVqjUWMPPWHSCzb21IOn9qIHY2xMahoTTb00NmkUm5qAjdpUI61VaCxCpCVYixt%2ByvKzCwu7LDs7zMw3HmhM%2Bt6fJ0%2FyCp69wiOzZBCPcqSmIXg0HPHuC4R8nkLWyOXyYiIzfuVHzMIA%2BZsLtH18EApntUdhpzUSD5577nDLi%2FGWKjx%2BHVfR8HpFwNwsxTMzza%2BOXJ1%2B58Ev2sVEV%2ByEawXqxf8FllNWEQ9ePXzsqQOecIDU8jampSAVD76Al2BIIx4Dv2Nz7%2FYq%2B5%2BP8sNXE6WdAhdQlOM9rzUdaGiN8M9UjnKvQjzuA0UjV3AxDIcHywqRoEbXoVrKgyBtKXYEUvprmiN9oaoyvr9wl62NHJbtJeDzOo17YmprVzWOppLO2RRNwf1FSOzSUAXsCIR4QdP13UPfjhUde2mjuBXUjcXNEabOnJmq7Y4Nd7z1fu%2BJ%2FR2Jpgrm0jauAI8GlnSlBi4I0bO6sLBWHc9esxRdmjOZf5n%2B5CLWzCzOvsbKupBZ1xgmElUoC%2BgoKtRGQfNomoaND8P8XS%2Bby1olO7O6GHTl1DejGDOrNB%2BvpO7I%2Ba31%2FDP9Z28YUmqoqhCKcG2EYD6ZMUTojZ8WHmsqD%2BI6wnWFajugCkuuZaV%2FZS47wp99R7E3LbxPV6rtr7dV1pmyuBWs3hr7dZ380LC2tzseffvUHm86C1JC2A%2FrGcn509cn%2BPvTk9ibc1R06qL91Ms1CadF000ll9rVS2VykLzVr0lHOgtpuJ9yUFyXxqhKZjbH2nJRI9IZwyw2kXjvXV%2FIOWgaBcc2a%2BtjdVXR1J3iBDx8QUpQUJAuJJclseogxz441H5vrPO72cm0VSyVPJq27ZaHm8ST3Y0M9d9Kkr19A1A1x4VIObTGBfNrsJ5XmE9b6KqgvrOGhr1Vns2sgeNIkXiigvHf1liZuHWZYjINSEXRVLewZjN6bYmYbvN4rcDvVzFKLnOpErMLBpvbklClznyyyPDA6DjTX3wJWICr%2Bnb3ffjXSGpl5Nxnn88uh2ORUCBaHfVQU%2BsjVuGhKqJT5lFYShr8fGH4j42bH53EnJ4EtgEEPQOTzHx9mqXLl9AT9TS82RvreOmVcMTXVh4JhIr5kp3LFu6u3Lk%2ByMylQazU3ENYAvw3AFUTimFqj5i7AAAAAElFTkSuQmCC)', menuitem.setAttribute('onclick', 'if (event.button == 0) { \ Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \ }; \ if (event.button == 1 || event.button == 2) { \ Services.appinfo.invalidateCachesOnRestart(); \ Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \ };'); var refItem = document.getElementById('appMenu-viewCache').content.getElementById('appMenu-quit-button2'); refItem.parentNode.insertBefore(menuitem, refItem); // })(); })();
bege Schau Dir mal Zeile 38 an.
Da fehlt meiner Meinung nach etwas.
Müsste glaube ich so sein:
var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager.js');Mfg.
EndorDas funktioniert komischerweise mit und ohne ".js". Seltsam. Aber es funktioniert.
-
Mit Fx 126.0 funktionierte bei mir das Skript browsertoolbox.uc.js nicht mehr richtig. Das Skript stammt von Endor , es erstellt einen Button zum Öffnen der Browser-Werkzeuge. Es wurde von von aborix und mir um die Funktionen Neustart und Fehlerkonsole ergänzt.
Was nicht mehr funktionierte, war das Öffnen der Browser-Werkzeuge. In einem Skript von aminomancer, wo das funktioniert, habe ich gesehen, dass Loader.jsm und Launcher.jsm dort Loader.sys.mjs und Launcher.sys.mjs heißen und ChromeUtils.import wird zu ChromeUtils.importESModule. Jetzt funktioniert auch diese Funktion wieder.
JavaScript: browsertoolbox.uc.js
Alles anzeigen// browsertoolbox.uc.js // Ursprünglich von Endor, ergänzt von aborix und bege (alle camp-firefox.de Forum) (function() { if (location != 'chrome://browser/content/browser.xhtml') return; /* Movable Button */ try { CustomizableUI.createWidget({ id: 'browser-toolbox-button', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton'); var props = { id: 'browser-toolbox-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', label: 'Browser-Werkzeuge', tooltiptext: 'Linksklick: Browser-Werkzeuge\nStrg+Linksklick: Fehlerkonsole\nMittelklick: Neustart (Cache leeren)', style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdUlEQVQokZVSwRHAIAgLPYfoXs7RCTpG53Avt7APrhaFU8gLMEEJAkEQgFbc7IxkVjt0r6Sp7VIVITumBpKt00FA2ThmjXzkfMMWO8EZFSj8LrUyjsG9b9DaJXq+qAIVxEUxtLHpaXE95dj1NcK2rmbwaGJ4Af0tIg00j/6iAAAAAElFTkSuQmCC)', // oncommand: '(' + onCommand.toString() + ')()', onclick: '(' + onClick.toString() + ')()' }; for (var p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); CustomizableUI.registerToolbarNode(tb); } catch(e) { }; function onClick() { if (event.button == 0) { if (event.ctrlKey) { var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {}); var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager'); BrowserConsoleManager.openBrowserConsoleOrFocus(); event.preventDefault(); event.stopPropagation(); } else { var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {}); var { BrowserToolboxLauncher } = require('resource://devtools/client/framework/browser-toolbox/Launcher.sys.mjs'); BrowserToolboxLauncher.init(); } } else if (event.button == 1) { Services.appinfo.invalidateCachesOnRestart(); Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); }; }; })();
-
Vieleicht wars das schon?
Super, vielen Dank. Ich vermute, dass in deinem Beitrag etwas mit den Zeilen 75 und 78 durcheinandergekommen ist. Damit auch ausschalten funktioniert muss Zeile 78 heißen setPref('none');
Jetzt klappt alles!
JavaScript
Alles anzeigen// 28_AnimationToggleButton.uc.js // v. 0.4.2 // 211104: BrokenHeart zuletzt in: // https://www.camp-firefox.de/forum/thema/133649 (function() { if (location != 'chrome://browser/content/browser.xhtml') return; try { CustomizableUI.createWidget({ id: 'animation-button', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { var button = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton'); var attributes = { id: 'animation-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', removable: 'true', label: 'Animation', tooltiptext: 'Klick li: Gif ∞\nKlick mi: Gif 1x \nKlick re: Gif aus', oncontextmenu: 'return false' }; for (var a in attributes) button.setAttribute(a, attributes[a]); var animmode = Services.prefs.getCharPref('image.animation_mode'); button.setAttribute('anim', animmode); button.IsOnce = (animmode == 'once'); function onClick() { var button = document.getElementById('animation-button'); function setPref(value) { Services.prefs.setCharPref('image.animation_mode', value); }; function getPref() { return Services.prefs.getCharPref('image.animation_mode'); }; function setIsOnce(value) { var windows = Services.wm.getEnumerator('navigator:browser'); while (windows.hasMoreElements()) { windows.getNext().document.getElementById('animation-button').IsOnce = value; }; }; switch (event.button) { case 0: var animmode = getPref(); setPref('normal'); if (button.IsOnce) { BrowserCommands.reloadSkipCache(); setIsOnce(false); } else { if (animmode == 'normal') BrowserCommands.reloadSkipCache(); else BrowserCommands.reload(); }; break; case 1: setPref('once'); BrowserCommands.reloadSkipCache(); setIsOnce(true); break; case 2: setPref('none'); event.preventDefault(); event.stopPropagation(); BrowserCommands.reload(); break; }; var windows = Services.wm.getEnumerator('navigator:browser'); while (windows.hasMoreElements()) { windows.getNext().document.getElementById('animation-button').setAttribute('anim', getPref()); }; }; button.setAttribute('onclick', '(' + onClick.toString() + ')();'); return button; } }); } catch(e) { }; var css = '#animation-button[anim="normal"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAoCAYAAAC4h3lxAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4wkNFRE2JfCuMgAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAS6SURBVFjD7ZnNTxtHFMDfm7ENtbGxoV7b2A4gATZ2VEybCyAB5d4qUntLBZcI5dQ/oKcee4l6qBRFgTYqaUqjSFS5tVUrIEJCjQqYDxmIAwUMCV+GxMYfLDs7PQQQjhcKxY03Up60WntmZ/b93pdmdhAAoK2tTQCA9yRJsgEAgoqEUvoCEWc7Ojoet7e3Z/Vjc3Ozh1J6GRE5qFdQluXxgYGBXzjPVFODiB8dKM8Z13JQFwchRAIEjojvNzU1TQHAcgYApZQAAGxXbFeEykKdnHOqJgB30v1H+Xj5b4go6XQ6dxbAwY+UMVWyq92laoudOI9XHg2lzs5OGg6HWX9//0sPwRsmc3Nz1xHxbltbW22GB5REz/TbzhfOP43bxiWOnMRKYhXLpuWGXbJryGdhQkQPANxsaWm5ciyARbRs+Cf8t3QJXeywLWIJWy3WyUnf5NWEJmHME8D2/t2AiJ8dG0LV4ep7R5U/9Mq2frU6Uv1zvsxvsVi+OkwIRJsigDVtjRRtFkWOm6RkoWTasGeI/0cdzlWnrVarCADssMwqPaRj2ZbPLM7ACliBdNaXl+2UhS+FL32t4Zp4rjyiCCBS0XSipWSgIhU1Z1I+WTbtGfPcNj01rdXP1d/IFYQiwGbhpjNpSTqPG/T8wvOaHe3OqZPYkXTM1vxV8yPKyAAAjCvGrcBcoCsXEEQ5SDkJe8KfSoVS0at9aWP63XB5+PKplU845r0j3h7CiXi03bRiWgvMB7oop4nzABwbBtGCqDP4QfCaa8v1sChaFOGE03hp/MKSZenDJE2aTjO5PWV/7B3zfo8yKuaLadm0Vo/1N4OVwWsSSoacAgAAxDQxa0gIfQLC2Se2p+xPvCPeH5DhicluipjW66CuO1gZvMqQGXISQucVW9K26B313iaM7J7m+eJI8dPAQqCLcpp8HQAn1nFb2vakdqy2m0jkTGW2eKn4WWAxcIsCTf1vAAgoX1y92ONOuEeV+oW0MO8d8d4hUmbCnhpisfhZ3d9131Kg6ZwDIKDsX/X3CLNCqGqk6r57xz2RoXxKWPKN+r6j0ulfriTmJXOkJlrzIKcACCj71/x3hFlhBgAAOcpVo1W9roRrEgBA2BWe1I7VdpE9speT5SajYk6q0IHyvjVfrzAjhDLaOcrVI9W9er8+4ph1PKJ7VIQ8yL8ByL51X69txjahCMeRuaZcg3ndM59Ubfwb/l7btG1SzTu0Yz3g2/Dds4WULa+qrxaK65eUY8oesgffhD2yIgDhhJ9346GGHIC3APlK4rQm/c5mzaYzbx+zDHH7uQCiumhV1BH9/G0IvaYQIgAgG7eMa85C54Taqo95xzx75G/WEl3DGItRSouMK8YVz4rnrlotzTlHURQXsks+5/dlWWZqDhPOOTLGfh8aGlrP8sDg4OBGY2PjjYKCglqNRmPknBOVKb+TTqcXh4eH15UXlK8c2TQ0NLj0ev2XL8fySDwe75YkSTV5YTabKwkh3wAAl2X5YRYAIkJra+uvhJDSfQuo6tBj/zhMBgBgjF0nCi4DrVb7BQCI+wOYmq4D5QHgkVar/SnLAwdeaG5udlNKPwaASs65ao5eCSExSZLGS0tLH/T19fF/AGeo9vFEBn4KAAAAAElFTkSuQmCC)} ' + '#animation-button[anim="once"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAoCAYAAAC4h3lxAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4wkNFQw22pzCLgAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAATOSURBVFjD7VlvTFtVFD/3vtcWWlpAUkrbDazQkWkilfhl+zAahARNZjIT9QMzkS8EPm+wADMxWdRhsk842cYgbsbExWRqBkMGCwrbPpBsisi/V9rCZsBoHGwPKO277x0/sJqxviKVah/Gk7y89+7Nve/8zvmdc++5jwAAVFRUFCPia4wxGyIS0JDwPC9SSr8tLS0daG1tjeknXq/XSyn9EAAoaFcIIn4RDAZPBoPBjQAB4J2o8owhRdSW5jxPkBBAAHjT5XL1AMDYhn5KaSYAwMGDa7o3XheeB9AWgqkpx/x771sXCCEyIr4YAyD6UPhM2GQyMc1xx+FYsQBYF6JUqq2t5Xw+nzw4OAigcd6rit/vP0UI+ay8vHzvBg+oyeqqMXT7tm1+YiJNIgRYScmq2eP5xWkwhPkUYuAIIcUAcKasrKw6riL375sjJ064/HN3+XC07Zu+9LCnxBw6csRfZDKFUgVi8dHdRAg5HJdC5zryA48rH5UfRvUrly4VBFJl/uzs7JN/5lZCbKoA5heeEkdGDCvxJvnyK+OyKKb/zYgn20pzVqs1AgBy9F0VwFqI3/QjOh0ooRCf8Io9Pu4Ya2t77nvG9OGkrRNqjQYD21Q5SQKalsYSsuTkpHO05bgtQilQjtszUVsrPMvzEcN2AVD13LuY4fFETPEGvfJyyGixbD2Ip6acPzY15zJK1783cF2vdHS4p5PhCVUAhCCpq7tXYMuV9U/2FRUyQ3X13YIEVtKJ5hZbhNKNTu0fMEidne5pxvSRpFMIACDX+iC9tTVQeOuW7eexnwwSAaJ4PCH9/v0Lu4zG1fStTC4IzvGmZluIEFClZN81g0Q592TN28Jenpf0SQUAAGCxiMaqKnFPVVXiE/tmHJONx3JDlMKm8dTba2AE3EJNja+Y4yRdUii0XfHN2H0NDXkipWRLmepqb1r4kwvuKVnWSSkH4A84phsa7EuUApfIuJ6etMiFi4mDSAgAIsHuHve0IOTdV+sPBOy+o0fzxGi2SVS6u9MiFz8tEmSZZ/8AAIJXr7qFri7zcstx+6zgsy1tVD4v0NBoX4wXsFuVK1fS127cKJhLKgBEgr29Rb7OrowVAABZJtjS4gzMzNgeAADMztpnGo85fkdMjDZxd8EhiknJQlHl+/oK/R3nzeLj7bIM2NTsCNTXZRhPf2wREVNTW/B/RZtr/YX+cx2WB2q9skyUj05nLgNAyk4yNrVaf3+h/+xZy0MtV2hxPdA/UORvP6NueS2Jqgfm5qxL7e2WpZ1QI9M43CawQ2THnUr85wCoBrHZLMFbh0MpA5efv0a3BcBqXcw8dGjxhf8p9C9RiAAA3rmTvrJrt21RY2e7MD1t+e2x15gamlcUJUgpfXpoWC8NDTsDGja2IknSTTUKNSqK8lDjTEFZlj+oq6ubjd2tIUJlZWUmY+wlnuddGoyLX8Ph8HfDw8OziAj19fW8IAg3AYBTFGWY4BO/ZPbt27fLaDS+CwCIiPdEUTzPGNNMZGRlZbkopW0AgIqiDMUAIISA1+vto5TmrNcDyGnJHYQQBABlfcsjn6KxBQyCTqdrBoDIowGylq6o8gAwotPpPo/xQNQLBw4c2M1x3KsA4NLSr1dK6UPG2GhOTs7Xly9fxj8A10cIqTl/HS8AAAAASUVORK5CYII=)} ' + '#animation-button[anim="none"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAoCAYAAAC4h3lxAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4wkNFRMXW6/c7gAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAATFSURBVFjD7ZlfTFtVHMd/55z+Adrbv7fg5E9L/4hLpg/GkABJwcb4plnilhg18OBC9rQnn3wyZosQJXswIwzQRRBxWcbcMnSaEf6EhMiDjj9hQssmVMV20FG4QHu59x4fRgnQWwTajUviL2nannPPvb/P7/f9/dLTgwAAfD5fLgC8LAhCHgAgUJARQqIIocmampqp6urqpHnk9XpLCCEnEUIUlGtIkqSRvr6+O5Rud1OFEHoz4TxPqRqosjjUGAsIgCKEXqmoqBgHgD+3ARBCMADAO9Goo/Thw1oKQJQEEGbZnvqCgp8RQoJGoylMAkh8eD4Ws2QLAlGadiyrq8VbpVRbW0v8fr/Y29sLAAAYjphNT083IIQ6fD7f8W0ZkLN1jebxDMv+EtDrZwml2M1xjsL5+TLV+rruMBsTQqgEAJoqKyvfSwmwkpPz6LLH0+xXq5c2B41Gf6nFMvZuIHBGG48zhwTweONdhxB6P6WEbtntV7c5v2HD2dn/DBYW3jis8JvN5rrNgkAoTxYgyjDBAZ0umOomHSbT/ZhWu3xAH9Lq0zabjQcAMfFdFoCXifxW0wKIcZVK2O/DQ2az/3ZJyUWJkOVMZUQWQL2+btgtUjwA0QiCaj8Pmjeb79c5nVe6GSb0o8fTmCkIWQATx+WXrq7mp1p0Ohp9IXsfRbxgNk9eKC7+NoaQCABwW6+P/OB2t9AMQMgXMaX41OzsqQJB0O+ceikeZ6uCwZN7jrzJ9OCC09kWw5jfOt7NMKE7bneLhPFKOgApZcBwXP6Hk5Nn/TbbwIROF9RQSl7kuCJXOPyamucNe7l5xGSaqnO5vl5DSLZebjFMiHg8Ta8HAmexKOoyCgAAoF1bs52YnX37xEGatdEY+NTp/GYlhfMJu8EwYepytb4RCJxBkqTLjITStAWjcabe5brCYRzfy/XfGwx/33W7WyjGq88CYNc+vmg0Bj53uVqjGO+rzXYZDHM9Hk8zxXjtaQJIvzkcbSGW/VXWeYPhQb3T2b64o2D3atcZZq7H5fqSYhx7GgDSPYejrZllJ87b7ddCVuvoNs0bDLOfud1fLRISS0d+143G4FR+/s1MA0gjDkf7ZZb9HQBAQEg673B0hq3WMQCAJYMh0OB2t0QwXs9EDcUJ4TPShTadt9s7m1h2YuuggJD0icPReS4rK9iemzu8cEDZpGv/BSCN2e2dTTbbqNykiJB48dix/sPc4OwmITput3c22mxjSt6hpczAeFHR1UspIq8kk81AxGwev5Sbe+8o7JFlAaQn/xPRIwtwlOzIA8gWcRbPZ38QieQfllN5KyvPpQWg5zj3qxx37n8JPSMJYQCQJvX6kNliGVVa95ljmMmtv2CSAERRXCKE6Lt1ur+6nc4OpUaaUop4nv8jSUKU0muSJIlKlgmlFImieHdwcDCclIH+/v5H5eXljVqt9rhKpWIopVhhznOxWGxmaGgoLDePdh7ZlJWVFeTk5Hz8ZC0NLi8vtwqCoJi6MJlMxRjjLwCASpI0kASAEIKqqqqfMMbWjQgo6tBj4zhMAgAQRbEBy6QM1Gr1RwDAbywQlfRKOA8Aw2q1+rukDCSy4PV6CwkhbwFAMaVUMUevGOMlQRBGrFbrza6uLvovNfXp2AJLOUkAAAAASUVORK5CYII=)}'; var stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"'); document.insertBefore(stylesheet, document.documentElement); })();
-
Ich muss mal schauen, versprechen kann ich nichts.
🙏
-
Dann hätte ich mein Add-on ja vielleicht doch veröffentlichen sollen? Ich hatte bereits 2017 ein Add-on geschrieben, welches alle drei Modi unterstützt, aber nie auf AMO veröffentlicht.
Nachtrag: Funktioniert sogar noch! Auch wenn die Kontrollelemente um ein paar Pixel verrutscht sind.
Da mich vor allem die Funktion 1x interessiert, hätte ich das Add-on gern. Bei o.g. Skript funktioniert bei mir die Änderung des Buttons nicht richtig und beim Rechtsklick bleibt die Funktion 1x. Bei Links- und Mittelklick muss ich die Seite manuell neu laden.
-
Vermutlich hängt das mit 4K und dem DPI-Scaling zusammen, das wäre dann Sache von Firefox und nicht dem Script.
Ganz sicher, das betrifft hier andere, ältere Programme, aber alles andere im Firefox einschließlich aller anderen Skripte wird im Fx richtig angezeigt, wie oben schon erwähnt.
Du musst das Popup erst auswählen:
Das wusste ich, aber bei anderen Elementen kann man die dann anklicken, um sie im Inspektor zu "fixieren". Das geht bei diesem Menü nicht, es reagiert auf Klicks ganz normal. Auf deinen Hinweis hin habe ich es nochmal probiert und ohne Anklicken konnte ich die Elemente dann untersuchen.
Letztendlich musste ich an zwei Stellen schrauben:
CSShbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-iconic-left { transform: scale(.5) !important; max-height: 20px !important; } hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-accel-container { max-height: 18px !important; }
Das hätte ich ohne deine Hinweise nicht herausgefunden. Vielen Dank!
Das ganze Skript sieht jetzt so aus:
JavaScript: saveTo.uc.js
Alles anzeigen// ==UserScript== // @include chrome://mozapps/content/downloads/unknownContentType.xhtml // @charset UTF-8 // @version Fx104+ // ==/UserScript== (function () { const Cu = Components.utils; if (!window.FileUtils) Cu.import('resource://gre/modules/FileUtils.jsm'); setTimeout(function () { saveTo(); }, 200); function saveTo() { // Config const dirArray = [ ['F:\\Users\\bege\\Desktop', 'Desktop'], ['F:\\Downloads', 'Downloads'], ['F:\\Eigene Dateien\\Eigene Bilder\\Symbole', 'Symbole'], ['F:\\Users\\bege\\AppData\\Roaming\\Mozilla\\Firefox\\icons', 'Firefox\\Icons'], ['F:\\Setups\\Audio-Video', 'Setups\\Audio-Video'], ['F:\\Setups\\Dateiverwaltung', 'Setups\\Dateiverwaltung'], ['F:\\Setups\\Dateiverwaltung\\FreeCommander', 'Setups_FreeCommander'], ['F:\\Setups\\Editoren', 'Setups\\Editoren'], ['F:\\Setups\\Editoren\\Notepad++', 'Setups\\Notepad++'], ['F:\\Setups\\Grafik', 'Setups\\Grafik'], ['F:\\Setups\\Internet', 'Setups\\Internet'], ['F:\\Setups\\Sicherheit\\KeePass', 'Setups\\Sicherheit\\KeePass'], ['F:\\Setups\\Tools', 'Setups\\Tools'], ['F:\\Setups\\Tools\\W10', 'Setups\\Tools\\W10'], ['F:\\Setups\\Wartung', 'Setups\\Wartung'], ['F:\\Setups\\Wartung\\System u. Hardware', 'Setups\\Wartung\\System, Hardw.'], ['F:\\Eigene Dateien\\Eigene Bilder\\aktuelleDownloads', 'Bilder'], ['F:\\Eigene Dateien\\Eigene Musik\\aktuelleDownloads', 'Musik'], ['F:\\Eigene Dateien\\Eigene Videos\\aktuelleDownloads', 'Videos'], [FileUtils.getDir('UChrm', []).path, 'chrome'], [FileUtils.getDir('UChrm', ['CSS']).path, 'CSS'], [FileUtils.getDir('UChrm', ['JS']).path, 'JS'], ['C:\\', 'C:'], ['E:\\', 'E:'], ['F:\\', 'F:'], ['S:\\', 'S:'] ]; const button = document.getElementById('unknownContentType').getButton('cancel'); const saveTo = button.parentNode.insertBefore(document.createXULElement('button'), button); const saveToMenu = saveTo.appendChild(document.createXULElement('menupopup')); saveTo.classList.toggle('dialog-button'); saveTo.label = 'Speichern in…'; saveTo.type = 'menu'; const css =` hbox.dialog-button-box button.dialog-button menupopup { // color: white !important; background: #eeeeee !important; } hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic { padding-left: 8px !important; } hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic:hover { background: red !important; // color: white !important; } hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-iconic-left { transform: scale(.5) !important; max-height: 20px !important; } hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic label.menu-iconic-text { padding-right: 8px !important; } hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-accel-container { max-height: 18px !important; } `; const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService); const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css)); sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); dirArray.forEach(function (directory) { const [name, dir] = [directory[1], directory[0]]; const mi = document.createXULElement('menuitem'); const item = saveToMenu.appendChild(mi); item.setAttribute('label', (name || (dir.match(/[^\\/]+$/) || [dir])[0])); item.setAttribute('image', 'moz-icon:file:///' + dir + '\\'); item.setAttribute('class', 'menuitem-iconic'); item.addEventListener('command', function () { const locationtext = document.getElementById('locationtext'); const pathFile = dir + '\\' + (locationtext ? locationtext.value : document.getElementById('location').value); const file = new FileUtils.File(pathFile); dialog.mLauncher.saveDestinationAvailable(file); dialog.onCancel = function () {}; close(); }); }); } }());
-
Teste bitte mal, und pass dir evtl. die Werte in Zeile 56 noch an.
Dankeschön, da tut sich schon was. Die Symbole werden kleiner, aber der Zeilenabstand bleibt so groß. Wenn ich in Zeile 55 hbox.menu-iconic-left weglasse, wird auch die Schrift kleiner, der Zeilenabstand bleibt immer noch so groß.
Wenn die Werte gleich bleiben sollen, dann reicht auch:
transform: scale(.7) !important;
Was meinst du damit? Das steht doch so in deinem Vorschlag.
Ich konnte das Menü nicht mit dem Inspektor untersuchen. Gibt es einen Trick dafür?
-
Ich nutze schon lange das Skript saveTo.uc.js zur Erweiterung des Download-Popup mit einem Menü für voreingestellte Speicherorte. Nun habe ich ein Notebook mit 4k-Bildschirm, und da werden in diesem Skript die Symbole viel zu groß dargestellt. (Sonst sieht alles richtig aus im Fx.) Dadurch wird nicht das ganze Menü angezeigt und es kann auch nicht gescrollt werden.
Ich habe nicht herausgefunden, wie ich das Skript ändern muss, damit die Symbole in der richtigen Größe angezeigt werden. Kann mir jemand helfen?
Im Moment nutze ich das Skript ohne die Symbole (Zeile 82 auskommentiert).
JavaScript: saveTo.uc.js
Alles anzeigen// ==UserScript== // @include chrome://mozapps/content/downloads/unknownContentType.xhtml // @charset UTF-8 // @version Fx104+ // ==/UserScript== (function () { const Cu = Components.utils; if (!window.FileUtils) Cu.import('resource://gre/modules/FileUtils.jsm'); setTimeout(function () { saveTo(); }, 200); function saveTo() { // Config const dirArray = [ ['F:\\Users\\bege\\Desktop', 'Desktop'], ['F:\\Eigene Dateien\\DOWNLOADS', 'Downloads'], ['F:\\Eigene Dateien\\DriveOnWeb', 'DriveOnWeb'], ['F:\\Eigene Dateien\\Eigene Bilder\\Symbole', 'Symbole'], ['F:\\Users\\bege\\AppData\\Roaming\\Mozilla\\Firefox\\icons', 'Firefox\\Icons'], ['F:\\Setups\\Audio-Video', 'Setups\\Audio-Video'], ['F:\\Setups\\Dateiverwaltung', 'Setups\\Dateiverwaltung'], ['F:\\Setups\\Dateiverwaltung\\FreeCommander', 'Setups_FreeCommander'], ['F:\\Setups\\Editoren', 'Setups\\Editoren'], ['F:\\Setups\\Editoren\\Notepad++', 'Setups\\Notepad++'], ['F:\\Setups\\Editoren\\PSPad', 'Setups\\PSPad'], ['F:\\Setups\\Grafik', 'Setups\\Grafik'], ['F:\\Setups\\Internet', 'Setups\\Internet'], ['F:\\Setups\\Sicherheit\\KeePass', 'Setups\\Sicherheit\\KeePass'], ['F:\\Setups\\Tools', 'Setups\\Tools'], ['F:\\Setups\\Tools\\W10', 'Setups\\Tools\\W10'], ['F:\\Setups\\Wartung', 'Setups\\Wartung'], ['F:\\Setups\\Wartung\\System u. Hardware', 'Setups\\Wartung\\System, Hardw.'], ['F:\\Eigene Dateien\\Eigene Bilder\\aktuelleDownloads', 'Bilder'], ['F:\\Eigene Dateien\\Eigene Musik\\aktuelleDownloads', 'Musik'], ['F:\\Eigene Dateien\\Eigene Videos\\aktuelleDownloads', 'Videos'], [FileUtils.getDir('UChrm', []).path, 'chrome'], [FileUtils.getDir('UChrm', ['CSS']).path, 'CSS'], [FileUtils.getDir('UChrm', ['JS']).path, 'JS'], ['C:\\', 'C:'], ['E:\\', 'E:'], ['F:\\', 'F:'], ['S:\\', 'S:'] ]; const button = document.getElementById('unknownContentType').getButton('cancel'); const saveTo = button.parentNode.insertBefore(document.createXULElement('button'), button); const saveToMenu = saveTo.appendChild(document.createXULElement('menupopup')); saveTo.classList.toggle('dialog-button'); saveTo.label = 'Speichern in…'; saveTo.type = 'menu'; const css =` hbox.dialog-button-box button.dialog-button menupopup { // color: white !important; background: #eeeeee !important; } hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic:hover { background: red !important; // color: white !important; } hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-iconic-left { padding-left: 6px !important; margin-left: 1px !important; } hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic label.menu-iconic-text { padding-right: 5px !important; padding-left: 4px !important; } `; const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService); const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css)); sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); dirArray.forEach(function (directory) { const [name, dir] = [directory[1], directory[0]]; const mi = document.createXULElement('menuitem'); const item = saveToMenu.appendChild(mi); item.setAttribute('label', (name || (dir.match(/[^\\/]+$/) || [dir])[0])); item.setAttribute('image', 'moz-icon:file:///' + dir + '\\'); item.setAttribute('class', 'menuitem-iconic'); item.addEventListener('command', function () { const locationtext = document.getElementById('locationtext'); const pathFile = dir + '\\' + (locationtext ? locationtext.value : document.getElementById('location').value); const file = new FileUtils.File(pathFile); dialog.mLauncher.saveDestinationAvailable(file); dialog.onCancel = function () {}; close(); }); }); } }());
-
Wer sich also immer noch diese Funktion für dieses Forum wünscht, sollte sich überlegen, ob das unter diesen Voraussetzungen überhaupt noch gewünscht wird.
Danke für den neuen Anlauf, Sören. Genau das wünsche ich mir. Positive Bewertungen/Dankeschön statt den Post zu zitieren und "Danke" zu schreiben.
Würde jetzt jemand einen Beitrag schreiben, der nur einen Daumen nach oben oder unten beinhaltet und sonst gar nichts, ist das nicht so fein, weil das keinen Inhalt hat. Schon gar nicht, wenn das zehn Nutzer machen oder noch mehr. Das Thema wird unübersichtlich und es verursacht ja auch jedes Mal Benachrichtigungen über neue Beiträge.
Ich habe mich an die vielen Benachrichtigungen über neue Beiträge, die dann sinngemäß "Danke" und "Bitte" enthalten, gewöhnt, trägt ja auch zum meist freundlichen Ton hier im Forum bei, aber Likes ohne Benachrichtigung wären mir eindeutig lieber. Und wer trotzdem "Danke" und "Bitte" schreiben möchte, kann das ja auch weiterhin tun. Es geht ja nicht darum, etwas wegzunehmen, sondern um eine zusätzliche Möglichkeit der Reaktion.
-
Genial! Ist das für jedes Skript angepasst verwendbar, das einen nicht verschiebbaren Button hat?
-
Eine Info aus aktuellem Anlass
Danke für die Info. Da hatte ich ja Glück, dass ich meine riesige Lesezeichensammlung vor ein paar Wochen mit der Erweiterung durchleuchtet habe.
-
Ich war verreist und habe jetzt erst dieses Thema kurz überflogen. Ich weiß nicht, ob meine Version des Skriptes noch gebraucht wird, ich poste sie hier mal.
Ich habe alle Skripte im Unterordner "JS" (der muss natürlich auch in der userchrome.js stehen) und die CSS-Dateien im Unterordner "CSS".
In der Konfiguration des Skripts am Anfang kann man den Skript-Unterordner einstellen (Zeile 19) und drei CSS-Unterordner (ab Zeile 34).
Ich nutze im Moment nur einige der möglichen Funktionen, deshalb kann ich nicht sagen, ob alle in v115 funktionieren. Also die Konfiguration genau durchgehen und ausprobieren. Ich nutze es im aktuellen Fx 115.0.2 unter Windows 10.
JavaScript: extras_config_menu.uc.js
Alles anzeigen// ==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: 1, // 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();
-
-
Ich würde die Listen nicht dauerhaft deaktivieren. Im fortgeschrittenen Modus von uBlock (Einstellungen, ganz unten) kann man für jede Domain die Blockierungen detaillierter ein- und ausschalten. Damit kriege ich solche Probleme meist in den Griff.
Dass eine Seite gar nicht angezeigt wird, liegt hier manchmal auch am Filter bzw. der eigenen Erweiterung "I don't care about Cookies". Die muss ich dann für die Seite deaktivieren.
-
Hallo,
seit ein paar Tagen haben wir auf unseren Familien-PC's das Problem, dass manche websites gar nicht oder nur teilweise geöffnet werden oder es dauert extrem lange bis sie vollständig dargestellt werden. Das ist aber nicht bei allen websites so. Wir haben auf allen PC's den Cache und die Cookies gelöscht. Einen Speedcheck der Internetverbindung zeigt volle Geschwindigkeit (100 up, 40 down, ping 13ms). Kopiere ich die url wenn Firefox endlos lange benötigt und öffne sie z.B. in Chrome oder edge wird die Seite dort umgehend geladen während FF immer noch rödelt. Klickt man dann auf das X zum Abbruch des Ladens und danach auf Neuladen kann es sein, dass die Seite sofort aufgebaut wird oder eben wieder in die Warteschleife geht. Ich kann also keinen nachvollziehbaren Grund finden.
Gibt es die Probleme nur bei uns oder hat jemand dasselbe Problem?
Bei mir tritt das schon lange vor der Version 111 auf, ich habe nur die Windows-eigene Firewall und Virenschutz. Ich gehe davon aus, dass es an einer Fx-eigenen Datenschutzfunktion, einer oder mehreren Erweiterungen oder Kombinationen davon liegt. Ausführlich durchgetestet habe ich das bisher nicht.
-
aborix hatte mir ein Skript geschrieben, mit dem allen Menüeinträgen wieder die Class .menu-iconic oder .menuitem-iconic zugewiesen wurde.
Das Skript würde ich gerne mal testen...
JavaScript: addMenuClass_aborix.uc.js
Alles anzeigensetTimeout(function() { var ucjsAC = { init : function () { const menu = document.querySelectorAll('menu'); menu.forEach(query => query.classList.add('menu-iconic')); const menuitem = document.querySelectorAll('menuitem'); menuitem.forEach(query => query.classList.add('menuitem-iconic')); }, } ucjsAC.init(); }, 5000);
Das funktioniert nur für Menüeinträge, die beim Start des Fx vorhanden sind. Vereinzelt erstellen Erweiterungen sie erst später, da funktioniert es nicht.