Alles ist gut
In der Tat und die Vorarbeit mit den ganzen Scripten hat mir nach dem Update auf Fx 115 null Arbeit bereitet, feine Sache das.
Alles ist gut
In der Tat und die Vorarbeit mit den ganzen Scripten hat mir nach dem Update auf Fx 115 null Arbeit bereitet, feine Sache das.
und die Vorarbeit mit den ganzen Scripten
Auch hier gab es keinerlei Probleme, alles hat sofort gepasst
Auch hier gab es keinerlei Probleme
Eine kleine Neuerung musste angepasst werden und zwar die neuen Button im Tab-Manager-Dropdown, 20 Sek. und fertig wars.
die neuen Button im Tab-Manager-Dropdown
Ok, die habe ich hier in meinem Hauptprofil schon lange ausgeblendet.
Nur in meinen Testprofilen ist der noch vorhanden.
muss ich die
notwendigen Änderungen noch übertragen?Hallo Endor, so passt es wieder:
JavaScript Alles anzeigen// ==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 (+ Mischung aus diversen Varianten aus dem Fuchsforum 1.11.21) // @note Sicherungsdatei enthaelt auch Profilname // @reviewURL http://bbs.kafan.cn/thread-1758785-1-1.html (function () { ChromeUtils.importESModule("resource:///modules/CustomizableUI.sys.mjs"); CustomizableUI.createWidget({ id : "Backup-button", defaultArea : CustomizableUI.AREA_NAVBAR, label : "Profilsicherung", tooltiptext : "Sichern der aktuellen Konfiguration", onClick: function(){ // Speicherort - Ordner festlegen - Sichern funktioniert nur wenn Speicherort- bzw. Ordner vorhanden ist!! var path = "F:\\Sicherung"; // 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 = ChromeUtils.importESModule('resource://gre/modules/FileUtils.sys.mjs').FileUtils; var dir = new FileUtils.File(PathUtils.join(PathUtils.profileDir,[])); let d = new Date(); d = d.getDate() + '.' + (d.getMonth() + 1).toString().padStart(2, '0') + '.' + d.getFullYear().toString().padStart(2, '0') + ' ' + d.getHours().toString().padStart(2, '0') + '\uA789' + d.getMinutes().toString().padStart(2, '0') + '\uA789' + d.getSeconds().toString().padStart(2, '0'); // Die folgende Zeile formt den Archivnamen var archiveName = 'Profil Nightly ' + ' ' + d + '.zip'; /* 'd' ersetzt 'localnow' */ 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(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1%2B%2FAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNC8xMS8wOGGVBZQAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzQGstOgAAABxklEQVQ4ja2UMUgbURjHfxeSFBzuBEuCkkAgIA5JDdzWohVnQe3UpRDE2UXpKKXdWro4ixlcdNJAydxiyHZkCIKIOEnLpZQSRFFz%2Bjqk73nvuDtb2j883nv%2F73u%2F%2B%2B69ewf%2FWUZgbgEFYDgiPw18B86An8DtQw%2BYdF1XRLVGoyGEEKJara4Bj0MKIhGYDxuGQVSTqtVqH0ql0uzvNzLigCQSicjmeZ7K63Q6u5VKZRoYigXGVWhZlpbbbrfrwKjfS4ZVGKVCoUCz2aTX65FOp6WdA04igf69CsqyLMrlctAWsRXGAf9EavXyFELEZT4A2TwYsLQKF%2BYXAJhb3VPep4%2BLzK3uqd7vS9Xr%2B2qsAW9u4eyoxcZSFoCVLZfTwxaA6v2xjaUsuYmnWrU60IOr%2FmD8etvl%2Fausikl%2FZcsFULEbD02hwPUdl7cvs1qiBAb9eOCdwdjEM2AABdh88wJA%2BbK%2FX6MDtVPmHyRPOfjRPfc87%2FPfgJLJ5AzwRc0BbNseB8a63e6TuKsXpnw%2BP5nJZAzgq%2BM4x3IPzwFM07woFovv%2Bv3%2BUDTiXqlU6tI0zQs%2FI%2FSe2bYt%2FyCPgJFA%2BAdwDeA4zrfg2l%2BwUqCoC1F3YQAAAABJRU5ErkJggg%3D%3D)' + '}}'; 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); })();
Zeile 20 muss dann selber angepasst werden, ebenso Zeile 50 die Bezeichnung.
Funktioniert so erst ab Fx 115.
Mein Firefox hat sich gerade auf die Version 115 aktualisiert. Ich habe mein Skript bereits nach deinem Code angepasst. Jetzt sind nur noch die Zeilen 20, 23 und 50 anders.
Die beiden Dateien main.js und config.js habe ich bereits für Version 115 ausgetauscht (Firefox 115 - Wichtige Änderung zur Nutzung von Skripten!).
Allerdings ist nun der Button nicht mehr zu finden, über den das Backup gestartet wird. Ich stehe gerade auf dem Schlauch und finde den Fehler nicht.
Hier zur Sicherheit mein Skript:
// ==UserScript==
// @name BackupProfile.uc.js
// @description Schaltfläche zum Sichern des Firefoxprofils
// @charset UTF-8
// @author ywzhaiqi?defpt
// @version v2021.25.10
// @note Vorlage Script von ywzhaiqi (+ Mischung aus diversen spaeteren Varianten)
// @note Sicherungsdatei enthaelt auch Profilname
// @source https://www.camp-firefox.de/forum/thema/112673-userchrome-js-scripte-f%C3%BCr-den-fuchs-diskussion/?postID=1229047#post1229047
// @compatibility Firefox v115
(function () {
ChromeUtils.importESModule("resource:///modules/CustomizableUI.sys.mjs");
CustomizableUI.createWidget({
id : "Backup-button",
defaultArea : CustomizableUI.AREA_NAVBAR,
label : "Profilsicherung",
tooltiptext : "Sichern der aktuellen Konfiguration",
onClick: function(){
// Speicherort - Ordner festlegen - Sichern funktioniert nur wenn Speicherort- bzw. Ordner vorhanden ist!!
var path = "F:\\OneDrive\\Configs\\Mozilla Firefox\\";
// var path = "";
// Ausschlussliste
var excludes = '*cache* crashes chrome_debugger_profile fftmp *healthreport* minidumps safebrowsing *webapps* saved-telemetry-pings *thumbnails* *session* *Telemetry* *hotfix* *.sqlite-shm *.sqlite-wal *.bak parent.lock blocklist.xml directoryLinks.json compatibility.ini';
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 = ChromeUtils.importESModule('resource://gre/modules/FileUtils.sys.mjs').FileUtils;
var dir = new FileUtils.File(PathUtils.join(PathUtils.profileDir,[]));
let d = new Date();
d = d.getDate() + '.' + (d.getMonth() + 1).toString().padStart(2, '0') + '.' + d.getFullYear().toString().padStart(2, '0') + ' ' + d.getHours().toString().padStart(2, '0') + '\uA789' + d.getMinutes().toString().padStart(2, '0') + '\uA789' + d.getSeconds().toString().padStart(2, '0');
// Die folgende Zeile formt den Archivnamen
var archiveName = 'Mozilla Firefox Profil' + ' - ' + d + '.zip'; /* 'd' ersetzt 'localnow' */
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(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1%2B%2FAAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNC8xMS8wOGGVBZQAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzQGstOgAAABxklEQVQ4ja2UMUgbURjHfxeSFBzuBEuCkkAgIA5JDdzWohVnQe3UpRDE2UXpKKXdWro4ixlcdNJAydxiyHZkCIKIOEnLpZQSRFFz%2Bjqk73nvuDtb2j883nv%2F73u%2F%2B%2B69ewf%2FWUZgbgEFYDgiPw18B86An8DtQw%2BYdF1XRLVGoyGEEKJara4Bj0MKIhGYDxuGQVSTqtVqH0ql0uzvNzLigCQSicjmeZ7K63Q6u5VKZRoYigXGVWhZlpbbbrfrwKjfS4ZVGKVCoUCz2aTX65FOp6WdA04igf69CsqyLMrlctAWsRXGAf9EavXyFELEZT4A2TwYsLQKF%2BYXAJhb3VPep4%2BLzK3uqd7vS9Xr%2B2qsAW9u4eyoxcZSFoCVLZfTwxaA6v2xjaUsuYmnWrU60IOr%2FmD8etvl%2Fausikl%2FZcsFULEbD02hwPUdl7cvs1qiBAb9eOCdwdjEM2AABdh88wJA%2BbK%2FX6MDtVPmHyRPOfjRPfc87%2FPfgJLJ5AzwRc0BbNseB8a63e6TuKsXpnw%2BP5nJZAzgq%2BM4x3IPzwFM07woFovv%2Bv3%2BUDTiXqlU6tI0zQs%2FI%2FSe2bYt%2FyCPgJFA%2BAdwDeA4zrfg2l%2BwUqCoC1F3YQAAAABJRU5ErkJggg%3D%3D)'
+ '}}';
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
Über "Symbolleiste anpassen" sehe ich auch kein Symbol, das ich in die Leiste schieben könnte. Wo klemmt es bei mir?
nun der Button nicht mehr zu finden
So sieht das mit deinem Skript hier aus:
Wobei das Icon auch an anderer Stelle erscheinen könnte.
Hallo DenalB !
Teste diese Version das ist die aktuelle Version.
Du musst nur noch Deine Anpassungen übertragen:
https://github.com/Endor8/userChr…upProfile.uc.js
Lass den Scriptcache löschen beim Firefox Neustart.
Hoffe es funktioniert.
Mfg.
Endor
Wobei das Icon auch an anderer Stelle erscheinen könnte.
Finde es einfach nicht ...
Teste diese Version das ist die aktuelle Version.
Ich habe jetzt mal direkt das Skript genutzt. Also, zuerst habe ich den Firefox im Fehlerbehebungsmodus gestartet und wieder beendet. Dann habe ich das Skript ausgetauscht und Firefox normal gestartet. Aber wieder gibt es keinen Button.
Du musst den SCriptcache noch löschen lassen.
Nach jeder Änderung sonst geht es nicht.
Gib dazu about:support in die Adressleiste ein
nachdem sich die Seite geöffnet hat rechts oben auf Schaltfläche
Start-Cache löschen klicken.
Mfg.
Endor
Alternativ 1x im Fehlerbehebungsmodus starten, dann wieder normal.
Du musst den SCriptcache noch löschen lassen.
Alternativ 1x im Fehlerbehebungsmodus starten, dann wieder normal.
Das habe ich doch getan ...
Also, zuerst habe ich den Firefox im Fehlerbehebungsmodus gestartet
Das habe ich doch getan
Sorry, hatte ich überlesen.
Funktionieren denn andere Skripte?
Gib dazu about:support in die Adressleiste ein
nachdem sich die Seite geöffnet hat rechts oben auf Schaltfläche
Start-Cache löschen klicken.
Das habe ich nun auch noch getan. Aber es hat sich nichts geändert ...
Funktionieren denn andere Skripte?
Ich nutze nur 2 Skripte ... BackupProfile.uc.js und Download-Popup.uc.js. Wobei ich gerade bemerke, dass das Download-Popup sich auch nicht öffnet.
Funktionieren denn andere Skripte?
?
dass das Download-Popup sich auch nicht öffnet.
Dann überprüf bitte ganz genau, ob die Änderungen alle richtig sind für die Nutzung der Skripte ab Version 115.
/* Tabs nummerieren */
// ==UserScript==
// @name Numbered Tabs
// @namespace http://anttirt.net/
// @description Adds numbers to tab labels (useful with eg. Pentadactyl)
// @include main
// @compatibility Firefox 4.0
// @author anttirt
// @version 1.0b
// @homepage https://github.com/anttirt/numbered-tabs-firefox
// ==/UserScript==
(function() {
var stripPat = /^\d\d* /;
var container = gBrowser.tabContainer;
function update(event) {
var tab = event.target;
if(typeof tab.tabIndex == "undefined") {
updateAll();
}
else {
tab.label = String(tab.tabIndex) + " " + tab.label.replace(stripPat, "");
}
}
function updateAll(event) {
var skip = false;
for(var i = 0; i < container.allTabs.length; ++i) {
var tab = container.allTabs[i];
if(event.type == "TabClose" && tab == event.target) {
skip = true;
continue;
}
tab.tabIndex = i + (skip ? 0 : 1);
tab.label = String(tab.tabIndex) + " " + tab.label.replace(stripPat, "");
}
}
container.addEventListener("TabAttrModified", update, false);
container.addEventListener("TabOpen", updateAll, false);
container.addEventListener("TabMove", updateAll, false);
container.addEventListener("TabClose", updateAll, false);
})();
Alles anzeigen
Wo wäre da ein entsprechend störender Code?
Dann überprüf bitte ganz genau, ob die Änderungen alle richtig sind für die Nutzung der Skripte ab Version 115.
Ich bin nun alle Änderungen, die nötig sind, nochmals durchgegangen. Was auch immer bei meinem ersten Durchgang passiert ist, nun funktioniert es. Der Button zur Profilsicherung ist wieder dort, wo ich ihn erwarte und die Sicherung funktioniert.
Vielen Dank 2002Andreas und Endor !
nun funktioniert es.
Ich nutze nur 2 Skripte ... BackupProfile.uc.js und Download-Popup.uc.js. Wobei ich gerade bemerke, dass das Download-Popup sich auch nicht öffnet.
Du musst auch berücksichtigen, dass in einige Skripte Moduldateien eingelesen werden, die die Endungen .jsm hatten. JSM-Dateien werden und wurden in ESM-Dateien konvertiert, die die Endung .sys.mjs haben. In Skripten, die Symbole anlegen, kommt in der Regel die Datei CustomizableUI.jsm vor, die jetzt CustomizableUI.sys.mjs heißt und mit der Funktion ChromeUtils.importESModule eingelesen wird:
Im Skript BackupProfile.uc.js kommt das vor, das zweite Skript kenne ich nicht.
Wo wäre da ein entsprechend störender Code?
Hat mit dem Skript nichts zu tun.
Es muss also etwas anderes sein bei dir
Dann werde ich mal suchen...