1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. aborix

Beiträge von aborix

  • Der Glückwunsch-Thread

    • aborix
    • 9. August 2018 um 19:07

    Ebenfalls nachträglich Alles Gute! :)

  • Der Glückwunsch-Thread

    • aborix
    • 31. Juli 2018 um 18:01

    Alles Gute! :)

  • Firefox 61 Tableiste unten anzeigen ?

    • aborix
    • 30. Juli 2018 um 15:43

    Nimm folgenden Code anstatt der beiden aus dem ersten Beitrag:

    Code
    (function() {
    
    
    let tb = document.createElement('toolbar');
    tb.id = 'user-statusbar';
    tb.setAttribute('customizable', 'true');
    tb.setAttribute('mode', 'icons');
    tb.setAttribute('context', 'toolbar-context-menu');
    
    
    let vb  = document.createElement('vbox');
    vb.id = 'user-statusbar-vbox';
    let browserBottombox = document.getElementById('browser-bottombox');
    browserBottombox.parentNode.insertBefore(vb, browserBottombox);
    vb.appendChild(tb);
    
    
    CustomizableUI.registerArea('user-statusbar', {legacy: true});
    
    
    let tabbar = document.getElementById('TabsToolbar');
    vb.parentNode.insertBefore(tabbar, vb);
    
    
    })();
    Alles anzeigen
  • Neuen Tab mit nutzen

    • aborix
    • 29. Juli 2018 um 22:19

    Hallo,

    ich glaube, das kann man nicht einstellen.
    Aber es geht mit diesem Skript:

    Code
    (function() {
      if (location == 'chrome://browser/content/browser.xul') {  
        eval('PlacesUIUtils._openTabset = ' + PlacesUIUtils._openTabset.toString()
          .replace('replace: false', 'replace: isTabEmpty(browserWindow.gBrowser.selectedTab)'));      
      };  
    })();
  • Der Glückwunsch-Thread

    • aborix
    • 29. Juli 2018 um 15:39

    Alles Gute! :)

  • Der Glückwunsch-Thread

    • aborix
    • 27. Juli 2018 um 16:26

    Alles Gute! :)

  • Meldungen über Spam im Forum

    • aborix
    • 27. Juli 2018 um 07:02

    https://www.camp-firefox.de/forum/viewtopic.php?f=1&t=124923

  • In dieser Seite suchen - Leiste

    • aborix
    • 26. Juli 2018 um 15:52

    Allerdings ist in neuen Tabs der Fokus meistens in der Findbar, das will man ja nicht unbedingt.
    Im folgenden Skript nicht:

    Code
    (function() {
    
    
      if (location != 'chrome://browser/content/browser.xul')
        return;
    
    
      async function showFindbar() {
        await gBrowser.getFindBar();
        gFindBar.open();
      };
    
    
      showFindbar();
    
    
      gBrowser.tabContainer.addEventListener('TabSelect', function() {
        if (!gFindBarInitialized) {
          showFindbar();
        };
      });
    
    
    })();
    Alles anzeigen

    Die Animation beim erstmaligen Erscheinen der Findbar bekommt man über die userChrome.css weg:

    Code
    findbar {transition: none !important}

    Man kann die Findbar wie üblich manuell schliessen und dann wieder manuell öffnen.

  • In dieser Seite suchen - Leiste

    • aborix
    • 21. Juli 2018 um 18:00

    Testet mal:

    Code
    (function() {
    
    
      if (location != 'chrome://browser/content/browser.xul')
        return;
    
    
      gLazyFindCommand('onFindCommand');
    
    
      gBrowser.tabContainer.addEventListener('TabSelect', function() {
        if (!gFindBarInitialized) {
          gLazyFindCommand('onFindCommand');
        };
      });
    
    
    })();
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • aborix
    • 11. Juli 2018 um 17:29
    Zitat von Endor


    Eine Frage, ich habe im Script zweimal die Bezeichnung ucsepalator gesehen,
    Zeile 177 und Zeile 383 denke mal das sollte eigentlich ucseparator heißen oder was meinst Du?
    Habe ich jedenfalls bei beiden geändert.

    Ja, soll wahrscheinlich "ucseparator" heissen. Ist aber in diesem Fall egal, der Name muss nur in allen Vorkommnissen, und hier sind es nur die beiden, der gleiche sein.

    Zitat


    Nur zum besseren Verständnis welches ist eigentlich die aktuelle und richtige Schreibweise zbs:

    so

    Code
    let file = Services.io.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler).getFileFromURLSpec(fileURL);

    oder so

    Code
    let file = Services.io.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler).getFileFromURLSpec(fileURL);

    also (Ci.nsIFileProtocolHandler) oder (Components.interfaces.nsIFileProtocolHandler)
    oder ist das egal?

    'Components.interfaces', 'Components.classes' usw. sind immer richtig. 'Ci', 'Cc' usw. sind Abkürzungen dafür, die, je nach Kontext, funktionieren oder nicht. Wenn nicht, kann man sie als Abkürzungen definieren und dann verwenden.
    So auch im Skript in Zeile 40:

    Code
    let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;

    obwohl es hier auch ohne Definition geht.

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

    • aborix
    • 10. Juli 2018 um 23:46

    insertafter gibt es bei XUL-Overlays. Bei JavaScript gibt es das nicht, da kombiniert man insertBefore und nextSibling.

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

    • aborix
    • 10. Juli 2018 um 22:15
    Zitat von loshombre


    [...] geht hier das Menü nicht mehr automatisch auf. Muss jetzt erst auf die Maus hämmern

    Ich nehme mal an, du verwendest AutoPopup.uc.js. Dann schreibst du bei den WhiteIDs (ab Zeile 27) den Button dazu und es geht wieder:

    Code
    {
    		id: "usercssloader-menu",
    		popMemu: "usercssloader-menupopup",
    		run: null
    	},
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • aborix
    • 10. Juli 2018 um 21:57

    Mit insertBefore kann man den Button überall hinsetzen, egal ob er verschiebbar ist oder nicht. Z.B. für direkt rechts vom Hilfe-Menü:

    Code
    let refNode = $('helpMenu');
    		refNode.parentNode.insertBefore(cssmenu, refNode.nextSibling);

    einzufügen vor die Zeile

    Code
    $("mainKeyset").appendChild($C("key", {
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • aborix
    • 9. Juli 2018 um 22:20
    Zitat von Endor


    Frage, wir hatten in unserer Version auch die Möglichkeit, mit
    Mittelklick auf Schaltfläche CSS Stile oder Änderungen zu importieren.
    Auch war es möglich einen anderen Dateimanager zu definieren.

    Testet bitte das Skript mit folgender Änderung. Die Zeilennummern beziehen sich auf das unveränderte Skript. Die Schaltfläche ist verschiebbar, mit Mittelklick wird importiert und am Beginn des geänderten Teils kann man einen anderen Dateimanager festlegen.

    Die Zeilen 49 - 320:

    Code
    window.UCL = {
    	USE_UC: "UC" in window,
    	AGENT_SHEET: Ci.nsIStyleSheetService.AGENT_SHEET,
    			.
    			.
    			.
    	openFolder: function() {
    		this.FOLDER.launch();
    	},

    werden ersetzt durch

    Code
    window.UCL = {
    	// vFileManager: 'C:\\Programme\\totalcmd\\TOTALCMD.EXE',
    	vFileManager: '',
    	USE_UC: "UC" in window,
    	AGENT_SHEET: Ci.nsIStyleSheetService.AGENT_SHEET,
    	USER_SHEET : Ci.nsIStyleSheetService.USER_SHEET,
    	readCSS    : {},
    	get disabled_list() {
    		let obj = [];
    		try {
    			obj = this.prefs.getCharPref("disabled_list").split("|");
    		} catch(e) {}
    		delete this.disabled_list;
    		return this.disabled_list = obj;
    	},
    	get prefs() {
    		delete this.prefs;
    		return this.prefs = Services.prefs.getBranch("UserCSSLoader.")
    	},
    	get styleSheetServices(){
    		delete this.styleSheetServices;
    		return this.styleSheetServices = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
    	},
    	get FOLDER() {
    		let aFolder;
    		try {
    			// UserCSSLoader.FOLDER verwenden
    			let folderPath = this.prefs.getCharPref("FOLDER");
    			aFolder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile)
    			aFolder.initWithPath(folderPath);
    		} catch (e) {
    			aFolder = Services.dirsvc.get("UChrm", Ci.nsIFile);
    			aFolder.appendRelativePath("CSS");
    		}
    		if (!aFolder.exists() || !aFolder.isDirectory()) {
    			aFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 0664);
    		}
    		delete this.FOLDER;
    		return this.FOLDER = aFolder;
    	},
    	getFocusedWindow: function() {
    		let win = document.commandDispatcher.focusedWindow;
    		if (!win || win == window) win = content;
    		return win;
    	},
    
    
    	init: function() {
    		const cssmenu = $C("menu", {
    			id: "usercssloader-menu",
    			label: "CSS",
    			accesskey: "C",
    			onclick: "if (event.button == 1) UCL.rebuild()"
    		});
    		const menupopup = $C("menupopup", {
    			id: "usercssloader-menupopup"
    		});
    		cssmenu.appendChild(menupopup);
    
    
    		let menu = $C("menu", {
    			label: "Style Loader Menü",
    			accesskey: "M"
    		});
    		menupopup.appendChild(menu);
    		let mp = $C("menupopup", { id: "usercssloader-submenupopup" });
    		menu.appendChild(mp);
    		mp.appendChild($C("menuitem", {
    			label: "Styles importieren",
    			accesskey: "R",
    			acceltext: "Alt + R",
    			oncommand: "UCL.rebuild();"
    		}));
    		mp.appendChild($C("menuseparator"));
    		mp.appendChild($C("menuitem", {
    			label: "CSS Datei erstellen",
    			accesskey: "D",
    			oncommand: "UCL.create();"
    		}));
    		mp.appendChild($C("menuitem", {
    			label: "CSS Ordner öffnen",
    			accesskey: "O",
    			oncommand: "UCL.openFolder();"
    		}));
    		mp.appendChild($C("menuitem", {
    			label: "userChrome.css bearbeiten",
    			hidden: false,
    			oncommand: "UCL.editUserCSS(\'userChrome.css\');"
    		}));
    		mp.appendChild($C("menuitem", {
    			label: "userContent.css bearbeiten",
    			hidden: false,
    			oncommand: "UCL.editUserCSS(\'userContent.css\');"
    		}));
    		mp.appendChild($C("menuseparator"));
    		mp.appendChild($C("menuitem", {
    			label: "Style Test (Chrome)",
    			id: "usercssloader-test-chrome",
    			hidden: true,
    			accesskey: "C",
    			oncommand: "UCL.styleTest(window);"
    		}));
    		mp.appendChild($C("menuitem", {
    			label: "Style Test (Web)",
    			id: "usercssloader-test-content",
    			hidden: true,
    			accesskey: "W",
    			oncommand: "UCL.styleTest();"
    		}));
    		mp.appendChild($C("menuitem", {
    			label: "Styles dieser Seite auf userstyles.org finden",
    			accesskey: "S",
    			oncommand: "UCL.searchStyle();"
    		}));
    
    
    		menu = $C("menu", {
    			label: ".uc.css",
    			accesskey: "U",
    			hidden: !UCL.USE_UC
    		});
    		menupopup.appendChild(menu);
    		mp = $C("menupopup", { id: "usercssloader-ucmenupopup" });
    		menu.appendChild(mp);
    		mp.appendChild($C("menuitem", {
    			label: "Importieren(.uc.js)",
    			oncommand: "UCL.UCrebuild();"
    		}));
    		mp.appendChild($C("menuseparator", { id: "usercssloader-ucsepalator" }));
    
    
    		CustomizableUI.createWidget({
    			id: 'usercssloader-menu-item',
    			type: 'custom',
    			defaultArea: CustomizableUI.AREA_MENUBAR,
    			onBuild: function(aDocument) {
    				let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbaritem');
    				toolbaritem.id = 'usercssloader-menu-item';
    				toolbaritem.className = 'chromeclass-toolbar-additional';
    				return toolbaritem;
    			}
    		});
    		$('usercssloader-menu-item').appendChild(cssmenu);
    
    
    		$("mainKeyset").appendChild($C("key", {
    			id: "usercssloader-rebuild-key",
    			oncommand: "UCL.rebuild();",
    			key: "R",
    			modifiers: "alt",
    		}));
    		this.rebuild();
    		this.initialized = true;
    		if (UCL.USE_UC) {
    			setTimeout(function() {
    				UCL.UCcreateMenuitem();
    			}, 1000);
    		}
    		window.addEventListener("unload", this, false);
    	},
    	uninit: function() {
    		const dis = [];
    		for (let x of Object.keys(this.readCSS)) {
    			if (!this.readCSS[x].enabled)
    				dis.push(x);
    		}
    		this.prefs.setCharPref("disabled_list", dis.join("|"));
    		window.removeEventListener("unload", this, false);
    	},
    	destroy: function() {
    		var i = document.getElementById("usercssloader-menu");
    		if (i) i.parentNode.removeChild(i);
    		var i = document.getElementById("usercssloader-rebuild-key");
    		if (i) i.parentNode.removeChild(i);
    		this.uninit();
    	},
    	handleEvent: function(event) {
    		switch(event.type){
    			case "unload": this.uninit(); break;
    		}
    	},
    	rebuild: function() {
    		let ext = /\.css$/i;
    		let not = /\.uc\.css/i;
    		let files = this.FOLDER.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
    		while (files.hasMoreElements()) {
    			let file = files.getNext().QueryInterface(Ci.nsIFile);
    			if (!ext.test(file.leafName) || not.test(file.leafName)) continue;
    			let CSS = this.loadCSS(file);
    			CSS.flag = true;
    		}
    		for (let leafName of Object.keys(this.readCSS)) {
    			const CSS = this.readCSS[leafName];
    			if (!CSS.flag) {
    				CSS.enabled = false;
    				delete this.readCSS[leafName];
    			}
    			delete CSS.flag;
    			this.rebuildMenu(leafName);
    		}
    		if (this.initialized) {
    			if (typeof(StatusPanel) !== "undefined")
    				StatusPanel._label = "Style importiert";
    			else
    				XULBrowserWindow.statusTextField.label = "Styles importieren";
    		}
    	},
    	loadCSS: function(aFile) {
    		var CSS = this.readCSS[aFile.leafName];
    		if (!CSS) {
    			CSS = this.readCSS[aFile.leafName] = new CSSEntry(aFile);
    			if (this.disabled_list.indexOf(CSS.leafName) === -1) {
    				CSS.enabled = true;
    			}
    		} else if (CSS.enabled) {
    			CSS.enabled = true;
    		}
    		return CSS;
    	},
    	rebuildMenu: function(aLeafName) {
    		var CSS = this.readCSS[aLeafName];
    		var menuitem = document.getElementById("usercssloader-" + aLeafName);
    		if (!CSS) {
    			if (menuitem)
    				menuitem.parentNode.removeChild(menuitem);
    			return;
    		}
    		if (!menuitem) {
    			menuitem = document.createElement("menuitem");
    			menuitem.setAttribute("label", aLeafName);
    			menuitem.setAttribute("id", "usercssloader-" + aLeafName);
    			menuitem.setAttribute("class", "usercssloader-item " + (CSS.SHEET == this.AGENT_SHEET? "AGENT_SHEET" : "USER_SHEET"));
    			menuitem.setAttribute("type", "checkbox");
    			menuitem.setAttribute("autocheck", "false");
    			menuitem.setAttribute("oncommand", "UCL.toggle('"+ aLeafName +"');");
    			menuitem.setAttribute("onclick", "UCL.itemClick(event);");
    			document.getElementById("usercssloader-menupopup").appendChild(menuitem);
    		}
    		menuitem.setAttribute("checked", CSS.enabled);
    	},
    	toggle: function(aLeafName) {
    		var CSS = this.readCSS[aLeafName];
    		if (!CSS) return;
    		CSS.enabled = !CSS.enabled;
    		this.rebuildMenu(aLeafName);
    	},
    	itemClick: function(event) {
    		if (event.button == 0) return;
    		event.preventDefault();
    		event.stopPropagation();
    		let label = event.currentTarget.getAttribute("label");
    		if (event.button == 1) {
    			this.toggle(label);
    		}
    		else if (event.button == 2) {
    			closeMenus(event.target);
    			this.edit(this.getFileFromLeafName(label));
    		}
    	},
    	getFileFromLeafName: function(aLeafName) {
    		let f = this.FOLDER.clone();
    		f.QueryInterface(Ci.nsIFile); // use appendRelativePath
    		f.appendRelativePath(aLeafName);
    		return f;
    	},
    	styleTest: function(aWindow) {
    		aWindow || (aWindow = this.getFocusedWindow());
    		new CSSTester(aWindow, function(tester){
    			if (tester.saved)
    				UCL.rebuild();
    		});
    	},
    	searchStyle: function() {
    		let word;
    		try {
    			word = gBrowser.currentURI.host;
    		} catch {
    			word = gBrowser.currentURI.spec;
    		}
    		openLinkIn("https://userstyles.org/styles/search/" + word, "tab", {});
    	},
    	openFolder:function(){
    		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=[this.FOLDER.path];
    			file.initWithPath(this.vFileManager);
    			process.init(file);
    			// Verzeichnis mit anderem Dateimanager öffnen
    			process.run(false, args, args.length);
    		} else {
    			// Verzeichnis mit Dateimanager des Systems öffnen
    			this.FOLDER.launch();
    		}
    	},
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • aborix
    • 8. Juli 2018 um 23:16

    Mit folgender Änderung wird die Schaltfläche, egal ob mit Bezeichnung "CSS" oder mit Grafik, frei verschiebbar:

    Im Skript ersetzen wir Zeile 175:

    Code
    $('main-menubar').appendChild(cssmenu);

    durch

    Code
    CustomizableUI.createWidget({
    			id: 'usercssloader-menu-item',
    			type: 'custom',
    			defaultArea: CustomizableUI.AREA_MENUBAR,
    			onBuild: function(aDocument) {
    				let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbaritem');
    				toolbaritem.id = 'usercssloader-menu-item';
    				toolbaritem.className = 'chromeclass-toolbar-additional';   
    				return toolbaritem;            
    			}
    		});
    
    		$('usercssloader-menu-item').appendChild(cssmenu);
    Alles anzeigen

    Und im CSS-Code aus #1677 ersetzen wir Zeile 4:

    Code
    #main-menubar > menu[label="CSS"] {

    durch

    Code
    #usercssloader-menu {

    Kann sein, dass man für Ränder usw. zusätzlich noch etwas CSS braucht.

  • Der Glückwunsch-Thread

    • aborix
    • 3. Juli 2018 um 18:27

    Alles Gute!

  • Loading Bar

    • aborix
    • 3. Juli 2018 um 17:30

    Es funktioniert bei mir bereits in Fx 60 nicht.

    Glücklicherweise ist nur wenig zu ändern:

    CSS
    /* LoadingBar.uc.js */
    
    
    (function(){
    //Location Bar Enhancer5.1;Loading Bar0.3.0
    	var cssStr = (function(){/*
    			#urlbar {
    				background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,1) 6px, rgba(255,255,255,1) 12px), -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(175,175,175,.7) 100%);
    				background-size:0 0;
    				background-repeat:repeat-x, no-repeat;
    				transition: background-size 350ms ease 0s !important;
    			}
    			#urlbar:not([style="background-size: 0% 100%;"]) {
    				animation: progress-bar-stripes 2s linear infinite;
    			}
    			@-moz-keyframes progress-bar-stripes {
    				from {
    					background-position: 0, 0;
    				}
    				to {
    					background-position: 51px 0, 0;
    				}
    			}
    	*/}).toString().replace(/^.+\s|.+$/,"");
    
    	var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\"");
    	var mainW = document.getElementById("main-window");
    	document.insertBefore(style, mainW);
    
    
    	function main(window) {
    	  var {document, gBrowser} = window;
    	  function $(id) { return document.getElementById(id) };
    	  var urlbar = $("urlbar");
    	  let pageProgress = 0;
    	  let async = makeWindowHelpers(window).async;
    	  var LoadingBar = {
    		listener: {
    		  onChangeTab: function(e) {
    			urlbar.style.backgroundSize = '0% 100%';
    			pageProgress = 0;
    		  },
    		  onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) {
    			if (gBrowser.contentDocument === aBrowser.contentDocument) {
    				var val = (curTotalProgress-1)/(maxTotalProgress-1);
    				pageProgress = val;
    				urlbar.style.backgroundSize = (100*val) + '% 100%';
    				if (val > 0.9)
    				  async(function() {
    					if (pageProgress > 0.95)
    						urlbar.style.backgroundSize = '100% 100%';
    				}, 1000);
    			}
    		  },
    		  onStateChange: function() {
    			if (pageProgress > 0.95){
    				async(function() {
    					urlbar.style.backgroundSize = '0% 100%';
    					pageProgress = 0;
    				}, 1000);
    			}else{
    				urlbar.style.backgroundSize = '0% 100%';
    			}
    		  }
    		}
    	  };
    
    
    	  gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
    	  gBrowser.addTabsProgressListener(LoadingBar.listener);
    
    
    	  unload(function() {
    		gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
    
    
    		gBrowser.removeTabsProgressListener(LoadingBar.listener);
    	  }, window);
    	}
    
    
    
    
    
    
    	watchWindows(main, "navigator:browser");
    
    
    	function runOnLoad(window, callback, winType) {
    	  window.addEventListener("load", function() {
    		window.removeEventListener("load", arguments.callee, false);
    
    
    		if (window.document.documentElement.getAttribute("windowtype") == winType)
    		  callback(window);
    	  }, false);
    	}
    
    
    	function runOnWindows(callback, winType) {
    	  function watcher(window) {
    		try {
    		  callback(window);
    		}
    		catch(ex) {}
    	  }
    
    
    	  let browserWindows = Services.wm.getEnumerator(winType);
    	  while (browserWindows.hasMoreElements()) {
    		let browserWindow = browserWindows.getNext();
    		if (browserWindow.document.readyState == "complete")
    		  watcher(browserWindow);
    		else
    		  runOnLoad(browserWindow, watcher, winType);
    	  }
    	}
    
    
    	function watchWindows(callback, winType) {
    	  function watcher(window) {
    		try {
    		  callback(window);
    		}
    		catch(ex) {}
    	  }
    
    
    	  runOnWindows(callback, winType);
    
    
    	  function windowWatcher(subject, topic) {
    		if (topic == "domwindowopened")
    		  runOnLoad(subject, watcher, winType);
    	  }
    	  Services.ww.registerNotification(windowWatcher);
    
    
    	  unload(function() { Services.ww.unregisterNotification(windowWatcher) });
    	}
    
    
    	function unload(callback, container) {
    	  let unloaders = unload.unloaders;
    	  if (unloaders == null)
    		unloaders = unload.unloaders = [];
    
    
    	  if (callback == null) {
    		unloaders.slice().forEach(function(unloader) { unloader() });
    		unloaders.length = 0;
    		return null;
    	  }
    
    
    	  if (container != null) {
    		container.addEventListener("unload", removeUnloader, false);
    
    
    		let origCallback = callback;
    		callback = function() {
    		  container.removeEventListener("unload", removeUnloader, false);
    		  origCallback();
    		}
    	  }
    
    
    	  function unloader() {
    		try {
    		  callback();
    		}
    		catch(ex) {}
    	  }
    	  unloaders.push(unloader);
    
    
    
    
    	function removeUnloader() {
    		let index = unloaders.indexOf(unloader);
    		if (index != -1)
    		  unloaders.splice(index, 1);
    	  }
    	  return removeUnloader;
    	}
    
    	function makeWindowHelpers(window) {
    	  let {clearTimeout, setTimeout} = window;
    
    
    	  function async(callback, delay) {
    		delay = delay || 0;
    		let timer = setTimeout(function() {
    		  stopTimer();
    		  callback();
    		}, delay);
    
    
    		function stopTimer() {
    		  if (timer == null)
    			return;
    		  clearTimeout(timer);
    		  timer = null;
    		}
    	  }
    
    
    	  return {
    		async: async,
    	  };
    	}
    
    
    })();
    Alles anzeigen
  • Bildschirmfoto Button

    • aborix
    • 1. Juli 2018 um 20:53

    Ja, hier haben wir Glück:

    Code
    (function() {
      if (location != 'chrome://browser/content/browser.xul')
        return;
      try {
        CustomizableUI.createWidget({
          id: 'screenshot-button',
          defaultArea: CustomizableUI.AREA_NAVBAR,
          label: 'Screenshot',
          tooltiptext: 'Screenshot',
          onCommand: onCommand,
          onCreated: function(button) {
            button.style.listStyleImage = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAdUlEQVQokZVSwRHAIAgLPYfoXs7RCTpG53Avt7APrhaFU8gLMEEJAkEQgFbc7IxkVjt0r6Sp7VIVITumBpKt00FA2ThmjXzkfMMWO8EZFSj8LrUyjsG9b9DaJXq+qAIVxEUxtLHpaXE95dj1NcK2rmbwaGJ4Af0tIg00j/6iAAAAAElFTkSuQmCC)';
          }
        });
      } catch(e) { };
    
    
      function onCommand(event) {  
        let frameScript = function() {
          const string = 'moz-extension://';
          let n = 0;
          addEventListener('DOMContentLoaded', function onLoad(event) {
            setTimeout(function() {
              let document = event.target;
              if (!document.URL.startsWith(string))
                return;
              n++;
              if (n == 2) {
                document.querySelector('button.full-page').click();
              } else if (n == 3) {
                removeEventListener('DOMContentLoaded', onLoad);
                document.querySelector('button.highlight-button-download').click();
              };
            }, 100);
          });
        };
    
        let frameScriptURI = 'data:, (' + frameScript.toString() + ')()';
        let window = event.target.ownerGlobal;
        window.gBrowser.selectedBrowser.messageManager.loadFrameScript(frameScriptURI, true);
        let button = window.document.getElementById('pageAction-panel-screenshots');
        if (button) {
          button.click();
        } else {
          window.document.getElementById('pageActionButton').click();
          window.setTimeout(function() {
            window.document.getElementById('pageAction-panel-screenshots').click();
          }, 0);
        };   
      };
    
    
    })();
    Alles anzeigen
  • userChrome-Eintrag zur Verschiebung der Sidebar-Inhalte funktioniert seit Firefox 61 nicht mehr

    • aborix
    • 1. Juli 2018 um 14:38

    Gern geschehen und gleichfalls noch einen schönen Sonntag. :)

  • userChrome-Eintrag zur Verschiebung der Sidebar-Inhalte funktioniert seit Firefox 61 nicht mehr

    • aborix
    • 30. Juni 2018 um 20:38

    Hallo,

    versuche es damit:

    CSS
    .sidebar-placesTreechildren[view="bookmarks-view"] {
      margin-left: -29px !important;
      margin-top: -52px !important;
    }

Unterstütze uns!

Jährlich (2025)

101,9 %

101,9% (662,48 von 650 EUR)

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