Ah, verstehe, also hast Du nicht eine Wiederherstellung von Tabs gemeint,
sondern eine Wiederherstellung einer Sitzung.
Ok.
Ah, verstehe, also hast Du nicht eine Wiederherstellung von Tabs gemeint,
sondern eine Wiederherstellung einer Sitzung.
Ok.
Am interessantesten finde ich das Script 33p_Archiv_restore.ps1.
Zum Sichern der Profile habe ich schon was.
Das werde ich mir bei Gelegenheit und Zeit mal vornehmen.
1. Würde ich gerne eine Überprüfung, ob der Firefox gerade läuft, integrieren.
2. Möchte ich das Entpacken direkt in den richtigen Ordner machen, ob dieser besser vorher gelöscht werden muss
oder einfach überschrieben wird, muss ich erst noch sehen. Glaube aber, löschen ist der bessere Weg.
Also das mit Tabs wiederherstellen hat nicht geklappt, ist aber auch egal. ich hoffe dass das Rest klappt.
War das eine Funktion "Mit der rechten Maustaste auf das Plus klicken"?
Ein anderer Ansatz!
Dennoch stecke ich fest.
Der Button wird angezeigt, beim Betätigen tut sich jedoch nichts.
Stehe total auf dem Schlauch ![]()
(function() {
// start customisation area----------------------------------
let profilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'))
// let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
let buttonIcon = "user-group_2.svg" // Name & Dateiendung des anzuzeigenden Symbols
// end customisation area-----------------------------------
if (!window.gBrowser) return;
CustomizableUI.createWidget({
id: 'aboutprofiles-button',
defaultArea: CustomizableUI.AREA_NAVBAR,
label: 'Quicklink: about:profile',
tooltiptext: 'Quicklink:\nabout:profiles',
onCommand: onCommand,
onCreated: function(button) {
button.style.listStyleImage = "url('" + profilePath + buttonIcon + "')";
}
});
function onCommand(profileData) {
let parent = document.getElementById("profiles");
let div = document.createElement("div");
parent.appendChild(div);
let name = document.createElement("h2");
div.appendChild(name);
document.l10n.setAttributes(name, "profiles-name", {
name: profileData.profile.name,
});
openProfile(profileData.profile);
};
})();
Alles anzeigen
Ich bräucht Hilfe von einem JavaScript Experten.
Aber welche Dateien soll ich wieder im aktuellen Profil-Ordner kopieren, damit alles wieder beim Alten ist?
Von wo bitte hast Du was in Deinen Profilordner reinkopiert?
Was hast Du vorher am, oder im Profilordner gemacht?
Wenn Du weitere Details dazu benötigst, dann sag bitte an
Vielen Dank auch,
und das RestoreScript?
Was sind das denn für interessante PowerShell - Skripts?
Würdest Du die zur Verfügung stellen?
Das war ja nun aber zu erwarten. Ein Programm zu öffnen ist etwas völlig anderes als eine URL in Firefox zu öffnen. Dass eine Funktion, die das eine macht, nicht gleichzeitig auch das andere macht, ist naheliegend. In der von Horstmann verlinkten Datei dürfte eh schon die relevante Logik stehen, um Firefox mit einem bestimmten Profil zu öffnen. Da kann man sich bestimmt bedienen.
Jep, bin ich nach einigen Überlegungen auch drauf gekommen.
Gehe gerade der von Horstmann gelegten Spur nach!
Der Code, auf den verwiesen wird, lautet so:
Die Sache ist nur, es ist völlig egal von welchem Profil ich diesen Button "verfolge",
if (!profileData.isInUse) {
let runButton = document.createElement("button");
document.l10n.setAttributes(runButton, "profiles-launch-profile");
runButton.onclick = function () {
openProfile(profileData.profile);
};
div.appendChild(runButton);
}
Es wird immer auf diese Zeilen verwiesen.
Wie merkt die Anweisung, welche Profilinstanz geöffnet werden muss? ![]()
Ich glaube, es hängt mit diesem div zusammen.
Mh, ich glaube, ich bin auf der richtigen Spur.
Hier mal der ganze Code.
function display(profileData) {
let parent = document.getElementById("profiles");
let div = document.createElement("div");
parent.appendChild(div);
let name = document.createElement("h2");
div.appendChild(name);
document.l10n.setAttributes(name, "profiles-name", {
name: profileData.profile.name,
});
if (profileData.isCurrentProfile) {
let currentProfile = document.createElement("h3");
document.l10n.setAttributes(currentProfile, "profiles-current-profile");
div.appendChild(currentProfile);
} else if (profileData.isInUse) {
let currentProfile = document.createElement("h3");
document.l10n.setAttributes(currentProfile, "profiles-in-use-profile");
div.appendChild(currentProfile);
}
let table = document.createElement("table");
div.appendChild(table);
let tbody = document.createElement("tbody");
table.appendChild(tbody);
function createItem(title, value, dir = false) {
let tr = document.createElement("tr");
tbody.appendChild(tr);
let th = document.createElement("th");
th.setAttribute("class", "column");
document.l10n.setAttributes(th, title);
tr.appendChild(th);
let td = document.createElement("td");
tr.appendChild(td);
if (dir) {
td.appendChild(document.createTextNode(value.path));
if (value.exists()) {
let button = document.createElement("button");
button.setAttribute("class", "opendir");
document.l10n.setAttributes(button, "profiles-opendir");
td.appendChild(button);
button.addEventListener("click", function (e) {
value.reveal();
});
}
} else {
document.l10n.setAttributes(td, value);
}
}
createItem(
"profiles-is-default",
profileData.isDefault ? "profiles-yes" : "profiles-no"
);
createItem("profiles-rootdir", profileData.profile.rootDir, true);
if (profileData.profile.localDir.path != profileData.profile.rootDir.path) {
createItem("profiles-localdir", profileData.profile.localDir, true);
}
let renameButton = document.createElement("button");
document.l10n.setAttributes(renameButton, "profiles-rename");
renameButton.onclick = function () {
renameProfile(profileData.profile);
};
div.appendChild(renameButton);
if (!profileData.isInUse) {
let removeButton = document.createElement("button");
document.l10n.setAttributes(removeButton, "profiles-remove");
removeButton.onclick = function () {
removeProfile(profileData.profile);
};
div.appendChild(removeButton);
}
if (!profileData.isDefault) {
let defaultButton = document.createElement("button");
document.l10n.setAttributes(defaultButton, "profiles-set-as-default");
defaultButton.onclick = function () {
defaultProfile(profileData.profile);
};
div.appendChild(defaultButton);
}
if (!profileData.isInUse) {
let runButton = document.createElement("button");
document.l10n.setAttributes(runButton, "profiles-launch-profile");
runButton.onclick = function () {
openProfile(profileData.profile);
};
div.appendChild(runButton);
}
let sep = document.createElement("hr");
div.appendChild(sep);
}
Alles anzeigen
Die Zeilen 1 bis 12 scheinen mir wichtig zu sein.
Ah, profileData ist die Variable, die den Profilnamen "speichert".
Oh, nee, stop
Ist gar keine Variable!
Oh menno,
Zeile 25 so
onclick: 'if (event.button == 0) { \ openTrustedLinkIn("C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -no-remote -P "nfl82a72.Standard-Benutzer", "tab");\ }; '
abgeändert funktioniert nicht.
"nfl82a72.Standard-Benutzer" wäre der Profilordnername gewesen!
Der Name des Profils lautet "Standard-Benutzer", aber auch so abgeändert, also ohne die Zahlenkolonne davor,
funktioniert auch nicht.
milupo & @Horstmann
Ich bin DIE Heldin des Tages!
Ich habe so ein Skript, um die Page about:profiles aufzurufen, schon die ganze Zeit auf der Halde.
Habe es nur nicht genutzt.
Oh Herr ...
Hier:
// JavaScript Document
// QuickLinkButton-cf.uc.js
// Source file https://www.camp-firefox.de/forum/thema/135613-quicklink-button/?postID=1213791#post1213791
(function() {
if (location.href !== AppConstants.BROWSER_CHROME_URL) 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, "/"); // Pfadangabe zum Profilordner
let buttonicon = "users-rays.svg" // Name & Dateiendung des anzuzeigenden Symbols
let props = {
id: 'aboutprofiles-button',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: 'true',
label: 'Quicklink: about:profile',
accesskey: '',
tooltiptext: 'Quicklink:\nabout:profiles',
style: 'list-style-image: url(chrome://browser/skin/fxa/avatar-empty.svg);',
// style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) +'");',
// onclick: "openTrustedLinkIn('about:about', 'tab')"
onclick: 'if (event.button == 0) { \ openTrustedLinkIn("about:profiles", "tab");\ }; '
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
} catch(e) { };
}) ();
Alles anzeigen
Ich würde es gerne so abgeändert haben, dass ich direkt damit mein Testprofil gestartet wird.
Mein Assistenzsystem ruft mir gerade zu "Gute Nacht" und ich denke ans schlafen. Funktioniert bestens.
Glückwunsch. ![]()
Alles anzeigenAm Skript selber, bzw. dessen Code musst Du doch gar nichts ändern!
Du bist also gezwungen es für Deine Verhältnisse anzupassen, das betrifft die Ordner selbst, die einzelnen Scripte, die CSS-Dateien, usw.
Z.B.:
Ab Zeile 37 - > die eigenen Bezeichnungen eintragen.
Ab Zeile 63 - > die eigenen Skripte eintragen.
Und dann noch die div. CSS Dateien, usw.
Oh, ich, ich, sorry.
Da habe ich mich aber total verwechselt, natürlich habe ich das so gemeint. ![]()
Probiere das mal, das ist das abgewandelte about:config-Skript:
JavaScript Alles anzeigen// about:profiles // Unicode変換前 → tooltiptext: 'About:Profiles anzeigen', CustomizableUI.createWidget({ id: 'aboutprofiles-button', type: 'custom', onBuild: function(aDocument) { let toolbaritem = aDocument.createXULElement('toolbarbutton'); let props = { id: 'aboutprofiles-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', label: 'About:Profiles', tooltiptext: 'About:Profiles öffnen', style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABOVJREFUeNrElm1MW1UYx597b2/pgMh4aSkMeakNMBacU7MYcLwkZnMB3fiwGL/MRaPGxLghTmY3dUzajJh9UKNBWTAxIQMW4Is6/TA2YRCziXFKKbFlvPYNyltb+jJ6e33O3W0sCzCBu3iTJ5yW0/P7P+c8z/8eiud5oCgKJHzos+f0NTRNn+A4Ll2pVILT6QSCCHNcpz8Q+ODCpw1mnMeTyZTEAth6Q8NEujpNXVq+D5QpKRBZPxgMgtk8Ale7r4HVOpnf+NWXfxMRMgkzJ/DJvNzc1JKSZ+H2n4PQ1/cr4E4IoUpVQeGuAsjISIemi83DOF+BEZRKAP3+Kd2r6Wo1wouh+3oPcKEQsCwLbrebZAxDpiG41t1NNh0Yhia/iZVSQExcXHxdaXkJZm4U4DTNIIiBxcVFOHf244M4Zzlq/nxkIJUABZ51qipFKWw7AdM0BTKZDMTyGo2GimKWpBTAkmJzezxAiKToiAi5nI3OeHrVs5OqAokAGYMZ4/geXCbUAMD6HSaZAC501z46egdU2PcsK0MRGDIG+HB43d9JdQTc0pLPAhSdlp2dBWaLRTh/GRZiZlYm1JysdZJWFIwHj4eMzxvqY/DjXSkEMPW6U988V/HivrxcLfyB/U+OQ6FQCCI0Gg0U7NwpfGZZBuw2B3R0dd0R23BLAlhV3ZUpmudUIS0FTz1eADdvG8Hv92H4QRETA0nbtwtihAJFPzAND4PJZEI/uFoTWWSzVszmGH4e11eVpfVOeeHmuB0eXbbDu9owTDhd0NvXb01ISEhCs98WFxsLHtId+Ljdi/1NXzfW4nAcw0l2YDMC2CzDT2P1h0rTf3cGwOYNwHKYhoGRUahgLBA2Xp9pbLr4MqkLUuSpanW80+EgPR/CWBTBcwROmmcjAqiUtxs1yuw8i+75Z2DA6QebJwChMA/LPAUBFGEy/QZTH1UW49wpDL/YZZT45iOCguL3oY12AZX01heP5eQXmvUvFMEPlvl/4bgsh8sveOYgSMmJ4Vgx7FHWGxGwaR+gkt78PEdT8KT5k8oi+N5M4P4oOAUu9xxYJ8yumQ/3HxC3Odr3+a34AJ1c23p0b37ut++U74EfMXO7l8BhJXzS4rLVHT4kbv3SRgpqvRqgk0+2vFK+Z3fzifJd0DY4Bw4suBC/Em5zTIL1zMFi8YXjui/7Bz5r7QCd+F7L0bIndjcfR3irCOdWgc+3NxwR22rD8LUEyBJPd7W/UfJ0VUVhBmY+i/Dg6vC28y/5/vrl1mbhqwlgEnWd7dX7i6pKtCpoM86Ccy34Jf0Rn/HGrYihbNZOZSsy13Verj5QfJjALxP40urw4FC/HuEDIjz4oEr/LwIYpa6j6bWyvWvA8Ubhdd+DG28YXJf030kBj/aBbTFx8ccqC3fcB+eFv95AEOHjEBzs1YtwYjSBrcKjd0ChVSaC04cr45mjxwhGQ7adwMemzBCac/S4Wg0tONcm9npYiotERADt8HjxBgOCyRABK+Cz9h77hWPHcZ5DSnj0EfCzswtjI9MzoJDLcXUG3D4fjAuZ23sRXi26nEdKeLQTJuBYqz7d0UkpYjPxRi24Izc9ecX+2etn8H8T4s2WA4mfiAByfU3G2IHxiLgzyyKUFNxC9Cv0YQgQLhriPU0uvkLDYqX7H0bmK+7z/+fzjwADAKjckmpp+9qUAAAAAElFTkSuQmCC)', onclick: 'if (event.button == 0) { \ openTrustedLinkIn("about:profiles", "tab"); \ }; ' }; for (let p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } });Hinter dem Base64-Code verbirgt sich noch das about:config-Symbol, ein Schraubenschlüssel oder was das ist. Kannst du ja durch ein anderes Symbol ersetzen. Ich musste das Symbol erst einmal aus dem Anpassen-Fenster holen.
Vielen lieben Dank.
Mal schauen, ob ich daraus noch etwas anderes machen kann.
Denn ich würde ja gerne direkt das Testprofil parallel starten können.
Der Gipfel der Faulheit würde erreicht werden, wenn jetzt noch der Klick auf den Button "Profil zusätzlich ausführen" durch das Skript ausgeführt würde.
Nein, erst wenn ein Assistenzsystem auf Zuruf Aktionen ausführt, besser noch, wenn man nur daran denkt!
Wenn ich das gewusst hätte, dass Du so ängstlich reagierst, dann wäre es eine Kleinigkeit gewesen, 800 Zeilen raus zu nehmen.
Aber Du bist doch sonst nicht so ängstlich eingestellt, wenn es um Anpassungen geht.
Du brauchst es ja nicht nehmen, Dich zwingt doch niemand dazu.
Das Problem ist, ich habe null Ahnung von JavaScript und CSS. Ich weiss nicht, ob man in deinem Script auch grosse Änderungen machen muss oder nicht.
Am Skript selber, bzw. dessen Code musst Du doch gar nichts ändern!
Wo nach Du nur schauen musst ist der CSS-Teil, den musst Du Dir anschauen
und vergleichen, ob Du eben jene Datei auch hast, und ob Du sie aufrufen möchtest.
Und dann musst Du nur den Pfad abgleichen und gegebenenfalls Deinem angleichen.
Ja, das ist der Weg!
Aber das möchte ich einfacher!
Ein Klick auf einen Button.
Eben ein Skript, mit dem ich anstellen kann, was halt meine Möglichkeiten so hergeben.
Sicher?
Der von ihm gepostete Code funktioniert nämlich anscheinend ungefähr wie in der Darstellung - du hast ihn doch bestimmt probiert?
Schäm, nein, hab ich nicht.
Dann ging es ihm doch wohl nur noch darum, das Systememoji "🗁" durch eine richtige Grafik zu ersetzen.
Aber auch da bin ich raus, zumal ich jetzt eine neue Baustelle habe.
Mitleser hat ja seine Lösung schon einmal hinbekommen, vielleicht hat er selber eine Idee.
Ne ne, hat er nicht, das ist nur eine erstellte Grafik zur Veranschaulichung, wie er es sich vorstellt.
Ich habe mal wieder eine etwas spezielle Idee.
Hin und wieder teste ich in einem anderen Profil, welches ich extra dafür angelegt habe, Skripte und/oder CSS-Code.
Jedoch musste ich dafür jedes Mal meinen Firefox beenden und mit diesem Testprofil neu starten.
Durch einen anderen Thread bin ich darauf gestoßen, dass man ja auch zwei Instanzen mit unterschiedlichem Profil starten, bzw. laufen lassen kann.
Nun habe ich getestet, ob ich in den verschiedenen Profilen auch ein Restart inkl. Speicherlöschung machen kann. Es geht.
So, nun meine Frage, hat jemand schon so ein Skript in Benutzung?
Oder muss es von Grund auf erst erstellt werden?