Mal abgesehen davon, dass ich Dein Anliegen nicht verstehe,
was ist so schwer daran sich eine Portable selbst zu erstellen?
Das Wunderbare daran wäre dann noch, die kann ganz normal aktualisiert werden,
also per Hilfe/Über FireFox
Beiträge von Mira_Belle
-
-
so ganz neben bei möchte ich mal anmerken, dass ich die Vermutung habe, das wenn In einem Skript so
eine Dauerschleife ist, dass das dann auch den Script-Cache überfordern könnte.Ist mir vor längerer Zeit mal aufgefallen, egal wie oft und mit welchen Optionen ich den FF neu gestartet habe,
das Skript, dass ich Testen wollt nie so richtig funktionierte.
Erst als ich alle anderen Skripte deaktivierte, lief es so wie vorgesehen.
Was auch zu Irritationen führen kann, gleiche ID's in verschiedenen Skripten zu verwenden.
Und was auch noch gerne unerwartete Auswirkungen hat:
var
let
const
und an welcher Stelle im Skript die deklariert werden! -
Was du immer herausliest 😄
So bin ich halt. Sorry.
Und gerade bei dem Wetter hätte ich ja durchaus richtig liegen können.Der Grundaufbau ist aber immer derselbe. Und schließlich hatte ich in #2 das Wort Roaming extra gefettet und kursiv geschrieben, um klarzustellen, das sich hier der Pfad zu deinem Script unterscheidet.
Nein, nein. Ist nicht so!
Die im Skript benutzte Variabel "Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");" verweis, bzw. berechnet
genau den Pfad zu C:\Users\"Username"\AppData\Roaming\Mozilla\Firefox\Profiles\"Profilname"!
Und der Zusatz, dann 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + up) + '") hängt eben den Ordner "chome" & "icons" an.
Und ans Ende wird dann noch, in diesem Fall das Symbol ink. Dateiendung geklatscht!
Im Ganzen würde das dann folgendes ergeben.
C:\Users\"Username"\AppData\Roaming\Mozilla\Firefox\Profiles\"Profilname"\chome\icons\arrow-up.svg -
Und zu Erhellung:
Gereizt? War nicht meine Absicht.
Deine Aussage "Meine Icons befinden sich für alle Füchse im Unterordner Icons im Chrome-Ordner."
kann man jetzt auch wieder Missverstehen!
Greifen ALLE Deine Füchse auf ein und dasselbe Profil zu?Und aus Deinem Post #2 ging das ja auch nicht hervor!
Da sah es eher so aus, als dass sich die Symbole eben direkt im Ordner "Profiles" befinden,
also außerhalb des Profils und schon gar nicht in
C:\Users\Ich\AppData\Roaming\Mozilla\Firefox\Profiles\...\chrome\icons
Worauf man auch immer achten soll ist die Groß- und Kleinschreibung.
Zitat: "... Unterordner Icons ..."
Windows ist das Herzlich egal, aber in JS macht das einen Unterschied!
Weshalb sehr wahrscheinlich bei Dir keine Symbole angezeigt wurden.Wie dem aus sei, es ist doch schön, wenn Du versorgt bist und alles klappt, wie Du Dir das vorstellst.
-
Wenn die Symbole sich entgegen der Anweisung, an anderer Stelle befinden, muss halt auch der Pfad zu diesen entsprechend geändert werden.
Wenn sich das Sybol direkt im Ordener Profil befindet, dann so ...
einfach in Zeile 22 & 47 einfach das + "/chrome/icons/" entfernen!
Also aus z.B. menuitem.style.setProperty('--menuitem-icon', 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + up) + '")');menuitem.style.setProperty('--menuitem-icon', 'url("' + ("file:" + ProfilePath + up) + '")');
Noch einmal!
let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); entspricht%appdata%\Mozilla\Firefox\Profiles\"Profilname"\ .
Wenn nun der Ordner sich außerhalb des Profils befindet, dann sollte man eben den
absoluten Pfad angeben!!
In Deinem Fall eben => C:\Users\Ich\AppData\Roaming\Mozilla\Firefox\Profiles\...
Ich nehme jetzt mal an, dass sich das Symbol einfach im Ordner "Profile" sich befand.
Und wie in dem anderen Skript zu erkennen ist, kann man natürlich auch jedes x-beliebige interne Symbol verwenden.Dieses funktioniert hier im Nightly nicht:
Mh. doch tut es. Zumindest bei mir.
In der derzeitigen Nightly, in der Beta und in der Final.Ich habe mir erlaubt den fehlerhaften einführenden Text etwas umzugestalten:
Danke, Ich sollte besser noch mal lesen, was ich da so verzapfe.
-
-
juzzlukin Das Skript, AddonSuche4.uc.js, kannst Du nehmen, es ist & war aber nur ein Test,
das darauf folgende (#69) Skript, ist das bessere und finale Skript.
Einfacherer Code und somit besser wartbar.Darauf hatten FuchsFan und ich uns geeinigt.
Probiere es doch bitte aus und teile uns mit, ob es das auch tut. -
Ich traue mich immer nicht so heftig zu reagieren, sonst streikt sie womöglich noch.

Hahaha. Du glaubst gar nicht, was ich Fluchen kann und wie ich manchmal das Teil beschimpfe.
Aber sie macht dann, was ich will. -
juzzlukin Du hast, wenn ich das alles richtig mitbekomme, eine recht eigenwillige Installation!
Ich würde Dir echt anraten
1. Strickt die Betriebssysteme voneinander zu trennen.
2. Den Firefox neu zu installieren, backup nicht vergessen, und dann erst das Profil neu aufzubauen.
Und weil hier schon etwas durcheinander herrscht, gib doch bitte z.B. den Link zum Beitrag an,
welches Skript Du gerade in Verwendung hattest.Aber egal, dann einigen wir uns auf das Script aus #69. Einverstanden?
Wir müssen uns ja nicht einigen, aber man kann auch der doofen KI in den Arsch treten,
damit sie eben nicht ständig irgendetwas Neues aus dem Hut zaubert.
Und manchmal hilft Fluchen auch
Magst Du mal meinen Prompt sehen?
-
Verdammt, erstelle doch nicht immer komplett neuen Code.
Korrigiere doch den Alten. Der ist doch gut
Da fehlte nur eine Zeile! => win.gBrowser.selectedTab = tab;
Hier Dein komplettes, altes Skript:JavaScript
Alles anzeigen// addonUpdateNotifier.uc.js // Firefox 152+ (async function() { if (location.href !== "chrome://browser/content/browser.xhtml") return; const { AddonManager } = ChromeUtils.importESModule ("resource://gre/modules/AddonManager.sys.mjs"); async function checkForUpdates() { let foundUpdate = false; let addons = await AddonManager.getAddonsByTypes(["extension"]); for (let addon of addons) { if (!(addon.permissions & AddonManager.PERM_CAN_UPGRADE)) continue; await new Promise(resolve => { addon.findUpdates({ onUpdateAvailable(aAddon, install) { foundUpdate = true; }, onNoUpdateAvailable() {}, onUpdateFinished() { resolve(); } }, AddonManager.UPDATE_WHEN_USER_REQUESTED); }); } if (foundUpdate) { let win = Services.wm.getMostRecentWindow("navigator:browser"); let tab = win.gBrowser.addTrustedTab("about:addons"); win.gBrowser.selectedTab = tab; tab.linkedBrowser.addEventListener( "DOMContentLoaded", function listener() { tab.linkedBrowser.removeEventListener( "DOMContentLoaded", listener ); tab.linkedBrowser.loadURI( Services.io.newURI( "about:addons#updates" ) ); }, { once: true } ); } } setTimeout(checkForUpdates, 2000); })();Nimm mir meinen Kraftausdruck bitte nicht krumm,
aber ich finde, wenn bei jeder kleinsten Anpassung jedes Mal ein komplett anderer Code gepostet wird,
stiftet das nur durcheinander.Auch die Änderung, dass alle Updates aller Addons angezeigt werden, war ja recht banal und einfach.
Dein (altes) Skript ist klasse und um einiges leichter zu warten, als mein Monstrum.
-
Sören Hentzschel Ist in meiner Nightly z.Z. noch nicht vorhanden.
-
FuchsFan Und hier die Lösung.
JavaScript
Alles anzeigen// addonUpdateNotifier.uc.js // Firefox 152+ (async function() { if (location.href !== "chrome://browser/content/browser.xhtml") return; const { AddonManager } = ChromeUtils.importESModule ("resource://gre/modules/AddonManager.sys.mjs"); async function checkForUpdates() { let foundUpdate = false; let addons = await AddonManager.getAddonsByTypes(["extension"]); for (let addon of addons) { if (!(addon.permissions & AddonManager.PERM_CAN_UPGRADE)) continue; await new Promise(resolve => { addon.findUpdates({ onUpdateAvailable(aAddon, install) { foundUpdate = true; }, onNoUpdateAvailable() {}, onUpdateFinished() { resolve(); } }, AddonManager.UPDATE_WHEN_USER_REQUESTED); }); } if (foundUpdate) { let win = Services.wm.getMostRecentWindow("navigator:browser"); let tab = win.gBrowser.addTrustedTab("about:addons"); tab.linkedBrowser.addEventListener( "DOMContentLoaded", function listener() { tab.linkedBrowser.removeEventListener( "DOMContentLoaded", listener ); tab.linkedBrowser.loadURI( Services.io.newURI( "about:addons#updates" ) ); }, { once: true } ); } } setTimeout(checkForUpdates, 2000); })(); -
Sorry 2002Andreas habe ich zum Glück nicht.
Auch nicht in der derzeitigen Nightly.Nutzt Du wirklich noch 152.0?
-
juzzlukin Du hast nun die Wahl.
Suche Dir aus, was Dir besser zusagt.
Falls ich Dir richtig verstanden hatte und die Seite "about:addons" manchmal hängen geblieben ist,
habe ich das Skript dafür gefixt.JavaScript
Alles anzeigen// Atomatk-Addons-UpDate-Check.uc.js // Das Script führt automatisch einen UpDate-Check aus und dies in einem neuen Tab anzeigt. // Auch wird ein Button erstellt, der einen UpDate-Check ausführt und dies in einem neuen Tab anzeigt. // Source file https://www.camp-firefox.de/forum/thema/140656/?postID=1290593#post1290593 /* ----------------------------------------------------------------------------------- */ /* Zu beachten ist, dass die Grafiken sich im richtigen Ordner befinden müssen */ /* %appdata%\Mozilla\Firefox\Profiles\"Profilname"\chrome\icons */ /* ----------------------------------------------------------------------------------- */ (function() { "use strict"; // Nur in einem normalen Browserfenster weiterarbeiten. if (!window.gBrowser) return; const // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ id = 'addons-update-button', // Id des Buttons link = 'about:addons', // Linkziel des Buttons label = 'Add-ons Update', // Bezeichnung des Buttons tooltiptext = 'Add-ons aktualisieren', // Icon------------------------------------------------------- icon = 'sync.svg', // [Name.Dateiendung] des Symbols colour = '#8bff0f', // Farbe für das SVG-Icon setzen iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)); // SVG-Icons können CSS-Farbangaben übernehmen; das schaltet Firefox dafür frei. if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) { Services.prefs.setBoolPref('svg.context-properties.content.enabled', true ); } const // ■■ START ScriptConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ STARTUP_DELAY_MS = 2500, // Verzögerung nach Firefox-Start, damit die Oberfläche fertig geladen ist. MAX_WAIT_MS = 12000, // Maximale Wartezeit darauf, dass about:addons vollständig geladen ist. POLL_MS = 250; // Intervall für wiederholte Prüfungen. let startupDone = false, // Merkt sich, ob der Startvorgang schon einmal ausgeführt wurde. busy = false; // Verhindert parallele Abläufe. // ■■ END ScriptConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ //BUTTON try { CustomizableUI.createWidget({ id: id, defaultArea: CustomizableUI.AREA_NAVBAR, label: label, tooltiptext: tooltiptext, onCreated: (button) => { button.style.MozContextProperties = 'fill, stroke, fill-opacity'; button.style.listStyleImage = 'url("' + curProfDir + iconPath + icon + '")'; button.style.minWidth = 'fit-content'; // button.style.color = '#ffe10f'; // Farbe für das SVG-Icon setzen button.style.color = colour; } }); } catch(e) {}; // Liefert das aktuellste Browserfenster. function getBrowserWindow() { return Services.wm.getMostRecentWindow("navigator:browser"); } // Öffnet about:addons in einem neuen Tab. function openAddonsTab(win) { if (!win) return false; try { win.openTrustedLinkIn(link, "tab"); return true; } catch (e) { return false; } } // Schließt den Tab, wenn keine Updates gefunden wurden (mit robusterer Prüfung). function checkAndCloseIfNoUpdates(doc, win) { const startTime = Date.now(); const MAX_CHECK_TIME = 10000; // 10 Sekunden maximale Wartezeit const CHECK_INTERVAL = 500; // Alle 500ms prüfen function check() { try { // 1. Prüfe das klassische "no updates"-Element const messageEl = doc.getElementById('updates-message'); if (messageEl && messageEl.getAttribute('state') === 'none-found') { closeTabSafely(win); return; } // 2. Prüfe, ob die "Available Updates"-Liste leer ist const availableUpdates = doc.querySelector('addon-list[filter="updates-available"]'); if (availableUpdates && availableUpdates.items.length === 0) { closeTabSafely(win); return; } // 3. Prüfe auf Textindikatoren (z. B. "All add-ons are up to date") const noUpdatesText = doc.querySelector('.no-updates, [data-l10n-id="addon-updates-none-found"]'); if (noUpdatesText) { closeTabSafely(win); return; } // 4. Wenn nichts gefunden wurde, aber die Zeit abgelaufen ist: Tab schließen if (Date.now() - startTime > MAX_CHECK_TIME) { closeTabSafely(win); return; } // Weiter prüfen win.setTimeout(check, CHECK_INTERVAL); } catch (e) { // Falls ein Fehler auftritt (z. B. Tab bereits geschlossen), abbrechen console.error('[AddonUpdateCheck] Fehler bei der Update-Prüfung:', e); } } // Hilfsfunktion: Tab sicher schließen (mit Fehlerbehandlung) function closeTabSafely(win) { try { if (win && win.gBrowser && win.gBrowser.removeCurrentTab) { win.gBrowser.removeCurrentTab(); } } catch (e) { console.warn('[AddonUpdateCheck] Tab konnte nicht geschlossen werden:', e); } } // Erste Prüfung nach 1 Sekunde starten (damit Firefox Zeit hat, die UI zu aktualisieren) win.setTimeout(check, 1000); } // Prüft, ob die Update-Elemente in about:addons schon vorhanden sind. function runOriginalAddonActions(doc, win) { try { const options = doc.querySelector("addon-page-options"), checkItem = doc.querySelector('panel-item[action="check-for-updates"]'); // Update-Prüfung auslösen. if (options && checkItem) { checkItem.click(); } // Kurz warten, damit Firefox die Ergebnisse sichtbar aufbauen kann. win.setTimeout(function() { try { const categories = doc.getElementById("categories"); if (categories) { const availableBtn = categories.querySelector('button[viewid="addons://updates/available"]'); if (availableBtn) availableBtn.click(); // 500ms warten, dann einmal prüfen win.setTimeout(() => checkAndCloseIfNoUpdates(doc, win), 500); } } catch (e) {} busy = false; }, 500); // Timeout auf 500ms erhöht für zuverlässigen Wechsel // hier stand vorher 1500 } catch (e) { busy = false; } } // Wartet, bis about:addons vollständig geladen ist. function waitForAboutAddons(win, fromStartup) { const started = Date.now(); function tick() { let doc = null; try { doc = win.gBrowser.selectedBrowser.contentDocument; } catch (e) {} // Nur weitermachen, wenn about:addons wirklich geöffnet ist. if (doc && doc.URL === "about:addons") { try { const // Prüfen, ob die erwarteten UI-Elemente schon vorhanden sind. options = doc.querySelector("addon-page-options"), checkItem = doc.querySelector('panel-item[action="check-for-updates"]'), recentItem = doc.querySelector('panel-item[action="view-recent-updates"]'); // Wenn alles da ist, die eigentliche Update-Logik starten. if (options && checkItem && recentItem) { runOriginalAddonActions(doc, win); return; } } catch (e) {} } // Weiter warten, solange das Zeitlimit nicht überschritten ist. if (Date.now() - started < MAX_WAIT_MS) { win.setTimeout(tick, POLL_MS); } else { // Wenn die Zeit abgelaufen ist, wieder freigeben. busy = false; // Beim Start nicht weiter forcieren. if (!fromStartup) { openAddonsTab(win); } } } tick(); } // Gemeinsame Hauptfunktion für Start und Button. function runCheck(fromStartup) { if (busy) return; busy = true; const win = getBrowserWindow(); if (!win) { busy = false; return; } // Erst Tab öffnen. if (!openAddonsTab(win)) { busy = false; return; } // Danach auf fertige Seite warten. waitForAboutAddons(win, fromStartup); } // Startprüfung nur einmal ausführen. function runStartupCheck() { if (startupDone) return; startupDone = true; const win = getBrowserWindow(); if (!win) return; // Kleine Verzögerung, damit Firefox vollständig bereit ist. win.setTimeout(function() { runCheck(true); }, STARTUP_DELAY_MS); } // Observer für den Zeitpunkt, an dem Firefox die Fenster wiederhergestellt hat. function onWindowsRestored(subject, topic) { if (topic !== "sessionstore-windows-restored") return; try { Services.obs.removeObserver(onWindowsRestored, "sessionstore-windows-restored"); } catch (e) {} runStartupCheck(); } // Observer registrieren. try { Services.obs.addObserver(onWindowsRestored, "sessionstore-windows-restored"); } catch (e) { // Falls der Observer nicht verfügbar ist, per Timer versuchen. window.setTimeout(runStartupCheck, STARTUP_DELAY_MS); } // Button-Klick-Handler einrichten. (function click_button() { const button = document.getElementById(id); if (button) { button.addEventListener("click", (event) => { // Nur linker Mausklick. if (event.button !== 0) return; // Das richtige Browserfenster ermitteln. const win = event.target.documentGlobal || event.target.ownerGlobal; // Keine parallelen Läufe. if (busy) return; busy = true; // Verhalten wie beim Start: Tab öffnen und dann prüfen. if (!openAddonsTab(win)) { busy = false; return; } waitForAboutAddons(win, false); }); } else { // Wenn der Button noch nicht existiert, erneut probieren. setTimeout(click_button, 100); } })(); })(); -
Ihr könnt ja mal dieses Script testen, es prüft gleich nach dem Start, ob Updates vorhanden sind, gibt es sie, so wird in einem neuen Tab der Addonmanager geöffnet. Gibt es keine Updates, dann passiert weiter nichts.
Funktioniert so weit! Habe auch die Zeitschleife etwas kürzer gemacht!
Updates werden aber nur für aktive Addons angezeigt. -
Aha.
Aber das Verhalten ist doch so gewollt.
Wenn kein Update vorliegt, schließt sich der Tab doch.
Anders lässt sich das nicht umsetzen.
Hatte ja schon erwähnt, warum das Skript aus #1 nicht mehr funktioniert.
Sicherheit und Änderungen deshalb von Mozilla. -
Hallo Mira.
Ist er hier nicht, trotzdem kann ich das bestätigen.
Mist.
Kannst Du mir das noch mal genau erklären? Oder ein "Filmchen" davon machen?
In der Zwischenzeit werde ich mein Testprofil tausendmal öffnen und schließen.
Ma sehn.
PS. Wenn Updates anliegen, vorhanden sind, schließt sich der Tab auch nicht!
Soll er ja nicht. -
Ich greife in beiden Installationen auf dieselben Profile zu.
Warum?
Meiner Meinung nach ist es besser, Du würdest das eine BS konsequent vom anderen BS trennen!Die Profile das Profil auf dem einen BS hättest Du doch klonen können.
Aber sicher wird Dir da jemand antworten, der Dir das ganze viel besser erklären kann,
und warum eine solche Konstellation m.M. keine gute Idee ist
und eventuell genau für solche Probleme prädestiniert ist.
Zumal eine Einstellung in dem BS natürlich auch Auswirkungen auf den Firefox hat.
Sind diese auf den Systemen unterschiedlich, hast Du schon den Salat. -
I discovered a slight abnormality I did not recognize this at first. Now, regardless of an available update or not, when i reboot, the browser opens to about:addons for several seconds, then to travels to the previous active tab. Do you see this as well?
Wenn der Firefox so konfiguriert ist, dass er auch bei Systemstart gestartet wird, ja.
EDIT: After a few more tries, I find that sometimes it returns to the previous active tab, and others times it stays at about:config
Mh, beobachte das mal weiter. Eventuell muss da noch etwas mit den Zeitschleifen nachgebessert werden.
-
juzzlukin Ich habe ganz einfach geschimpft wie ein Rohspatz und der KI an den Kopf geworfen, wie blöd sie doch ist.
Grast das ganze Internet ab, aber lässt die wichtigste Quelle aus!
Sie hat sich entschuldigt und mir fest versprochen auch in Zukunft diese Quelle in bedacht zu ziehen.I just swore like a sailor and told the AI right to her face how stupid she is.
She scours the entire internet but leaves out the most important source!
She apologized and promised me she'd make sure to include that source in the future.
Searchfox