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

Beiträge von BrokenHeart

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

    • BrokenHeart
    • 7. Februar 2025 um 19:26

    Habe jetzt den EventListener rausgeschmissen, der (angeblich) feuert, wenn der Objektbaum(DOM) geladen wurde und init() direkt aufgerufen. Bei mir funktioniert es so, was aber nicht unbedingt was heißen muss:

    JavaScript
    // ==UserScript==
    // @name           uhr-panelbutton.uc.js
    // @compatibility  Firefox 134
    // @include        main
    // @version        1.0.1
    // ==/UserScript==
    
    (function() {
    	if (!window.gBrowser)
    		return;
    
    	var uhr = {
    	  urlobj: {
    		MO_Linksklick: {url:"https://uhr.ptb.de/",width:500,height:500},
    	  },
    	  wfthrobber: "https://raw.github.com/ardiman/userChrome.js/master/wetterfuchsbutton/loading51.gif",  // alternativ z.B. wfthrobber: "chrome://global/skin/media/throbber.png",
    	  createBtn: function() {
    	   try {
    		  CustomizableUI.createWidget({
    			 id: 'uhr-toolbarbutton',
    			 type: 'custom',
    			 onBuild: function(aDocument) {
    				var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
    				var attributes = {
    				   id: 'uhr-toolbarbutton',
    				   class: 'toolbarbutton-1 chromeclass-toolbar-additional',
    				   type: 'button',
    				   removable: 'true',
    				   label: 'Uhr Panel',
    				   tooltiptext: 'Aktuelle Uhrzeit',
    				   style: 'list-style-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACrklEQVQ4jX2T3UuTURzHn3+j/6ILrwq88cLoJgpiEYQUwcKErKAXWi+E1dIZrTRQWQQzYZqilWvGpPmyC3OMtnQ02gvao/Lsxbk9e9phY+fTxRNLM/rCFw6ccz7n+4XfUZS/tLL6HdvjN7Ra3TRbPTRbPbS09dM3MIymafx9viEhBLbHbzhxaxanb5OJcJGJcJG30RIjSzq2MZVWq5vXI6P7IUII2i45uTys4lrIM/dth4RWYTltkM4IYhsVxkN5XixUaLkZotc5tBdyu6ufs4NbjCzpLKcNvqxXWCtKUgXTyZIkGC/R517BMVukqSOA1ztDo/Ohdi/dvhz+uEEsK4llJdG8ZLVgruM7kicDIUanE3yIGXSMFDhs6cEwDBqvT0dLBFMV4r8vJpcjJJcjpISkz72CyxMjWZL44wbdvhwHTn0yU7S09XNnKrc3tpDkwmHks+uMTid45oqQLEmiGcmSWmcqatBkW+N2Vz/KwdOveOjViKzpaLpE3akR+pZn2p+i/doEJ6/Os5apouoSVZckcjX8X7c59jzH+U67Cej25cjrVURNEk8VcDjmeOla4t5gjPfjQapSUq6a1kWdhFbBMlgwAZb2R1weVsnuCKSU1OsSKXc5PIvM/GjsiZpkdV3niEPlvv0pSt/AMMd7V5kJbTUge1zImJDfgI1sGddCnqaOAIFAAEXTNFo7BrGNqWxky/sBu1KImiSSLnNhtMKxc/cQQpiz4BmbwNITxOnbJLX1E13U96XIffpAJF3GPi9ptnpYXFzcO429ziEsPUEeejX8X7dJbf1kZb1COiP4rlWZnEtjn5ccvT7+7/+gKIoyOfWOM1eecHEohNO3iftzFffnKo7ZIheHQljaH5m9/yfDMJicesfdrl46bzyg88YD7tufMjPz8U/nXfoFmxjSB7qU4KIAAAAASUVORK5CYII=)'
    				};
    				for (var p in attributes)
    						toolbaritem.setAttribute(p, attributes[p]);
    					
    				toolbaritem.addEventListener('click', event => {
    					if (event.button == 0) { 
    							uhr.openPanel( 'MO_Linksklick', event, 'b' );
    					}
    				});
    				
    				return toolbaritem;
    			 }
    		  });
    	   } catch(e) { };
    	   
    	   var css = '\
    		  #uhr-toolbarbutton .toolbarbutton-icon {max-width: none !important;}\
    	   ';
    		   
    	   var stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
    
    	   document.insertBefore(stylesheet, document.documentElement);
    	   },
    	  init: function() {
    		
    		this.createBtn();
    
    		let panel = document.createXULElement('panel');  
    		panel.id = "uhr-panel";
    		panel.setAttribute('noautohide', "false"); 
    		panel.setAttribute('type', "arrow"); 
    		
    		panel.addEventListener('popuphiding', event => {
    			 uhr.clearPanel();
    		});
    		  
    		panel.addEventListener('mousedown', event => {
    			if (event.button == 1)  
    				 uhr.openUrlFromPanel();
    		});
    		
    		let element = document.getElementById('mainPopupSet');
    	
    		console.log("--------------------------mainPopupSet: " + element);	
    		if(element)	
    			element.appendChild(panel);	
    			
    		let vbox = document.createXULElement('vbox');    
    		panel.appendChild(vbox);
    		
    		let browser = document.createXULElement('browser');  
    		browser.id = "uhr-iframe";
    		browser.setAttribute('type', 'content');     
    		browser.setAttribute('flex', '1'); 
    		browser.setAttribute('remote', 'true');
    		browser.setAttribute('src', this.wfthrobber); 
    		vbox.appendChild(browser);
    		
    	  },
    	  myEventhandler: function (e,toDo) {
    		switch (toDo) {
    		 case "p":
    		  e.preventDefault();
    		  break;
    		 case "s":
    		  e.stopPropagation();
    		  break;
    		 case "b":
    		  e.preventDefault();
    		  e.stopPropagation();
    		  break;
    		}
    	  },
    	  clearPanel: function() {
    		myiframe = document.getElementById("uhr-iframe");
    		myiframe.parentNode.width = 146;
    		myiframe.parentNode.height = 146;
    		myiframe.setAttribute("src",this.wfthrobber);
    	  },
    	  openUrlFromPanel: function() {
    		openWebLinkIn(document.getElementById("uhr-iframe").getAttribute("src"),"tab");
    		document.getElementById("uhr-panel").hidePopup();
    	  },
    	  openPanel: function(bezeichner,e,toDo) {
    		this.myEventhandler(e,toDo);
    		var myiframe = document.getElementById("uhr-iframe");
    		myiframe.parentNode.style.width = this.urlobj[bezeichner]["width"]+'px';
    		myiframe.parentNode.style.height = this.urlobj[bezeichner]["height"]+'px';
    		myiframe.setAttribute("src",this.urlobj[bezeichner]["url"]);
    		var mypanel = document.getElementById("uhr-panel");
    		mypanel.openPopup(document.getElementById("uhr-toolbarbutton"));
    	  },
    	};
    
    uhr.init();	
    
    })();
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • BrokenHeart
    • 7. Februar 2025 um 19:08
    Zitat von milupo

    Erst sah es so aus, als ob das Symbol nicht geladen wird, aber jetzt ist es wieder da.

    Ist hier zumindest in der Nightly genauso. Erst ging es nicht und jetzt nach dem Update funktioniert es wieder. :/

    Der wahrscheinlichste Grund sind wohl wirklich Timing Probleme. Aber so krass habe ich das auch noch nicht erlebt. Was das Testen und Fehlerfinden natürlich erheblich erschwert.

    Zitat von Mitleser

    Das sieht für mich so aus als würde ein anderes Script dazwischengrätschen, das manchmal früher oder eben später startet; vielleicht dieses ähnlich programmierte Wetter-Script?

    2002Andreas hast es vor ein paar Stunden schon in einem ganz neuen Profil getestet

    Beitrag

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

    […]

    Gerne doch;)

    […]

    Neues Profil, nur dieses Skript vorhanden ergibt in Fx 135:



    Vom Icon nichts zu sehen.


    So in der Beta:

    2002Andreas
    7. Februar 2025 um 14:49

    Auch da lief es nicht.

    Was mich so irritiert ist, dass es in dem gleichen Profil einmal geht und dann wieder nicht. Und anscheinend ist das eher die Regel, als die Ausnahme...


    Einen kurzen Test hätte ich noch:

    - In einem Firefox, bei dem es trotz mehrmaliger Neustarts nicht funktioniert, die Konsole öffnen.

    - Firefox neu starten ohne das Konsolenfenster vorher zu schließen, damit es sofort wieder beim Start angezeigt wird.

    Zeigt er dann das Icon an?

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

    • BrokenHeart
    • 7. Februar 2025 um 16:46
    Zitat von 2002Andreas

    Wobei...als Rentner brauche ich eh kaum mal eine Uhr :)

    :thumbup: Das kann ich dann in knapp einem Jahr selber überprüfen 🧐


    Zitat von milupo

    Ich habe es bisher nicht genutzt und weiß noch nicht, ob ich es nutzen werde, aber nun ist es erst einmal auf dem Tisch und ich denke, wir sollten versuchen, dass es wieder funktioniert.

    Bin der gleichen Meinung! Wobei mich das fertige Skript auch nicht sonderlich reizt. Für mich ist die Hauptmotivation ehrlich gesagt, meine Firefox/JavaScript-Kenntnisse zu vertiefen bzw. zu erweitern. Also das übliche "Der Weg ist das..."-Gequatsche...;)

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

    • BrokenHeart
    • 7. Februar 2025 um 16:26
    Zitat von 2002Andreas

    Kann man das dann nicht einfach in einem kleineren Popup öffnen lassen statt in einem Tab?

    Klar kann man das so machen. Inhaltlich ist da jetzt kein Unterschied zur Panel-Version. Aber Intention des Autors war es eben, die Uhr in einem Panel temporär anzuzeigen. Spart einem das Schließen (bzw. 'Seite zurückgehen') des geöffneten Tabs. Eine Uhr will man ja meist nicht dauerhaft betrachten. Aber ich würde dieses Panel-Uhr-Skript (selbst wenn es richtig funktionieren würde;)) auch nicht verwenden. Auch wenn es die Atomuhr aus Braunschweig (oder doch Berlin?) ist, so genau brauch ich es dann doch nicht. :) Mir reicht meine sekundengenaue Uhr in der Menü-Bar!

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

    • BrokenHeart
    • 7. Februar 2025 um 15:45

    2002Andreas Danke! Das hilft weiter. Anscheinend hängt er schon bei der Button-Erzeugung (oder davor) . Außerdem kann ich das Problem jetzt auch in meiner Nightly nachvollziehen, was dann die Testerei doch wesentlich einfacher macht.

    milupo Das sollte - so Gott will - egal sein. Wollte den Funktionsaufruf nur einmal drin haben.

    Zitat von milupo

    da stand dort in der Browserkonsole null.

    Das war ja auch das Hauptproblem, dass das MainPopupSet-Element eben nicht immer vom Skript aus aufrufbar war, egal an welcher Stelle. Von der Konsole aus konnte man immer darauf zugreifen. Etwas, was ich bis jetzt immer noch nicht ganz verstehe...

    Falls noch Interesse an dem Skript besteht, würde ich vielleicht hier eine Version posten, die mit sehr vielen Log-Aufrufen den Ablauf sichtbar macht Mit dem Debugger wird es nämlich schwer, weil sich damit kaum Timing-Probleme ermitteln lassen und außerdem wird der Debugger zu spät aufgerufen und die Initialisierung ist schon längst abgeschlossen.

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

    • BrokenHeart
    • 7. Februar 2025 um 14:45

    Es scheint dann doch wieder einmal Timing-Probleme zu geben. Da muss wohl ein anderer Ansatz (Observer?) her, der das Vorhandensein bestimmter Elemente "garantiert".

    Zitat von 2002Andreas

    Fx 135...nichts zu sehen:

    Danke 2002Andreas , dass du es jetzt auch mal getestet hast :thumbup:.

    In der Konsole sollte zumindest ein Log-Eintrag vorhanden sein. Wäre hilfreich, wenn du mir sagst, ob da das XUlElement steht oder null.

    Code
    --------------------------mainPopupSet: [object XULElement]
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • BrokenHeart
    • 7. Februar 2025 um 12:19
    Zitat von Endor

    Schaltfläche war mal kurz da und seit dem nicht mehr aufgetaucht.

    Zitat von milupo

    Auch ich hatte nichts geändert, bis das Problem auftauchte.

    Ich hatte wie gesagt nichts geändert. :/

    Hier exakt die Version, die bei mir seit Anfang an funktioniert - nur falls es doch Abweichungen zur oben geposteten Version gibt.

    JavaScript
    // ==UserScript==
    // @name           uhr-panelbutton.uc.js
    // @compatibility  Firefox 134
    // @include        main
    // @version        1.0.1
    // ==/UserScript==
    
    (function() {
    	//let mainPopupSet; 
    
    	if (!window.gBrowser)
    		return;
    
    	window.addEventListener(
    		"DOMContentLoaded",
    		() => {
    			setTimeout(function() {
    			uhr.init();
    		},0);
    	},true);
    
    	var uhr = {
    	  urlobj: {
    		MO_Linksklick: {url:"https://uhr.ptb.de/",width:500,height:500},
    	  },
    	  wfthrobber: "https://raw.github.com/ardiman/userChrome.js/master/wetterfuchsbutton/loading51.gif",  // alternativ z.B. wfthrobber: "chrome://global/skin/media/throbber.png",
    	  createBtn: function() {
    	   try {
    		  CustomizableUI.createWidget({
    			 id: 'uhr-toolbarbutton',
    			 type: 'custom',
    			 onBuild: function(aDocument) {
    				var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
    				var attributes = {
    				   id: 'uhr-toolbarbutton',
    				   class: 'toolbarbutton-1 chromeclass-toolbar-additional',
    				   type: 'button',
    				   removable: 'true',
    				   label: 'Uhr Panel',
    				   tooltiptext: 'Aktuelle Uhrzeit',
    				   style: 'list-style-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACrklEQVQ4jX2T3UuTURzHn3+j/6ILrwq88cLoJgpiEYQUwcKErKAXWi+E1dIZrTRQWQQzYZqilWvGpPmyC3OMtnQ02gvao/Lsxbk9e9phY+fTxRNLM/rCFw6ccz7n+4XfUZS/tLL6HdvjN7Ra3TRbPTRbPbS09dM3MIymafx9viEhBLbHbzhxaxanb5OJcJGJcJG30RIjSzq2MZVWq5vXI6P7IUII2i45uTys4lrIM/dth4RWYTltkM4IYhsVxkN5XixUaLkZotc5tBdyu6ufs4NbjCzpLKcNvqxXWCtKUgXTyZIkGC/R517BMVukqSOA1ztDo/Ohdi/dvhz+uEEsK4llJdG8ZLVgruM7kicDIUanE3yIGXSMFDhs6cEwDBqvT0dLBFMV4r8vJpcjJJcjpISkz72CyxMjWZL44wbdvhwHTn0yU7S09XNnKrc3tpDkwmHks+uMTid45oqQLEmiGcmSWmcqatBkW+N2Vz/KwdOveOjViKzpaLpE3akR+pZn2p+i/doEJ6/Os5apouoSVZckcjX8X7c59jzH+U67Cej25cjrVURNEk8VcDjmeOla4t5gjPfjQapSUq6a1kWdhFbBMlgwAZb2R1weVsnuCKSU1OsSKXc5PIvM/GjsiZpkdV3niEPlvv0pSt/AMMd7V5kJbTUge1zImJDfgI1sGddCnqaOAIFAAEXTNFo7BrGNqWxky/sBu1KImiSSLnNhtMKxc/cQQpiz4BmbwNITxOnbJLX1E13U96XIffpAJF3GPi9ptnpYXFzcO429ziEsPUEeejX8X7dJbf1kZb1COiP4rlWZnEtjn5ccvT7+7/+gKIoyOfWOM1eecHEohNO3iftzFffnKo7ZIheHQljaH5m9/yfDMJicesfdrl46bzyg88YD7tufMjPz8U/nXfoFmxjSB7qU4KIAAAAASUVORK5CYII=)'
    				};
    				for (var p in attributes)
    						toolbaritem.setAttribute(p, attributes[p]);
    					
    				toolbaritem.addEventListener('click', event => {
    					if (event.button == 0) { 
    							uhr.openPanel( 'MO_Linksklick', event, 'b' );
    					}
    				});
    				
    				return toolbaritem;
    			 }
    		  });
    	   } catch(e) { };
    	   
    	   var css = '\
    		  #uhr-toolbarbutton .toolbarbutton-icon {max-width: none !important;}\
    	   ';
    		   
    	   var stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
    
    	   document.insertBefore(stylesheet, document.documentElement);
    	   },
    	  init: function() {
    		
    		this.createBtn();
    
    		let panel = document.createXULElement('panel');  
    		panel.id = "uhr-panel";
    		panel.setAttribute('noautohide', "false"); 
    		panel.setAttribute('type', "arrow"); 
    		
    		panel.addEventListener('popuphiding', event => {
    			 uhr.clearPanel();
    		});
    		  
    		panel.addEventListener('mousedown', event => {
    			if (event.button == 1)  
    				 uhr.openUrlFromPanel();
    		});
    		
    		let element = document.getElementById('mainPopupSet');
    	
    		console.log("--------------------------mainPopupSet: " + element);	
    		if(element)	
    			element.appendChild(panel);	
    			
    		let vbox = document.createXULElement('vbox');    
    		panel.appendChild(vbox);
    		
    		let browser = document.createXULElement('browser');  
    		browser.id = "uhr-iframe";
    		browser.setAttribute('type', 'content');     
    		browser.setAttribute('flex', '1'); 
    		browser.setAttribute('remote', 'true');
    		browser.setAttribute('src', this.wfthrobber); 
    		vbox.appendChild(browser);
    		
    	  },
    	  myEventhandler: function (e,toDo) {
    		switch (toDo) {
    		 case "p":
    		  e.preventDefault();
    		  break;
    		 case "s":
    		  e.stopPropagation();
    		  break;
    		 case "b":
    		  e.preventDefault();
    		  e.stopPropagation();
    		  break;
    		}
    	  },
    	  clearPanel: function() {
    		myiframe = document.getElementById("uhr-iframe");
    		myiframe.parentNode.width = 146;
    		myiframe.parentNode.height = 146;
    		myiframe.setAttribute("src",this.wfthrobber);
    	  },
    	  openUrlFromPanel: function() {
    		openWebLinkIn(document.getElementById("uhr-iframe").getAttribute("src"),"tab");
    		document.getElementById("uhr-panel").hidePopup();
    	  },
    	  openPanel: function(bezeichner,e,toDo) {
    		this.myEventhandler(e,toDo);
    		var myiframe = document.getElementById("uhr-iframe");
    		myiframe.parentNode.style.width = this.urlobj[bezeichner]["width"]+'px';
    		myiframe.parentNode.style.height = this.urlobj[bezeichner]["height"]+'px';
    		myiframe.setAttribute("src",this.urlobj[bezeichner]["url"]);
    		var mypanel = document.getElementById("uhr-panel");
    		mypanel.openPopup(document.getElementById("uhr-toolbarbutton"));
    	  },
    	};
    
    })();
    Alles anzeigen
    Zitat von milupo

    Eine Idee: Du hattest ja den Vorschlag mit dem setTimeout-Wert gemacht. Wenn ich so in die Vergangenheit zurückdenke, ist mir, als hätte der setTimeout-Block immer am Ende eines Skripts gestanden. Bei dir steht er am Anfang des Skriptes. Könnte das die Ursache sein?

    Der Code wurde auch vorher, obwohl er ganz hinten stand, als erstes aufgerufen. Vorher steht ja nur eine Objektdefinition 'uhr'. Der Aufruf über uhr.init() startet ja erst die eigentliche Initialisierung des Programms.

    Habe heute nur sporadisch Zeit und werde nur kurz mal immer wieder vorbeischauen...

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

    • BrokenHeart
    • 7. Februar 2025 um 00:10
    Zitat von milupo

    Hilft nichts.

    Aber es hat doch schon funktioniert, oder? Ich habe am Skript nichts mehr geändert, ein FF-Update hat es in der Zwischenzeit auch nicht gegeben, also müsste der Fehler dann wohl eher wegen einer Änderung an deiner Umgebung auftreten. Vielleicht meldet sich ja (morgen) noch jemand und kann das Problem bestätigen oder eben nicht. :/

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

    • BrokenHeart
    • 6. Februar 2025 um 23:45

    Dann kann ich dir momentan leider auch nicht helfen. Hier funktioniert das Skript in FF135 (noch).

    Du könntest in Zeile 18 den Wert von setTimeout erhöhen, z.B. zum Test von 0 auf 3000.

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

    • BrokenHeart
    • 6. Februar 2025 um 22:52
    Zitat von milupo

    Es ist bei mir nicht mehr zu sehen, weder in der Symbolleiste noch im Anpassen-Fenster, sowohl im Nightly als auch in Fx 135.

    Und was sagt die Konsole?

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

    • BrokenHeart
    • 6. Februar 2025 um 18:50
    Zitat von milupo

    Sprachlich richtig ist: „Spaaaß“, also mit langem aaa. ;) :)

    ;)

    aber ..."Spassss" ist original Stromberg! Schau mal wie viel "Spassss" die haben:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Zitat von 2002Andreas

    Wichtiger wäre der Preis, wenn es wieder angepasst ist ;)

    Zitat von 2002Andreas

    IBM hat damals 600,00DM pro Stunde dafür genommen.

    8|. Hat es dann wenigstens funktioniert?

    Also mein Stundensatz liegt - einen Moment, muss nachschauen - bei 600,00€/h. So ein Zufall...;)

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

    • BrokenHeart
    • 6. Februar 2025 um 18:08
    Zitat von milupo

    Ich habe das Skript nie benutzt. Was macht es denn eigentlich?

    Zitat von milupo

    In der Symbolleiste sehe ich kein Symbol dafür.

    Ziehe es dir über 'Symbolleiste anpassen...' auf eine Leiste.

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

    • BrokenHeart
    • 6. Februar 2025 um 17:57
    Zitat von Endor

    Vielen Dank. Funktioniert wieder einwandfrei.
    Große Klasse.

    Gerne :). Im Prinzip handelt es sich bei dem Skript um das leicht abgewandelte "wetterfuchsbutton.uc.js" Skript. Und wenn das hier jetzt läuft, dann sollte folglich das Wetterfuchs-Skript eigentlich auch wieder zu reparieren sein.

    ...

    Mal schauen, was mir Boersenfeger dafür zahlt, damit ich mir das mal anschaue... ^^;)
    (bevor hier Leute ohne Ironie-Detektor aufschlagen: "war nur Spasss")

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

    • BrokenHeart
    • 6. Februar 2025 um 17:40
    Zitat von Endor

    Ändert aber nichts daran, dass das Script nicht funktioniert.

    Bitte testen:

    JavaScript
    // ==UserScript==
    // @name           uhr-panelbutton.uc.js
    // @compatibility  Firefox 134
    // @include        main
    // @version        1.0.1
    // ==/UserScript==
    
    (function() {
    
    	if (!window.gBrowser)
    		return;
    
    	window.addEventListener(
    		"DOMContentLoaded",
    		() => {
    			setTimeout(function() {
    			uhr.init();
    		},0);
    	},true);
    
    	var uhr = {
    	  urlobj: {
    		MO_Linksklick: {url:"https://uhr.ptb.de/",width:500,height:500},
    	  },
    	  wfthrobber: "https://raw.github.com/ardiman/userChrome.js/master/wetterfuchsbutton/loading51.gif",  // alternativ z.B. wfthrobber: "chrome://global/skin/media/throbber.png",
    	  createBtn: function() {
    	   try {
    		  CustomizableUI.createWidget({
    			 id: 'uhr-toolbarbutton',
    			 type: 'custom',
    			 onBuild: function(aDocument) {
    				var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
    				var attributes = {
    				   id: 'uhr-toolbarbutton',
    				   class: 'toolbarbutton-1 chromeclass-toolbar-additional',
    				   type: 'button',
    				   removable: 'true',
    				   label: 'Uhr Panel',
    				   tooltiptext: 'Aktuelle Uhrzeit',
    				   style: 'list-style-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACrklEQVQ4jX2T3UuTURzHn3+j/6ILrwq88cLoJgpiEYQUwcKErKAXWi+E1dIZrTRQWQQzYZqilWvGpPmyC3OMtnQ02gvao/Lsxbk9e9phY+fTxRNLM/rCFw6ccz7n+4XfUZS/tLL6HdvjN7Ra3TRbPTRbPbS09dM3MIymafx9viEhBLbHbzhxaxanb5OJcJGJcJG30RIjSzq2MZVWq5vXI6P7IUII2i45uTys4lrIM/dth4RWYTltkM4IYhsVxkN5XixUaLkZotc5tBdyu6ufs4NbjCzpLKcNvqxXWCtKUgXTyZIkGC/R517BMVukqSOA1ztDo/Ohdi/dvhz+uEEsK4llJdG8ZLVgruM7kicDIUanE3yIGXSMFDhs6cEwDBqvT0dLBFMV4r8vJpcjJJcjpISkz72CyxMjWZL44wbdvhwHTn0yU7S09XNnKrc3tpDkwmHks+uMTid45oqQLEmiGcmSWmcqatBkW+N2Vz/KwdOveOjViKzpaLpE3akR+pZn2p+i/doEJ6/Os5apouoSVZckcjX8X7c59jzH+U67Cej25cjrVURNEk8VcDjmeOla4t5gjPfjQapSUq6a1kWdhFbBMlgwAZb2R1weVsnuCKSU1OsSKXc5PIvM/GjsiZpkdV3niEPlvv0pSt/AMMd7V5kJbTUge1zImJDfgI1sGddCnqaOAIFAAEXTNFo7BrGNqWxky/sBu1KImiSSLnNhtMKxc/cQQpiz4BmbwNITxOnbJLX1E13U96XIffpAJF3GPi9ptnpYXFzcO429ziEsPUEeejX8X7dJbf1kZb1COiP4rlWZnEtjn5ccvT7+7/+gKIoyOfWOM1eecHEohNO3iftzFffnKo7ZIheHQljaH5m9/yfDMJicesfdrl46bzyg88YD7tufMjPz8U/nXfoFmxjSB7qU4KIAAAAASUVORK5CYII=)'
    				};
    				for (var p in attributes)
    						toolbaritem.setAttribute(p, attributes[p]);
    					
    				toolbaritem.addEventListener('click', event => {
    				if (event.button == 0) { 
    						uhr.openPanel( 'MO_Linksklick', event, 'b' );
    				}
    	  });
    				return toolbaritem;
    			 }
    		  });
    	   } catch(e) { };
    	   
    	   var css = '\
    		  #uhr-toolbarbutton .toolbarbutton-icon {max-width: none !important;}\
    	   ';
    		   
    	   var stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
    
    	   document.insertBefore(stylesheet, document.documentElement);
    	   },
    	  init: function() {
    		
    		this.createBtn();
    
    		let panel = document.createXULElement('panel');  
    		panel.id = "uhr-panel";
    		panel.setAttribute('noautohide', "false"); 
    		panel.setAttribute('type', "arrow"); 
    		
    		panel.addEventListener('popuphiding', event => {
    			 uhr.clearPanel();
    		});
    		  
    		panel.addEventListener('mousedown', event => {
    			if (event.button == 1)  
    				 uhr.openUrlFromPanel();
    		});
    		
    		let element = document.getElementById('mainPopupSet');
    	
    		if(element)	
    			element.appendChild(panel);	
    			
    		let vbox = document.createXULElement('vbox');    
    		panel.appendChild(vbox);
    		
    		let browser = document.createXULElement('browser');  
    		browser.id = "uhr-iframe";
    		browser.setAttribute('type', 'content');     
    		browser.setAttribute('flex', '1'); 
    		browser.setAttribute('remote', 'true');
    		browser.setAttribute('src', this.wfthrobber); 
    		vbox.appendChild(browser);
    		
    	  },
    	  myEventhandler: function (e,toDo) {
    		switch (toDo) {
    		 case "p":
    		  e.preventDefault();
    		  break;
    		 case "s":
    		  e.stopPropagation();
    		  break;
    		 case "b":
    		  e.preventDefault();
    		  e.stopPropagation();
    		  break;
    		}
    	  },
    	  clearPanel: function() {
    		myiframe = document.getElementById("uhr-iframe");
    		myiframe.parentNode.width = 146;
    		myiframe.parentNode.height = 146;
    		myiframe.setAttribute("src",this.wfthrobber);
    	  },
    	  openUrlFromPanel: function() {
    		openWebLinkIn(document.getElementById("uhr-iframe").getAttribute("src"),"tab");
    		document.getElementById("uhr-panel").hidePopup();
    	  },
    	  openPanel: function(bezeichner,e,toDo) {
    		this.myEventhandler(e,toDo);
    		var myiframe = document.getElementById("uhr-iframe");
    		myiframe.parentNode.style.width = this.urlobj[bezeichner]["width"]+'px';
    		myiframe.parentNode.style.height = this.urlobj[bezeichner]["height"]+'px';
    		myiframe.setAttribute("src",this.urlobj[bezeichner]["url"]);
    		var mypanel = document.getElementById("uhr-panel");
    		mypanel.openPopup(document.getElementById("uhr-toolbarbutton"));
    	  },
    	};
    
    })();
    Alles anzeigen
  • Fix: Toolbar-Buttons reagieren nicht mehr ab FF 134

    • BrokenHeart
    • 3. Februar 2025 um 00:11
    Zitat von Mitleser

    Oder als zusätzliche, gut sichtbare Warnung könnte ein alert( "Warning: Toolbar [" + toolbarID + "] unknown! File: 'FixToolbarButtons.uc.js'"); hilfreich sein?

    Hatte ich mir zuerst auch überlegt, aber ich bin eigentlich kein Freund von aufpoppenden Meldungen, die ich quittieren muss. Es passiert bei fehlerhafter Angabe der ID ja nichts, was sich in irgendeiner Weise auf das Gesamtverhalten des Browsers auswirken würde (auch nicht auf die Performance). Der einzige Effekt, der dann eintritt ist, dass die Buttons nicht mehr funktionieren. Und wenn ein Skript nicht mehr läuft, dann sollte man sowieso mal in der Konsole nachschauen, ob da eine Meldung vorliegt. Bleibt natürlich jedem selbst überlassen, die Zeile mit 'console.log' nach deinem Vorschlag anzupassen... :)

    Aber wie gesagt, ich möchte wenigstens den Versuch starten, die Angabe im Skript überflüssig zu machen, also das Skript automatisch nach allen betroffenen Toolbars suchen zu lassen und diese dann automatisch eintragen zu lassen. Aber keine Ahnung, ob das trivial und sicher ist... :/

  • Fix: Toolbar-Buttons reagieren nicht mehr ab FF 134

    • BrokenHeart
    • 2. Februar 2025 um 18:56
    Zitat von Mitleser

    ucjs_unified-extensions-button + 'Verschiebe'-Script funzt leider nicht mehr. :/

    Schau bitte in Zeile 14, ob dort die richtige Toolbar-ID im Array steht. Falls du das nicht korrigiert hast, steht da nämlich jetzt eine andere drin, als vorher ('addonbar' -> 'bottom-toolbar' ).

    Ich werde das Array im Code mal leer lassen, da ja hier zwingend eine vorhandene Toolbar-ID eingetragen werden muss und ich nicht weiß, welche Toolbar genutzt wird. Vielleicht kann man das ohne großen Aufwand auch "programmatisch" lösen...

    Edit: Noch als Hinweis: In der Konsole sollte bei nicht vorhandener Toolbar eine Warnung ausgegeben worden sein.

  • Fix: Toolbar-Buttons reagieren nicht mehr ab FF 134

    • BrokenHeart
    • 29. Januar 2025 um 15:07
    Zitat von BrokenHeart

    Edit: Habe gerade ein Update auf die neuste Nightly gemacht und dann geht der Button wirklich nicht mehr. Liegt aber nicht an dem Skript, da er diesen Fehler auch ohne das Skript zeigt. Müsste man sich mal den Code zum Button genauer anschauen... :/

    Zitat von FuchsFan

    Ich glaube Dir ja schon, aber alle Button, die about-Funktionen aufrufen funktionieren nicht nach dem Muster des Scriptes aus #11.

    Ja, das Skript für den Button funktioniert hier auch nicht mehr in der heutigen Nightly. In der gestrigen Nightly lief es noch. Das ist aber eine andere Baustelle. Vielleicht mal dafür einen eigenen Thread aufmachen.

    So funktioniert dein Skript 'abouttranslations-button.uc.js' auch in der aktuellen Nightly wieder. Auch in einem neuen Fenster. Allerdings nur, wenn man das Startfenster nicht löscht. Aber wie gesagt, ist eine andere Baustelle und hat nichts mit dem Skript zu tun.

    JavaScript
    //  abouttranslations-button.uc.js
      
      (function() {
    
    	if (location != 'chrome://browser/content/browser.xhtml') return;
       
    	try {
    		CustomizableUI.createWidget({
    			id: 'about-translations',
    			type: 'custom',
    			defaultArea: CustomizableUI.AREA_NAVBAR,
    			onBuild: function(aDocument) {
    				let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");				
    				let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
    				let props = {
    					id: 'about-translations',
    					class: 'toolbarbutton-1 chromeclass-toolbar-additional',
    					label: 'about:translations',
    					tooltiptext: 'about:translations öffnen',
    					style: 'list-style-image: url("file:///C:/FoxIcons2/1140.png")',
    				};
    				for (var p in props)
    					toolbaritem.setAttribute(p, props[p]);
    				
    				toolbaritem.addEventListener('click', function(event) {
    					if (event.button == 0) { 
    						openTrustedLinkIn("about:translations", "tab");
    					};
    				}, true);
    				
    				return toolbaritem;
    			}
    		
    		});
    	} catch(e) { };
    	
    })();
    Alles anzeigen
    Zitat von FuchsFan

    Gibst Du mir mal bitte noch Dein Script für die Addon-Bar.

    Das sind ganz unterschiedliche Skripte, mit denen ich getestet habe. Die 'addonbar' von Aris wurde ja hier gepostet und eine selber angepasste Statusleiste. Aber wie gesagt, hier gehen deine about:xxxx-Skripte auch nicht mehr. Hängt also nicht an den Toolbars bzw. halte ich für sehr unwahrscheinlich.

    -----

    Zitat von Dharkness

    Es betrifft also nur Fx-Interne Button?

    Exakt! FX-interne Buttons in nicht FX-internen Toolbars.

  • Fix: Toolbar-Buttons reagieren nicht mehr ab FF 134

    • BrokenHeart
    • 29. Januar 2025 um 14:22
    Zitat von FuchsFan

    Sorry, ich teste nur in Nightly (immer aktuelle Version). :rolleyes:

    Siehe Screenshot in #13

    Edit: Habe gerade ein Update auf die neuste Nightly gemacht und dann geht der Button wirklich nicht mehr. Liegt aber nicht an dem Skript, da er diesen Fehler auch ohne das Skript zeigt. Müsste man sich mal den Code zum Button genauer anschauen... :/

  • Fix: Toolbar-Buttons reagieren nicht mehr ab FF 134

    • BrokenHeart
    • 29. Januar 2025 um 14:11
    Zitat von FuchsFan

    Leider nicht, denn das folgende Script arbeitet in der Navbar fehlerlos, und funktioniert auch in mehreren Fenstern, wenn das Startfenster geschlossen wurde (das aus #5 nicht). Was müsste also im Script noch geändert werden?

    Funktioniert hier in der FF134.0.2 einwandfrei. Keine Ahnung, was du meinst :/ (Icon ist nicht sichtbar im Screenshot)

    Und in der Nightly auch...



    Zitat von Mitleser

    Läuft, vielen Dank! :) :thumbup:

    Gerne :).

  • Fix: Toolbar-Buttons reagieren nicht mehr ab FF 134

    • BrokenHeart
    • 29. Januar 2025 um 13:36

    Mitleser Habe es jetzt angepasst. Funktioniert dann aber wohl nur in Verbindung mit dem Skript, welches du gepostet hast, da ja auch eine veränderte ID= ucjs_unified-extensions-button benutzt wird.

    Edit: Mist! Das neue Skript vergessen...:sleeping:

    JavaScript
    // 'FixToolbarButtons.uc.js' by BrokenHeart💔   
    //
    // The script adds several button-events to custom-toolbars(XUL), which were created outside the 'navigator-toolbox'. 
    // Firefox: 134+ 
    //
    // 29.01.2025 V0.1  
    
    
    (function() {
    	
    	// ---------------------------------------------
        const toolbarIDs = ['bottom-toolbar', 'addonbar'/*, ... */];   
    	// ---------------------------------------------
    	
    	if (!window.gBrowser)
    		return;
    	
    	if (window.readyState !== "loading") 
    		setTimeout( initToolbarButtonEvents, 500 ); 
        else 
    		window.addEventListener( "DOMContentLoaded", initToolbarButtonEvents );
    	
    	window.addEventListener('aftercustomization', () =>
    		setTimeout(() => initToolbarButtonEvents(), 100 )
    	)
    		
    	function initToolbarButtonEvents() {
    		
    		toolbarIDs.forEach((toolbarID) => {
    			for (const child of document.getElementById(toolbarID).children) {
    				switch(child["id"]) {
    					case "downloads-button":  
    						let dlButton = document.getElementById('downloads-button');
    						dlButton.removeEventListener('mousedown', handleDlButtonEvent);
    						dlButton.addEventListener('mousedown', handleDlButtonEvent);
    					break;
    					case "library-button":  
    						let libButton = document.getElementById('library-button');
    						libButton.removeEventListener('mousedown', handleLibButtonEvent);
    						libButton.addEventListener('mousedown', handleLibButtonEvent);
    					break;
    					case "alltabs-button":  
    						let allTabsButton = document.getElementById('alltabs-button');
    						allTabsButton.removeEventListener('mousedown', handleAllTabsButtonEvent);
    						allTabsButton.addEventListener('mousedown', handleAllTabsButtonEvent);
    					break;
    					case "firefox-view-button":  
    						let viewButton = document.getElementById('firefox-view-button');
    						viewButton.removeEventListener('mousedown', handleViewButtonEvent);
    						viewButton.addEventListener('mousedown', handleViewButtonEvent);
    					break;
    					case "fxa-toolbar-menu-button":  
    						let fxaMenuButton = document.getElementById('fxa-toolbar-menu-button');
    						fxaMenuButton.removeEventListener('mousedown', handleFxaMenuButtonEvent);
    						fxaMenuButton.addEventListener('mousedown', handleFxaMenuButtonEvent);
    					break;
    					case "import-button":  
    						let importButton = document.getElementById('import-button');
    						importButton.removeEventListener('command', handleImportButtonEvent);
    						importButton.addEventListener('command', handleImportButtonEvent);
    					break;
    					case "ucjs_unified-extensions-button":  
    						let extensionsButton = document.getElementById('ucjs_unified-extensions-button');
    						extensionsButton.removeEventListener('command', handleExtensionsButton);
    						extensionsButton.addEventListener('command', handleExtensionsButton);
    					break;
    					
    				}
    			}
    		})
    		
    	}	
    
    	
    	function handleDlButtonEvent(event) { 
    		DownloadsIndicatorView.onCommand(event);
    	}
    	function handleLibButtonEvent(event) {
    		PanelUI.showSubView("appMenu-libraryView", document.getElementById('library-button'), event);
    	}
    	function handleAllTabsButtonEvent(event) {  
    		gTabsPanel.showAllTabsPanel(event, "alltabs-button");
    	}
    	function handleViewButtonEvent(event) { 
    		FirefoxViewHandler.openToolbarMouseEvent(event);
    	}
    	function handleFxaMenuButtonEvent(event) { 
    		gSync.toggleAccountPanel(document.getElementById('fxa-toolbar-menu-button'), event);
    	}
    	function handleImportButtonEvent(event) { 
    		MigrationUtils.showMigrationWizard(window, {
                entrypoint: MigrationUtils.MIGRATION_ENTRYPOINTS.BOOKMARKS_TOOLBAR,
    		});
    	}
    	function handleExtensionsButton(event) { 
    		gUnifiedExtensions.togglePanel(event);
    	}
    	
    })();
    Alles anzeigen

Unterstütze uns!

Jährlich (2026)

32,8 %

32,8% (213,31 von 650 EUR)

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