Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Firefox Addon Code verstehen und abändern?
#1
Hallo,
ich bräuchte etwas Hilfe:
Ich habe in Firefox oft viele Tabs offen (>1000 Tabs!) und muss daher viele Tabs auch wieder löschen von Zeit zu Zeit.
Absolut dämlicherweise kann man in Firefox nur einen Tab auf einmal shcließen und dazu muss der Tab auch erst noch geladen sein.
Also Tab laden, tab shcließen, nächster tab laden, tab schließen, etc.

Viel Arbeit auch wenn man nur 50 Tabs schließen will.

Und ich weiß ja, wenn ich in Firefoxs Tabliste gucke, dass bspw. Tab 14-50 alle geschlossen werden können.
Darum suchte ich nahc einem passenden Addon um viele Tabs auf einmal zu schließen und wurde auch fündig, mehr oder minder.

Jenes Adddon sollte normalerweise folgendes machen:
Tab 1 öffnen, addon klicken, Tab 2 öffnen, wieder addon klicken.
Dann sollten Alle Tabs, die zwischen Tab 1 und Tab 2 liegen , geshclossen werden (inklusive der "Grenztabs").

Nur in Real, wenn ich so bspw. die Tabs 47-93 schließen will, macht er nicht nur die Zwischentabs zu, sondern irgendwie alle Tabs links von Tab 93.
oder so.
jedenfalls ist hinterher viel mehr geschlossen als geplant.


Langer Rede kurzer Sinn:
Ich will dieses Addon nehmen, es inspizieren und den Fehler darin finden und ausbessern damit es auch wirklich das tut was es sollte.
Weil ich brauche unbedingt ein solches Addon und ausser diesem (fehlerhaften) gibt es sosnt keins in die Richtung.

Meine Javascriptfähigkeiten sind begrenzt, gerade meine Kenntnisse hinsichtlich Promises eingeschränkt, daher wäre ich für Hilfe sehr dankbar :-)


Hier nun der Code des AddOns:
'use strict';
var noOfTabs    =   new Array();
chrome.browserAction.onClicked.addListener(function(aTab, event) {
	let tabs = browser.tabs.getCurrent();
	async function test(){
			let tabsa = await browser.tabs.query({});
			for (let tabsas of tabsa) {
					if(tabsas.active == true){  
							chrome.browserAction.setBadgeText({text: 'No-'+tabsas.index});
							noOfTabs.push(tabsas.id);
							callToDelete(noOfTabs);
							return;
					}
				}
	}
	test();
	function callToDelete(count, start, end)
	{
			if(count.length == 2)
			{
					if(count[0] < count[1])
					{
							start   =   count[0];
							end     =   count[1];
					}
					else
					{
							end   =   count[0];
							start =   count[1];
					}
					for (start; start <= end ; start++)
					{
							var removing = browser.tabs.remove(start);
							removing.then(onRemoved, onError);
							if(start == end)
							{
									noOfTabs    =   new Array();
									chrome.browserAction.setBadgeText({text: ''});
							}
							
					}  
					function onRemoved(){console.log('success')}
					function onError(){console.log('failure')}
			}
	}
});

Wie erwähnt, ich habe den Code nicht geschrieben und blicke auch nicht ganz durch was die Firefox Api mit ihren Promises angeht.

Wenn mir Jemand helfen könnte, wäre das echt nice! :-)
Zitieren
#2
Add-ons sind so ein Fall für sich , aber man kann halt Sachen machen die eine Webseite nicht kann, auf andere Tabs schließen usw.
Ich habe mir auch schon das E-Besucher-Add-on umgebaut, damit es auch läuft, wenn man andere Add-ons nutzt usw.

Ich verstehe nur noch nicht genau was du da genau vorhast,
Warum hast du 1000 Tabs auf?
Ich habe ja auch schon oft bis 100 Tabs auf , aber so viele nie.
Du schreibst das

Jenes Adddon sollte normalerweise folgendes machen:
Tab 1 öffnen, addon klicken, Tab 2 öffnen, wieder addon klicken.
Dann sollten Alle Tabs, die zwischen Tab 1 und Tab 2 liegen , geshclossen werden (inklusive der "Grenztabs").


Wieso Tabs öffnen?
Die sind doch schon auf, oder?

Kann das sein das du z. B. 1000 Tabs aufhast und du die einmal am Tag oder so durchklicken willst zwecks Geld verdienen, Klickzahlen oder sonst irgendwas?
Wenn es darum geht, gibt es sicherlich einfache Wege.
Zb alle Seiten in ein Array speichern und das Addom öffnen eine Seite nach der nächsten in ein Tab..

Falls das nicht so ist, verstehe ich noch nicht ganz, was du davor hast.
Zb Chrome kann alle Seiten schließen , oder alle Seiten rechts oder Links von dem Tab wo man gerade ist.
Kannst du mir mal Link von dem Add-on schocken .
Hier sind alle meine Lösungen aus allen Foren. Ich helfe auch in Facebook-chat
Zitieren
#3
(13.08.2022, 00:45)admin schrieb: Add-ons sind so ein Fall für sich , aber man kann halt Sachen machen die eine Webseite nicht kann, auf andere Tabs schließen usw.
Ich habe mir auch schon das E-Besucher-Add-on umgebaut, damit es auch läuft, wenn man andere Add-ons nutzt usw.

Ich verstehe nur noch nicht genau was du da genau vorhast,
Warum hast du 1000 Tabs auf?
Ich habe ja auch schon oft bis 100 Tabs auf , aber so viele nie.
Du schreibst das

Jenes Adddon sollte normalerweise folgendes machen:
Tab 1 öffnen, addon klicken, Tab 2 öffnen, wieder addon klicken.
Dann sollten Alle Tabs, die zwischen Tab 1 und Tab 2 liegen , geshclossen werden (inklusive der "Grenztabs").


Wieso Tabs öffnen?
Die sind doch schon auf, oder?

Kann das sein das du z. B. 1000 Tabs aufhast und du die einmal am Tag oder so durchklicken willst zwecks Geld verdienen, Klickzahlen oder sonst irgendwas?
Wenn es darum geht, gibt es sicherlich einfache Wege.
Zb alle Seiten in ein Array speichern und das Addom öffnen eine Seite nach der nächsten in ein Tab..

Falls das nicht so ist, verstehe ich noch nicht ganz, was du davor hast.
Zb Chrome kann alle Seiten schließen , oder alle Seiten rechts oder Links von dem Tab wo man gerade ist.
Kannst du mir mal Link von dem Add-on schocken .

Ich habe mich da vermutlich falsch ausgedrückt:
Zumachen, nicht aufmachen soll es die Tabs.

Warum so viele, gute Frage.
Bis der Tag zu Ende ist, mache ich halt Alles mögliche auf.



Jenes Adddon sollte normalerweise folgendes machen:
Tab 1 öffnen, addon klicken, Tab 2 öffnen, wieder addon klicken.
Dann sollten Alle Tabs, die zwischen Tab 1 und Tab 2 liegen , geshclossen werden (inklusive der "Grenztabs").


Na, ich meinte halt "zu den Tab wechseln".
Klar sind die alle auf.
man wechselt halt zu tab 46, addon klicken, dann zu tab 79 wechseln, wieder addon klicken.
Nun nun sollten haargenau die tabs 46-79 geschlossen werden.

Und nur die, also eben NICHT die tabs <45 oder >79 angetastet werden.

Aber irgendwas läuft da schief, irgendwie werden da flascherweise dann alle Tabs kleiner der Obrgrenze geshclossen und nicht nur die in dem Intervall.

Der normale Schwachsinn mit "Alle Tab links/rechts hiervon" und Ähnliches bringen es mir nicht, den uatshc könnte fiefox ja auch so
schon.

Ich ghee halt üblicherweise hin, gucke alle paar Tage, wenns zu viel tabs werden, die Liste durch ud sehe
"Hm, die Tabs 32-49, 77, 214-307, usw. könnte man schließen"

Problem nur:
Firefox ist einfahc nur scheiße in der Hinsicht, in der Tab liste (oben rechts der pfeil nahc unten anklicken) kann man gar nix löschen.
Also muss ich händisch zu Tab 32 wechseln, das scheiß kleine x oben in der Leiste bei dem tab anklicken, dann kurz warten bis tab zu ist und naturgemäß der tab rechts davon geladen wird, wieder das kleine x antippen, etc.

Und zwischendurch immer wieder die tabliste aufmachen weil man nur da den vollen titel des Tabs und nicht nur die ersten 5 zeichen  sieht.

Das nervt.
Da braucht man 10 minuten um mal 30 tabs zu schließen.

und wenn ich in der tabliste sehe, dass zwischendrin 60 aufeinanderfolgende tabs geschlossen werden könnten, dann will ich die nicht einzeln stück für stück für stück schließen müssen.
wobei ich auch nicht zu schnell klicken darf, denn wenn ich nen tab offen habe und das x klicke, braucht firefox nen moment um den tab wegzumachen und zum tab rechts davon zu wechseln.
klicke ich zu schnell minimiert er stattdessen das fenster.
was ich dann wieder maximieren darf und dann geht die msitarbeit von vorne los.

Insofern würde hier eing escheites addon wunder tun.


Achja, hier das addon um das es geht:
https://addons.mozilla.org/en-US/firefox...tiple-tab/

dessen .js code habe ich sprichwörtlich von dem installierten addon aus dem firefox profile ordner, ist also der Original Code der da ausgeführt wird :-)
Zitieren
#4
Hallo,
ich habe mit meinen (sehr beschränkten) Javascriptkenntnissen und einigem Api NAchschlagen nun was zusammengeschustert, von dem ich hoffe dass es fehöerfrei ist und das tut, was es soll (Ich traue mich nicht, es auszuführen. Ganz zu schweigen dass ich keine Ahnung habe, wie ich den Code nun in ein nutzbares AddOn reinkriege):

'use strict';
chrome.browserAction.onClicked.addListener(function(aTab, event) {
	async function test(){
	
		
		let badgetext = browser.browserAction.getBadgeText({});
		if(badgetext===""){
			let currTab = await browser.tabs.getCurrent(); 
			chrome.browserAction.setBadgeText({text: ''+currTab.index});
			return;			
		}
		else{
			let tabaindex=parseInt(badgetext);
			let tabbindex=(await browser.tabs.getCurrent()).index;
			
			if (tabaindex>tabbindex){
				let help=tabaindex;
				tabaindex=tabbindex;
				tabbindex=help;
			}
			
			Delete(tabaindex,tabbindex);
			
			
			
			
			
			chrome.browserAction.setBadgeText({text:''});	
			return;
		}
	}
 test();
 
 




	async function callToDelete(startIndex, endIndex)
	{
		let chosenTabsIndexes = new Array();
		let allTabs = await browser.tabs.query({});
		
		
		for (let i = startIndex+1; i <= endIndex-1; i++) {
			chosenTabsIndexes.push(allTabs[i].id);
			
		}
		
		let removing = browser.tabs.remove(chosenTabsIndexes);
		removing.then(console.log('WIN!'),console.log('ERROR!'));
		
	}


});

Was er, so meine Hoffnung, tun sollte:
Wird auf das AddonIcon geklickt, dann wird geguckt welcher Badge" Wert da hinterlegt ist.
Ist da nur ein leerer String, dann wird der Index vom aktuellen Tab gesucht und da reingepackt.
ist hingegen ein nicht-leerer String drin, wird dieser String im hinterkopf gemerkt als "startindex" sozusagen.
der EndIndex wird auf den index des aktuell fokussierten Tabs gelegt.


kurzum, ich habe nun also den Index des ersten uznd den index des letzten Tabs, alles dazwischen soll später gelöscht werden.

Nun gehen wir mit diesen 2 zahlen in die Delete Methode rein:
Wir bauen uns ein anfangs leeres Array an Indizes.
sowie ein Array, in dem alle Tabs drin sind.

Mit klassischer for schleife betrachten wir alle diejenigen tabs deren index zischen den gegebenen Grenzen liegt, und fügen deren jeweilige id in das array an indexwerten ein.

damit wir einfahc eine lsite/array an ids von tabs haben, die gelöscht werden sollen.
dann wird, simpel und plumb, diese liste an ids an die remove funktion übergeben (laut mozilllaseiten sollte die methode auch ein array verwerten können).
jsut for fun lassen wir im erfolgsfall, wenn also allesproblemlos gelöscht wurde, ein win ausgeben, andernfalls ein error.

achja, in der hauptmmethode wird, nahcdem der ganze löschkram durch ist, natürlich das badge nun wieder auf den leeren string gesetzt.

kurzum, der badgetext, insofenr vorhanden, "speichert" den startindex.
und der endindex ist der index des aktuellen tabs, der beim 2. klicken gerade aktuell ist.


macht das so sinn und ist es richtig umgesetzt?

Und wie baue ich da nun wieder ein addon draus?

habe mir die struktur in so einem addon zip file angeguckt, die manifest.js datei ist ja nicht wirklich schwer zu bauen und die background.js habe ich im prinzip shcon, nur den kram in dem META_INF Ordner weiß ich nicht wo ich den herbekomme Undecided
Zitieren
#5
Ich habe das Add-on noch nicht getestet , weil ich Chrome nutzte. Werde das aber Häute noch testen.
Wenn ich dich richtig verstehe, würde ich es so bauen. Erstmal eine Liste mit allen geöffneten Tabs. Jeder Tab sollte da eine Checkbox haben zum Löschen. Zb man könnte das 100 Checkboxen anklicken und dann mit einem close Button die auch löschen.

Dann könnte man auch noch 2 Input Felder erzeugen wo man angeben kann , schließe von bis.
In der tab liste könnte man neben der Checkbox auch noch die Zeiten reinschreiben, wann sie das letzte Mal aktiv war (also angeklickt).
Wenn die Seite schon 1 Tage nicht mehr benutzt wurde oder so könnte man das Farblich anders gestalten , oder vielleicht eine Auto close Funktion einbauen.

Vielleicht kann man die Tabs selber auch färben die schon länger auf sind

Bei Chrome kann man Add-ons selber darauf machen so.
Add-on von irgendwo herunterladen und entpacken
Datein ändern, wie man es will .
chrome://extensions/ im Browser eingeben und da den Entwicklermodus aktivieren.
Dann kann man da die entpackte, geänderte Version hochladen.

Ob das Firefox auch kann weiß ich nicht.
Du könntest höchstens versuchen den speicher Ort der Add-ins herauszufinden und da dann die Daten ändern.
Das geht bei Chrome auch, ist erstmal nur nee sucherrei wo der Speicherort auf der Festplatte ist . Aber das kann man ergoogeln
Hier sind alle meine Lösungen aus allen Foren. Ich helfe auch in Facebook-chat
Zitieren
#6
(13.08.2022, 21:03)admin schrieb: Ich habe das Add-on noch nicht getestet , weil ich Chrome nutzte. Werde das aber Häute noch testen.
Wenn ich dich richtig verstehe, würde ich es so bauen. Erstmal eine Liste mit allen geöffneten Tabs. Jeder Tab sollte da eine Checkbox haben zum Löschen. Zb man könnte das 100 Checkboxen anklicken und dann mit einem close Button die auch löschen.

Dann könnte man auch noch 2 Input Felder erzeugen wo man angeben kann , schließe von bis.
In der tab liste könnte man neben der Checkbox auch noch die Zeiten reinschreiben, wann sie das letzte Mal aktiv war (also angeklickt).
Wenn die Seite schon 1 Tage nicht mehr benutzt wurde oder so könnte man das Farblich anders gestalten , oder vielleicht eine Auto close Funktion einbauen.

Vielleicht kann man die Tabs selber auch färben die schon länger auf sind

Bei Chrome kann man Add-ons selber darauf machen  so.
Add-on von irgendwo herunterladen und entpacken
Datein ändern, wie man es will .
chrome://extensions/ im Browser eingeben und da den Entwicklermodus aktivieren.
Dann kann man da die entpackte, geänderte Version hochladen.

Ob das Firefox auch kann weiß ich nicht.
Du könntest höchstens versuchen den speicher Ort der Add-ins herauszufinden und da dann die Daten ändern.
Das geht bei Chrome auch, ist erstmal nur nee sucherrei wo der Speicherort auf der Festplatte ist . Aber das kann man ergoogeln


Ich habe noch etwas rumprobiert:
'use strict';
console.log('Script starting!');
browser.browserAction.setBadgeText({text: 'U'});
browser.browserAction.onClicked.addListener(function(aTab, event) {
	console.log('clickevent starting!');
	
	async function test(){
	console.log('test funtion called!');
	
		
		let badgetext = await browser.browserAction.getBadgeText({});
		console.log('old badgetext is '+badgetext+'!');
		if((badgetext==='')||(badgetext==='U')){
			let currTab = aTab; 
			browser.browserAction.setBadgeText({text: ''+currTab.index+''});
			return;			
		}
		else{
			let tabaindex=parseInt(badgetext);
			let taby=aTab
			let tabbindex=taby.index;
			
			if (tabaindex>tabbindex){
				let help=tabaindex;
				tabaindex=tabbindex;
				tabbindex=help;
			}
			
			callToDelete(tabaindex,tabbindex);
			
			
			
			
			
			browser.browserAction.setBadgeText({text:''});	
			return;
		}
	}
	
 test();
 
 




	async function callToDelete(startIndex, endIndex)
	{
		console.log('Inside the calltodelete function!');
		let chosenTabsIndexes = new Array();
		let allTabs = await browser.tabs.query({});
		
		
		for (let i = startIndex+1; i <= endIndex-1; i++) {
			chosenTabsIndexes.push(allTabs[i].id);
			
		}
		
		let removing = browser.tabs.remove(chosenTabsIndexes);
		removing.then(console.log('WIN!'),console.log('ERROR!'));
		
	}


});


Ich glaube, mittlerweile funktioniert mein Code sogar, er shceint mir wirklich genau die Tabs zwischen 2 Zieltabs zu schließen! :O

Ob das nun wirklich auch funktioniert bei großen Tabmengen, also wenn ich Tab 347 bis 863 schließen will, ob er da nicht durchdreht und Unsinn macht, weiß ich nicht.

Aber zumindest wenn ich mal so 2-3 Zwischentabs shcließen lasse, da funktioniert er einwandfrei bisher.

Jetzt braucht es Feldttests.

Was ich auch rausfand, was meine Hauptfehler waren:
1. blabla.getCurrent() war unddefined wie ich anch zig console.log Tests rausfand.
Nach googeln ist es nun so dass dem clickeventhandler automatisch eine referenz auf den aktuellen tab übergeben wird die, warum auch immer, in der aTab variable gespeichert wird (ich habe keine ahnung warum man das function(aTab,event) so schreibt).
tatsache ist aber dass ich nun überall wo ich mit getCurrent() den aktuellen tab holen wollte, nun einfahc aTab hinschreibe und es läuft :-)

2. waren noch so ein paar kleinere Schönheitsfehler drin wie fehlende Klammern, fehlende Anführungszeichen und sowas.

Aktuell wie gesagt, scheint es mal zu funktionieren wenn ich dmait 3-4 tabs auf einmal schließe.
jetzt müssen feldtests gemahct werden ob es auch noch läuft wenn wir von hunderten tabs reden :-)


PS: Ich muss mal noch rausfinden wie man das offiziell hochlädt als "permanentes" addon.
derzeit, auch aus testgründen, habe ich es nur über das about:debugging menü als temporären tab ausprobiert.

Aber falls es laufen sollte, will ich es ja dann als offizielles Addon dauerhaft zur Verfügung haben :-)
Zitieren


[-]
Schnellantwort
Nachricht
Geben Sie hier Ihre Antwort zum Beitrag ein.

 

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste