Nun aber auch öfter mal machen
mindestens 1 mal im monat will ich es machen, aber ich vergesse es immerwieder. ![]()
Nun aber auch öfter mal machen
mindestens 1 mal im monat will ich es machen, aber ich vergesse es immerwieder. ![]()
Damit hat es eben hier funktioniert:
Dankeschön hab mich bedient. ![]()
Auch euch all Anderen dankeschön. Hab das von 2002Andreas mit dem von mir verglichen und gab einiges das anderst war. hab somit das von ihm genommen und den pfad und icon für mich angepasst. ![]()
Jetzt funkt es wieder. ![]()
Ich wollte auch grad mal testen, aber beim mir funkt das Script nicht mehr.
Hier das Script:
// ==UserScript==
// @name BackupProfile.uc.js
// @namespace BackupProfile.github.com
// @description Schaltfläche zum Sichern des Firefoxprofils
// @charset UTF-8
// @author ywzhaiqi、defpt
// @version v2018.01.10
// @note Vorlage Script von ywzhaiqi
// @note Sicherungsdatei enthaelt auch Profilname (v2017.12.23); Ersatz veralteter Funktionen (v2017.12.28b)
// @reviewURL http://bbs.kafan.cn/thread-1758785-1-1.html
(function () {
Components.utils.import("resource:///modules/CustomizableUI.jsm");
CustomizableUI.createWidget({
id : "Backup-button",
defaultArea : CustomizableUI.AREA_NAVBAR,
label : "Profilsicherung",
tooltiptext : "Sichern des Profil-Ordners",
onClick: function(){
// Speicherort - Ordner festlegen - Sichern funktioniert nur wenn Speicherort- bzw. Ordner vorhanden ist!!
var path = "D:\\___MozillaFirefox\\FF_Profile_Backup\\";
// var path = "";
// Ausschlussliste
var excludes = 'bookmarkbackups *cache* crashes fftmp *healthreport* minidumps safebrowsing *webapps* saved-telemetry-pings *thumbnails* *session* *Telemetry* *hotfix* *.sqlite-shm *.sqlite-wal *.bak parent.lock blocklist.xml content-prefs.sqlite directoryLinks.json mimeTypes.rdf compatibility.ini parent.lock formhistory.sqlite';
if (!path) {
var nsIFilePicker = Ci.nsIFilePicker;
var FP = Cc['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
FP.init(window, 'Sicherungspfad wählen', nsIFilePicker.modeGetFolder);
if (FP.show() == nsIFilePicker.returnOK) {
path = FP.file.path;
} else {
return false;
}
}
excludes = excludes.replace(/\./g, '\\.').replace(/\*/g, '.*').replace(/\s+/g, '|');
excludes = new RegExp(excludes, 'i');
var zw = Cc['@mozilla.org/zipwriter;1'].createInstance(Ci.nsIZipWriter);
var pr = {PR_RDONLY: 0x01, PR_WRONLY: 0x02, PR_RDWR: 0x04, PR_CREATE_FILE: 0x08, PR_APPEND: 0x10, PR_TRUNCATE: 0x20, PR_SYNC: 0x40, PR_EXCL: 0x80};
var fu = Cu.import('resource://gre/modules/FileUtils.jsm').FileUtils;
var dir = fu.getFile('ProfD', []);
let d = new Date();
d = d.getDate().toString().padStart(2, '0') + '.' + (d.getMonth() + 1).toString().padStart(2, '0') + '.' + d.getFullYear() + ' um ' + d.getHours().toString().padStart(2, '0') + '\u2236' + d.getMinutes().toString().padStart(2, '0');
// Die folgende Zeile formt den Archivnamen
// z.B.: Profil Nightly 1 2021.11.01 Zeit: 17:51.zip
var archiveName = 'FirefoxProfile ' + ' ' + d + '.zip';
var xpi = fu.File(path + '\\' + archiveName);
zw.open(xpi, pr.PR_RDWR | pr.PR_CREATE_FILE | pr.PR_TRUNCATE);
var dirArr = [dir];
for (var i=0; i<dirArr.length; i++) {
var dirEntries = dirArr[i].directoryEntries;
while (dirEntries.hasMoreElements()) {
var entry = dirEntries.getNext().QueryInterface(Ci.nsIFile);
if (entry.path == xpi.path) {
continue;
}
if (entry.isDirectory()) {
dirArr.push(entry);
}
var relPath = entry.path.replace(dirArr[0].path, '');
if (relPath.match(excludes)) {
continue;
}
var saveInZipAs = relPath.substr(1);
saveInZipAs = saveInZipAs.replace(/\\/g,'/');
// Konfigurationsdateien können gesperrt werden
try {
zw.addEntryFile(saveInZipAs, Ci.nsIZipWriter.COMPRESSION_FASTEST, entry, false);
} catch (e) {}
}
}
zw.close();
alert('Die aktuelle Konfiguration wurde als:\n'+ archiveName +'\ngesichert in:\n' + path);
function alert(aString, aTitle) {
Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService).showAlertNotification("", aTitle, aString, false, "", null);
}
function bupgetCurrentProfileName(){
function readFile(aFile){
var stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream); stream.init(aFile, 0x01, 0, 0);
var cvstream = Cc["@mozilla.org/intl/converter-input-stream;1"].createInstance(Ci.nsIConverterInputStream);
cvstream.init(stream, "UTF-8", 1024, Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
var content = "", data = {};
while (cvstream.readString(4096, data)) {
content += data.value;
}
cvstream.close();
return content.replace(/\r\n?/g, "\n");
}
var PrefD = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("PrefD", Components.interfaces.nsIFile);
var ini = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("AppRegD", Components.interfaces.nsIFile);
ini.append("profiles.ini");
var ini = readFile(ini);
var profiles = ini.match(/Name=.+/g);
var profilesD = ini.match(/Path=.+/g);
for ( var i = 0; i < profiles.length;i++) {
if ((profilesD[i]+"$").indexOf(PrefD.leafName+"$") >= 0) {
profiles[i].match(/Name=(.+)$/);
return RegExp.$1;
}
}
return null;
}
},
});
var cssStr = '@-moz-document url("chrome://browser/content/browser.xhtml"){'
+ '#Backup-button .toolbarbutton-icon {'
+ 'list-style-image:url(file:///C:/Users/Ramo/AppData/Roaming/Mozilla/Firefox/Profiles/g4mso52s.default-release/chrome/Icons/zip.png)'
+ '}}';
var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
sss.loadAndRegisterSheet(ios.newURI("data:text/css;base64," + btoa(cssStr), null, null), sss.USER_SHEET);
})();
Alles anzeigen
Kann evtl. jemand testen und sagen warum es nicht mehr funkt? Das letzte mal hat es am FirefoxProfile 21.07.2023 um 13∶57.zip geklappt. Danach habe ich es bis heute nicht gebraucht.
also ich hab das so, im script das von 2002Andreas eingefügt:
let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // Pfad zum Profilordner und gleich in den entsprechenden Unterordner
let ButtonIcon = "Profilstarten1.png"; // Name & Dateiendung des anzuzeigenden Symbols!
var css =`
#profileschange-button { list-style-image: url("${ProfilePath}/${ButtonIcon}") }
#profileschange-button > image {
width: 40px !important;
height: 40px !important; }
`;
und so sieht es aus:
Habe das Icon extra etwas grösser als den Anderen gemacht..
Und hier nun meine Lösung.
Hab das jetzt getestet. Icon wird angezeigt und der default-Profil wird auch geöffnen (bei mir der Test-Profil) und wenn der Test-Profil offen ist, man nochmals auf Icon klickt kommt Meldung, dass FF schon läuft und man es zuerst beenden soll. Also alles so wie es sein soll meiner Ansicht nach. Besten Dank.
Danke für den Hinweis, ist berichtigt.
Bitteschön.
Mira_Belle der Link im Script vom Beitrag-Nr.
führt hier in diesem Thema auf die Seite 4
Weiss nicht, ob das für dich wichtig ist oder nicht, wollte es mal hier schreiben.
Dieser Link führt zu dem Script im Beitrag-Nr. #116 also wäre das der richtige Link.
Mira_Belle im Beitrag-Nr.
hast du im Script Zeile 11 den ID:
id: 'aboutprofiles-button',
und im Zeile 20 eine andere ID:
id: 'profileschange-button',
muss das nicht gleich sein?
Funktioniert, ist aber noch nicht perfekt.
Sorry, aber ich hab nicht verstanden, was es mit dem profilmanager an in sich geht..
Nochmals sorry.
Es gibt eine keine Änderung, was den Aufruf zum Profilmanager betrifft!
Ist diese Änderung nur für
@Horstmann oder für alle? ![]()
musst Du da auch nur default eintragen
ok wird erledigt. danke.
erledigt: let arguments = ["-no-remote", "-P", "default"]; // Profil wird ausgewählt Hier "XXX" das gewünschte Profil eintragen, z.B. Test
Alles anzeigenBitte, bitte nutze doch das neueste Skript!
Dann ließ Dir bitte ganz genau durch, was Du ändern musst!
Schau Dir Zeile 17 an, ändere dort den Eintrag, auf den Namen, den Dein Symbol hat!
Achte auf die Dateiendung.
Dann kontroliere Zeile 16!!
Wenn Dein Symbol nicht in ..../chrome/icons liegt, musst Du auch DAS anpassen!
Und dann kommen wir noch zur Zeile 40
Auch hier musst Du was ändern, denn das Profil, das Du starten möchtest,
wird mit Sicherheit nicht Standard-Benutzer heißen!
Ändere den Profilnamen! Wahrscheinlich lautet der default-release,
wenn Dein Hauptprofil einfach default heißt.
UND ACHTUNGBevor Du irgendwas machst, ließ Dir den Text hier noch ein zweites Mal durch
und ändere NUR das, was ich Dir vorgegeben habe
![]()
Hab jetzt das Script im Beitrag-Nr.
genommen.
Zeile 15 geänder: let buttonicon = "Profilstarten1.png"; // Name & Dateiendung des anzuzeigenden Symbols. Hier "XXX.xxx" das eigene Symbol inkl. Dateiendung eintragen
Zeile 23 geändert: tooltiptext: 'Profil zusätzlich starten',
Zeile 38 geändert: let arguments = ["-no-remote", "-P", "q5t5vq58.default"]; // Profil wird ausgewählt Hier "XXX" das gewünschte Profil eintragen, z.B. Test
Jetzt sollte es gehen. Danke.
Jetzt geht es.
Habe das bekommen
firefox gestartet das default.
offen gelassen als test nochmals das icon gedrückt.
dann ist das gekommen.
da muss ich auf abbrechen klicken. Ist das bei euch auch so?
Und warum kann man das Icon nicht mehr verschieben?
Somit ist alles richtig.
Keine Ahnung, warum das bei mir passiert ist. Das Script das ich oben gepostet habe, zeigt mir auch kein Icon mehr an.
damit ich nicht verwirrt werde.
ich hatte bis jetzt immer den hauptprofil offen und danach den testprofil zusätzlich gestartet, denn hauptprofil immer offen gelassen und getestet. Hatte das Problem bis jetzt nie. Ich glaube das hat mit dem Script zu tun oder nicht?
Weil das andere Profil default gerade aktiv ist.
Das heisst, man muss den Hauptprofil zumachen nachdem man den Testprofil geöffnet hat?
Na toll. Jetzt hab ich den alten hauptprofil "als hauptprofil nehmen" klickt und jetzt im sehe ich im about:profiles das hier.
Wird das immer so sein, dass der Testprofil änderungen an den einstellungen und profilen macht? ![]()
ACHTUNG: ich hab das script im Beitrag-Nr. #87 genommen und mir den Link und den Tooltip angepasst. Danach FF mit restartbutton neugestartet. Dann war das icon vom script im Beitrag-Nr. 42 glaub ich, dass auch funktionierte plötzlich weg. Dann hab ich über Fehlerbehebungsmodus FF neugestartet und geschlossen und normal gestartet. ES hat mir das FF mit dem Profil das ich als Test nehme geöffnen.
Dann hab ich im about:profiles von dem angeschaut, und es hat den Hauptprofil als "zusätzlich öffnen" angezeigt.
warum?
Ändert das Script auch den Hauptprofil um?
Hier das Script, so wie ich es benütze.
// JavaScript Document
// QuickProfilesChangesButton.uc.js
// Source file https://www.camp-firefox.de/forum/thema/136664/?postID=1231529#post1231529
(function() {
if (location.href !== 'chrome://browser/content/browser.xhtml') return;
try {
CustomizableUI.createWidget({
id: 'aboutprofiles-button',
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); // Profilpfad zum Ordner des Symbols
let buttonicon = "Profilstarten1.png""; // Name & Dateiendung des anzuzeigenden Symbols. Hier "XXX.xxx" das eigene Symbol inkl. Dateiendung eintragen
toolbaritem.onclick = event => onClick(event);
var props = {
id: 'aboutprofiles-button',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: 'true',
label: 'Profil zusätzlich starten',
accesskey: '',
tooltiptext: 'Profil zusätzlich starten',
style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) +'");',
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
} catch(e) { };
function onClick(event) {
if (event.button != 0){
return;
}
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
let arguments = ["-no-remote", "-P", "Standard-Benutzer"]; // Profil wird ausgewählt Hier "XXX" das gewünschte Profil eintragen, z.B. Test
file.initWithPath("C:\\Program Files\\Mozilla Firefox\\firefox.exe"); // Pfad zur Firefox-Installation
// file.initWithPath("/Applications/Firefox.app/Contents/MacOS/firefox"); // Pfad zur Firefox-Installation, Dateipfad für Mac User
let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, arguments, arguments.length); // Profil wird bestätigt
// process.run(false, ["-no-remote"], 1); // Wer lieber das Auswahlfenster von Firefox haben möchte,nutzt diese Zeile!
}
})();
Alles anzeigen
Das hast Du gut gemacht.
Herzlichen Dank
Du brauchtest dazu nur den rot gerahmten Teil des Scriptes (weiter unten), nach oben vor den Eintrag
if (this.enableScriptsToClip) menupopup.appendChild(this.createME("menuitem","Skriptliste in Zwischenablage","uProfMenu.getScripts(1)","uProfMenu_clipboard",0));
kopieren.
Ich glaube genau so hab ich es auch gemacht, falls du oben den Teil des Codes noch nicht angeschaut hast.
Meinst Du das so?
Ja genau. Ich glaub ich hab es auch geschaft..
Aber noch nicht getestet, ob alles noch funkt. ![]()
// Anlegen von Untermenues fuer userChromeJS-Scripte und CSS-Dateien (befuellen spaeter)
var submenu = menupopup.appendChild(this.createME("menu","Scripte",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"));
var submenu = menupopup.appendChild(this.createME("menu","css",0,0,"submenu-css"));
var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-css-items"));
var submenu = menupopup.appendChild(this.createME("menu","CSSShadow",0,0,"submenu-CSSShadow"));
var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-CSSShadow-items"));
var submenu = menupopup.appendChild(this.createME("menu","cssweb",0,0,"submenu-cssweb"));
var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-cssweb-items"));
//Einbindung von abouts Diesen unteren Teil hier oben eingefügt..
if (this.abouts.length>0) {
menupopup.appendChild(document.createXULElement('menuseparator'));
// 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:seiten",this.abouts,"uProfMenu_about",1);
}
}
// Ende Einbindung von abouts bis hier..
if (this.enableScriptsToClip) menupopup.appendChild(this.createME("menuitem","Scriptliste in Zwischenablage","uProfMenu.getScripts(1)","uProfMenu_clipboard",0));
// Ende Anlegen von Untermenues
menupopup.appendChild(document.createXULElement('menuseparator'));
// Einbindung von Konfigdateien
menupopup.appendChild(this.createME("menuitem","userChrome.css","uProfMenu.edit(6,'userChrome.css');","uProfMenu_edit",0));
menupopup.appendChild(this.createME("menuitem","userChromeShadow.css","uProfMenu.edit(6,'userChromeShadow.css');","uProfMenu_edit",0));
Alles anzeigen
Habe das rot geschriebene von unten an dem jetzigen platz kopiert und das von unten mal mit /* und */ für ein moment deaktiviert.
Die rote Farbe ist jetzt weg nach dem speichern. ![]()