1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. Mira_Belle

Beiträge von Mira_Belle

  • Verknüpfung (auf dem Desktop)

    • Mira_Belle
    • 29. Mai 2026 um 20:49

    Ihr habt alle Unrecht!!
    Es ist eine App.

    Nee, mal im Ernst, die Grenzen was was ist verschwimmen doch immer mehr!

    Lege ich auf dem Desktop eine Datei mit Endung ".ps1" ab, oder mit ".bat", öffnet Windows eine entsprechende Anwendung
    und führt die "Befehle" aus.
    Wandele ich besagte Dateien in Exefile, passiert nicht anders, nur dass entsprechende Dienste im Hintergrund ablaufen.
    Ist diese Exe denn jetzt eine Anwendung? Ein Programm? Oder gar eine App?
    Und muss man Programme nicht eigentlich installieren? Oder kommt es nur darauf an, dass ein Installer dem System mitteilt,
    was das Programm so alles machen soll und welche Verknüpfungen erforderlich sind?

    Und wenn auf den Desktop keine ausführbaren Dateien sein sollen, wo sich mir noch die Frage stellt, wer das bestimmt,
    darf ich dann auf meinem Desktop keine Portable ablegen?

    Ich zitiere:

    Zitat von Drachen

    Reine Ansichtssache.

  • Windows 11 Mozilla Firefox wird immer um 23:00 Uhr beendet

    • Mira_Belle
    • 29. Mai 2026 um 20:32

    .DeJaVu vergaß, zu erwähnen, dass diese "programmliste.txt" auf dem Desktop abgelegt wird. ;)

  • Schrift VPN in der Adressleiste verkleinern.

    • Mira_Belle
    • 28. Mai 2026 um 15:57

    Die Suche im Forum hätte Dir diesen Beitrag gezeigt.

    Beitrag

    VPN-Anzeige plötzlich groß

    Hallo zusammen,

    nach dem Update auf 151.0.2 ist plötzlich das VPN-Icon in der Leiste größer geworden.
    Ist das so gewollt? Und kann man das wieder auf die "Normalgröße" zurücksetzen?
    Maurizio
    26. Mai 2026 um 18:35


    Und die darin enthaltene Lösung.
    Habe ich aber gerne gemacht. :*

  • Ein neues Skript, um neue Instanzen aus einer bestehenden starten zu können

    • Mira_Belle
    • 27. Mai 2026 um 19:01

    .DeJaVu Ich danke Dir für Deine Bemühungen,
    aber ich werde das Skript so belassen, wie es z.Z. ist.

    Ich habe lange überlegt und nach Szenarien gesucht, die es erforderlich machen, eine zweite Instanz
    mit gleichem Profil zu öffnen!
    Mir fiel ehrlich gesagt keins ein.

    Klar bekäme ich das hin, aber die Gefahr sich das Profil zu zerschießen ist dann doch einfach zu groß!

    Eigentlich ist der Firefox nicht für den gleichzeitigen Zugriff auf ein Profil ausgelegt.
    Es kann zu Abstürzen, langsamer Performance oder unerwartetem Verhalten kommen.

    Wenn zwei Instanzen gleichzeitig auf dieselben Dateien zugreifen, kann es zu Konflikten oder Beschädigungen kommen.
    Besonders betroffen sind Datenbanken wie places.sqlite (Lesezeichen, Verlauf) oder cookies.sqlite.

    Und auch Einstellungen unter about:config und about:preferences sind davon betroffen.

    Also bleibt es erst einmal so wie es z.Z. ist.

  • Ein neues Skript, um neue Instanzen aus einer bestehenden starten zu können

    • Mira_Belle
    • 27. Mai 2026 um 09:29

    Nachtrag.
    Es wird jene Meldung erscheinen:

    Klickt auf Abbrechen, denn wenn Ihr auf Firefox beenden klickt, wird dieser neu gestartet.
    Dann sind eventuell Eure "Eingaben" oder so weg.

  • Ein neues Skript, um neue Instanzen aus einer bestehenden starten zu können

    • Mira_Belle
    • 27. Mai 2026 um 09:06

    Wichtig:!:

    Habe das Skript noch einmal bearbeitet!

    Bisher war es möglich eine weitere Instanz mit dem gleichen Profil zu öffnen!

    Das ist aber gefährlich, da dadurch die Gefahr besteht, dass man sich eben jenes Profil zerschießt!
    Wenn mehrere Firefox-Instanzen mit demselben Profil gleichzeitig laufen, kann es zu Schreibkonflikten kommen:
    Lesezeichen, Verlauf, Sitzungen, Passwörter oder Einstellungen können sich gegenseitig überschreiben
    oder nur teilweise übernommen werden.
    Im schlimmsten Fall drohen Profilbeschädigungen, Datenverlust oder ein Firefox-Start mit Fehlermeldungen
    bzw. einem „gesperrten“ Profil.

    Einen <3lichen Dank für diesen wichtigen Hinweis. :*

  • Vermisse Horstmann!

    • Mira_Belle
    • 26. Mai 2026 um 23:13

    :/ Nun, wer weiß was genau so in anderen Köpfen so vorgeht.
    Du weißt, was ich meine.
    Dann kann einem die Realität schon mal so ganz anders vorkommen.

    Lassen wir es gut sein. Es ist, wie es ist.

  • Nachruf

    • Mira_Belle
    • 26. Mai 2026 um 22:18

    Falls sich jemand fragt, warum https://github.com/ardiman so verweißt ist,
    ardiman bzw. Arne Dieckmann verstab leider bereits im September 2020.

  • Vermisse Horstmann!

    • Mira_Belle
    • 26. Mai 2026 um 21:56
    Zitat von Sören Hentzschel

    Er hatte kein Interesse mehr, sich hier weiter einzubringen.

    Schade. ;(

  • Vermisse Horstmann!

    • Mira_Belle
    • 26. Mai 2026 um 21:33

    Was ist geschehen?

  • Sonderbarer TAB

    • Mira_Belle
    • 25. Mai 2026 um 18:16
    Zitat von schlingo

    Das ist der Launcher. Falls Fx installiert ist, wird er damit aufgerufen.

    Und falls er nicht installiert ist?

  • Ein neues Skript, um neue Instanzen aus einer bestehenden starten zu können

    • Mira_Belle
    • 24. Mai 2026 um 20:11
    Zitat von lenny2

    Ein Trennzeichen zwischen „instApps“ und „portableApps“ wäre möglicherweise hilfreich.

    Ich habe es erkenntlicher gemacht! Recht so?

    Zitat von lenny2

    Fehlende schließende Klammer name: "Nightly 152.0a1 (2026-05-13

    Ist korrigiert.

    Zitat von .DeJaVu

    Wie sieht das aus, wenn du denselben Firefox mit Profil abermals aufrufst zu einer laufenden Sitzung desselben Firefox?

    Scheiße!
    Es gibt eine Fehlermeldung!
    Danke für den Hinweis, das hatte ich doch tatsächlich gar nicht mehr überprüft.
    Der Fokus lag einfach woanders.
    Auch das habe ich oben korrigiert.

  • Ein neues Skript, um neue Instanzen aus einer bestehenden starten zu können

    • Mira_Belle
    • 24. Mai 2026 um 11:45

    Hallo, ich möchte hier ein neues Skript vorstellen.

    Zu aller erst aber ein <3liches Danke an einen Unbekannten:!:(Er möchte nicht genannt werden)

    Um das Skript nutzen zu können, müssen natürlich einige Vorbereitungen getroffen werden!
    Firefox sollte JavaSkript unterstützen.

    Bisher funktioniert das Skript nur auf Windowssystemen.
    Um es auch kompatibel zu MacOS oder Linux zu machen, bräuchte ich Tester und Helfer. ;)

    Nun die erforderlichen Angaben.

    Wichtig:!:
    Alle hier von mir zur Verfügung gestellte Skripte sind unter zu Hilfenahme von KI erstellt!

    Genauere Quellenangaben wird es nicht geben, da sehr oft mehrere KI's, neben den Hilfen von verschiedenen Nutzern
    dieses Boards, aber auch einiger anderen Quellen, genutzt werden.
    Und es hilft niemandem, wenn ich eine Liste von Internetadressen als Quelle hier oder in den JS schreibe.

    Nun denn, hier mein Skript.

    JavaScript
    // FoxInstanzStarter.uc.js
    // Das Script erstellt einen Button, der ein Menü zur Auswahl weiterer Instanzen öffnet.
    //
    // Source file https://www.camp-firefox.de/forum/thema/xxx
    
    /* ----------------------------------------------------------------------------------- */
    /*     Zu beachten ist, dass die Pade auf eigene Umgebung geändert werden müssen       */
    /*               aus z.B. "C:\Programme\Mozilla Firefoxfirefox.exe" wird               */
    /*                  "C:\\Program Files\\Mozilla Firefox\\firefox.exe"                  */
    /* ----------------------------------------------------------------------------------- */
    
    /* ----------------------------------------------------------------------------------- */
    /*  IMPORTANT!               This script was created using AI                          */
    /* ----------------------------------------------------------------------------------- */
    
    
    (function () {
      if (!window.gBrowser || !CustomizableUI) return;
    
      const
      // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
               id = 'aboutprofiles-Start', // Id des Buttons
            label = 'Profil zusätzlich starten', // Bezeichnung des Buttons
      tooltiptext = 'Firefox Profile starten (Auswahl)',
      // Icon-------------------------------------------------------
       buttonIcon = 'logo.svg', // [Name.Dateiendung] des Symbols
         iconPath = 'file:///C:/PortableApps/icon/', // Pfad zum Ordner der die Icons beinhaltet
    
      // Firefox-Profile
    /* ----------------------------------------------------------------------------------- */
    /*  Installierte Anwendung                                                             */
    /* ----------------------------------------------------------------------------------- */
        instApps = [
          {
            name: "Mira",
            exe: "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
            profile: "C:\\Users\\Mira\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\Mira",
            icon: "Finale.svg"
          },
          {
            name: "Testprofil",
            exe: "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
            profile: "C:\\Users\\Mira\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\Testprofil",
            icon: "Finale.svg"
          },
          {
            name: "TEST_24-03-29",
            exe: "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
            profile: "C:\\Users\\Mira\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\yd7mkrc6.TEST_24-03-29",
            icon: "Finale.svg"
          },
          {
            name: "Nightly",
            exe: "C:\\Program Files\\Firefox Nightly\\firefox.exe",
            profile: "C:\\Users\\Mira\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\umilg7ve.Nightly",
            icon: "Nightly.svg"
          },
        ],
        
    /* ----------------------------------------------------------------------------------- */
    /*  Portable Anwendung                                                                 */
    /* ----------------------------------------------------------------------------------- */    
        portableApps = [
          {
            name: "Version 53.0 💛",
            exe: "C:\\PortableApps\\v.56.0\\Firefox\\firefox.exe",
            profile: "C:\\PortableApps\\v.56.0\\Profilordner",
            icon: "Finale.svg"
          },
          {
            name: "Version 100.0 💛",
            exe: "C:\\PortableApps\\v.100.0\\Firefox\\firefox.exe",
            profile: "C:\\PortableApps\\v.100.0\\Profilordner",
            icon: "Finale.svg"
          },
          {
            name: "Beta 151.0b10  💙",
            exe: "C:\\PortableApps\\Beta\\Firefox\\firefox.exe",
            profile: "C:\\PortableApps\\Beta\\Profilordner",
            icon: "Beta.svg"
          },
          {
            name: "Nightly 152.0a1 (2026-05-13) 💜",
            exe: "C:\\PortableApps\\Nightly\\Firefox\\firefox.exe",
            profile: "C:\\PortableApps\\Nightly\\Profilordner",
            icon: "Nightly.svg"
          }
        ];
      // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    
      const profiles = [...instApps, ...portableApps];
    
      if (document.getElementById(id)) return;
    
      // SVG-Kontext-Eigenschaften aktivieren
      try {
        if (!Services.prefs.getBoolPref("svg.context-properties.content.enabled", false)) {
          Services.prefs.setBoolPref("svg.context-properties.content.enabled", true);
        }
      } catch (e) {}
    
      // Navbar suchen
      const navbar = document.getElementById("nav-bar-customization-target");
      if (!navbar) return;
    
    
      // Button als customizable Element registrieren
      CustomizableUI.createWidget({
        id: id,
        type: "custom",
        defaultArea: CustomizableUI.AREA_NAVBAR,
        label: label,
        tooltiptext: tooltiptext,
        onBuild: function(aDocument) {
          const button = aDocument.createXULElement("toolbarbutton");
          button.id = id;
          button.setAttribute("class", "toolbarbutton-1 chromeclass-toolbar-additional");
          button.setAttribute("label", label);
          button.setAttribute("tooltiptext", tooltiptext);
          button.setAttribute("type", "menu");
          button.style.listStyleImage = `url("${iconPath}${buttonIcon}")`;
          button.style.MozContextProperties = "fill, stroke, fill-opacity";
          button.style.minWidth = "fit-content";
          button.style.color = "#fca800";
    
          // Menü erstellen
          const popup = aDocument.createXULElement("menupopup");
          popup.id = `${id}-popup`;
    
          // für jeden Menüeintrag eine eigene Schaltfläche erstellen
          for (const item of profiles) {
            const menuitem = aDocument.createXULElement("menuitem");
            menuitem.setAttribute("label", item.name);
            menuitem.setAttribute("class", "menuitem-iconic");
            menuitem.setAttribute("image", `${iconPath}${item.icon}`);
            menuitem.style.listStyleImage = `url("${iconPath}${item.icon}")`;
    
            // Profil starten
            menuitem.addEventListener("command", () => launchProfile(item));
            popup.appendChild(menuitem);
          }
    
          // Menü an Button anhängen
          button.appendChild(popup);
          return button;
        }
      });
    
      // Funktion zum Starten des Browsers mit dem ausgewählten Profil
      function launchProfile(item) {
        try {
          const exeFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          exeFile.initWithPath(item.exe);
    
          const process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
          process.init(exeFile);
    
          const isFirefox = item.exe.toLowerCase().includes("firefox.exe");
          const isProfilePath = item.profile && (item.profile.includes("\\") || item.profile.includes("/"));
    
          // -new-instance für neue Instanzen (wie von Mozilla empfohlen)
          let args = ["-new-instance"];
    
          if (isFirefox && isProfilePath) {
            // Portable/Profile per Pfad
            args.push("-profile", item.profile);
          } else if (isFirefox) {
            // Installierte Profile per Name
            args.push("-P", item.profile);
          /*  args.push("-P", item.profile.split("\\").pop()); */
          }
    
          args.push("-foreground");
          process.run(false, args, args.length);
        } catch (e) {
          console.error("[FoxStarter]", e);
        }
      }
    })();
    Alles anzeigen

    icon.zip

    Und so könnte das Aussehen.


    Weitere Symbole 🛠️ und Sonderzeichen 🍀:

    Symbole, Leerzeichen & Sonderzeichen zum Kopieren - Instagram Tipps Biografie
    Symbole zum Kopieren für Instagram, Facebook und sonstige Beiträge! Verschnörkelte Buchstaben, Leerzeichen Symbol, Instagram Bio zentrieren, ❤ ♡♥ ❥ ☾ ヅ ㋡⇱⇲☀
    katha-strophal.de

    oder

    Emojis zum Kopieren | ZEICHEN.TV
    https://www.zeichen.tv/emojis/
    www.zeichen.tv
  • newtabfromhistory.uc.js = Fehlermeldung

    • Mira_Belle
    • 23. Mai 2026 um 10:55

    2002Andreas Wie wäre es mit einem aktualisiertem Header?

    JavaScript
    // ==UserScript==
    // @name           newTabFromHistory.uc.js
    // @namespace      https://www.camp-firefox.de/forum/viewtopic.php?p=1090093#p1090093
    // @description    Links aus Chronik in neuem Tab öffnen
    // @author         aborix
    // @Source         https://www.camp-firefox.de/forum/thema/138013/?postID=1251376#post1251376
    // @Source_new     https://www.camp-firefox.de/forum/thema/139502/?postID=1273989#post1273989       
    // @compatibility  139-151
    // @Note           Lines 44 and 45 have been updated due to an error message in the console
    // @compatibility  152
    // @Note           Lines 18 and 19 alternate starting at Fx 152
    // @version        0.0.6 date 2026.05.23
    // ==/UserScript==
    Alles anzeigen

    Nicht angekratzt sein, bitte.
    Ist nur ein Vorschlag.
    Weiter Oben hatte Sören das ja schon einmal angemerkt.


    Oh, sehe gerade, die Zeilen sind dann ja verrutscht!
    Muss natürlich angepasst werden.

  • Profilmanager

    • Mira_Belle
    • 21. Mai 2026 um 10:22
    Zitat von FuchsFan

    Getestet aus portable Nightly 153, funktioniert alles wie gewünscht.

    Danke für's testen. Ich habe das Skript in kürzester Zeit zusammen gezimmert, da ich gerade sehr eingebunden bin.
    Aber so habe ich erst einmal einen Anfang.

    Zitat von FuchsFan

    Nur als Hinweis, bei den installierten reicht es vollkommen aus, wenn nur der Name des Profiles angegeben wird.

    Werde ich mir merken!

    Zitat von FuchsFan

    us installierter Beta/Nightly kann ich nicht testen,

    Macht nichts, das konnte ich noch machen.

    Zitat von FuchsFan

    Ein Nachteil deines Scriptes ist der, dass es den Elchtest nicht besteht.

    Mist, kannst Du mir den noch einmal erklären,
    oder darauf verlinken, wenn es schon eine Erklärung hier im Board gibt?
    Ich komme gerade nicht darauf, was genau das für ein Test war.

  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • Mira_Belle
    • 21. Mai 2026 um 09:01

    GermanFreme82 Schau Dir doch mal Merci chao's Skript an.
    Beachte mal die Clips, gerade jene mit den angepinnten Tabs.

    Multi Tab Rows
    The best multi-row tabs experience for Firefox. Maximized space usage, intuitive drag & drop, polished interactions, pinned tabs grid, and built-in updater.
    merci-chao.github.io


    Er pflegt es z.Z. noch und entwickelt es auch weiter!

    Und wenn es Dir gefällt, also von den Funktionen her, aber Dir das Design nicht so zusagt,
    wir sind hier, und ich denke, da lässt sich mit Sicherheit dann was machen.

  • Profilmanager

    • Mira_Belle
    • 20. Mai 2026 um 22:36

    Mag jemand testen?
    Funktioniert das Skript auch aus einer installierten Nightly oder Beta?
    Und was wichtiger ist, funktioniert es aus einer Portable?

    JavaScript
    // FirefoxQuickStarter.uc.js
    // Das Script erstellt einen Button, der ein Menü zur Auswahl weiterer Instanzen öffnet.
    
    // Source file https://www.camp-firefox.de/forum/thema/xxx
    
    /* ----------------------------------------------------------------------------------- */
    /*     Zu beachten ist, dass die Grafiken sich im richtigen Ordner befinden müssen     */
    /*            %appdata%\Mozilla\Firefox\Profiles\"Profilname"\chrome\icons             */
    /* ----------------------------------------------------------------------------------- */
    
    (function() {
      if (!window.gBrowser || !CustomizableUI) return;
    
      const
      // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
               id = 'aboutprofiles-Start', // Id des Buttons
            label = 'Profil zusätzlich starten', // Bezeichnung des Buttons
      tooltiptext = 'Firefox Profile starten (Auswahl)',
      // Icon-------------------------------------------------------
             icon = 'profile.svg', // [Name.Dateiendung] des Symbols
         iconPath = 'file:///C:/FoxIcons/'; // Pfad zum Ordner der die Icons beinhaltet
    
      /*
    	Vor Verwendung, Pfad auf eigene Umgebung ändern(\ wird durch \\ ersetzt):
    	C:\\Program Files\\Mozilla Firefox\\firefox.exe oder C:\\Program Files\\Firefox Nightly\\firefox.exe
      */
    
      // Standard-Firefox-Profile
      const standardProfiles = [
        {
          name: "Mira",
          exe: "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
          profile: "C:\\Users\\Mira\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\Mira",
          icon: "Finale.svg"
        },
        {
          name: "Testprofil",
          exe: "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
          profile: "C:\\Users\\Mira\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\Testprofil",
          icon: "Finale.svg"
        },
        {
          name: "TEST_24-03-29",
          exe: "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
          profile: "C:\\Users\\Mira\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\yd7mkrc6.TEST_24-03-29",
          icon: "Finale.svg"
        },
        {
          name: "Nightly",
          exe: "C:\\Program Files\\Firefox Nightly\\firefox.exe",
          profile: "C:\\Users\\Mira\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\umilg7ve.Nightly",
          icon: "Nightly.svg"
        }
      ];
    
      // Portable Firefox-Pfade
      const portableProfiles = [
        {
          name: "Portable Version 53.0 💛",
          exe: "C:\\Portable-Firefox\\Firefox_53.0\\Firefox\\firefox.exe",
          profile: "C:\\Portable-Firefox\\Firefox_53.0\\Profilordner",
          icon: "Finale.svg"
        },
        {
          name: "Portable Beta 💙",
          exe: "C:\\Portable-Firefox\\Beta\\Firefox\\firefox.exe",
          profile: "C:\\Portable-Firefox\\Beta\\Profilordner",
          icon: "Beta.svg"
        },
        {
          name: "Portable Nightly 💜",
          exe: "C:\\Portable-Firefox\\Nightly\\Firefox\\firefox.exe",
          profile: "C:\\Portable-Firefox\\Nightly\\Profilordner",
          icon: "Nightly.svg"
        }
      ];
      // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    
      // Alle Profile zusammenführen
      const allProfiles = [...standardProfiles, ...portableProfiles];
    
      // SVG-Kontext-Eigenschaften aktivieren
      if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') === false) {
        Services.prefs.setBoolPref('svg.context-properties.content.enabled', true);
      }
    
      // Button erstellen
      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("${iconPath}${icon}")`;
            button.style.minWidth = 'fit-content';
            button.style.color = '#EE3939';
    
            // Menü nach dem Erstellen des Buttons aufbauen
            buildMenu(button);
          }
        });
      } catch (e) {
        console.error("Fehler beim Erstellen des Buttons:", e);
      }
    
      // Funktion zum Aufbau des Menüs
      function buildMenu(button) {
        if (!button || button.querySelector("menupopup")) return;
    
        const menu = document.createElementNS(
          "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
          "menupopup"
        );
        menu.id = `${id}-menu`;
    
        // Für jedes Profil einen Menüeintrag erstellen
        allProfiles.forEach((item) => {
          const menuItem = document.createElementNS(
            "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
            "menuitem"
          );
          menuItem.setAttribute("label", item.name);
          menuItem.setAttribute("class", "menuitem-iconic");
          menuItem.setAttribute("image", `${iconPath}${item.icon}`);
          menuItem.style.listStyleImage = `url("${iconPath}${item.icon}")`;
    
          menuItem.addEventListener("command", () => {
            launch(item);
          });
    
          menu.appendChild(menuItem);
        });
    
        button.appendChild(menu);
    
        // Menü beim Klick auf den Button öffnen
        button.addEventListener("click", (event) => {
          menu.openPopup(button, "after_start", 0, 0, false, false, event);
        });
      }
    
      // Funktion zum Starten des Browsers mit dem ausgewählten Profil
      function launch(item) {
        try {
          const file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          file.initWithPath(item.exe);
    
          const process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
          process.init(file);
    
          let args = [];
          const isFirefox = item.exe.toLowerCase().includes("firefox.exe");
          const isProfilePath = item.profile && (item.profile.includes("\\") || item.profile.includes("/"));
    
          if (isFirefox && isProfilePath) {
            args = ["-profile", item.profile, "-foreground"];
          } else if (isFirefox) {
            args = ["-P", item.profile.split("\\").pop(), "-foreground"];
          }
    
          process.run(false, args, args.length);
        } catch (e) {
          console.error("[FoxStarter]", e);
        }
      }
    })();
    Alles anzeigen

    FoxIcons.zip

  • Profilmanager

    • Mira_Belle
    • 15. Mai 2026 um 12:40

    .DeJaVu

    Kannst Du Autoit?

    Aber Ps kannst Du, da bin ich mir sicher.

    Schreibe doch mal einen neuen FFloader.

    Oder, wenn Du Zugriff auf den Code von Cashy's Loader hast, korrigiere diesen.

    Das Autoitskript könnte ich auch in eine EXE wandeln.

  • Profilmanager

    • Mira_Belle
    • 15. Mai 2026 um 12:08

    Ja, auf diese Idee war ich auch schon gekommen.

    Werde mal schauen, ob Code aus diesem Skript für das Projekt verwertbar ist.

  • Profilmanager

    • Mira_Belle
    • 14. Mai 2026 um 21:37

    Obacht!
    Die portablen Firefoxversionen unterscheiden sich erheblich!
    Beispiel:
    Jene nach der Methode von 2002Andreas

    Code
    C:\Portable-Firefox\Beta
    Darin befindet sich der "Starter"!
    Entweder "FirefoxStarter.exe" oder der "bessere" "MultipleFirefoxLoader.exe".
    Letztere funktioniert auch per aufruf aus dem Skript!
    Ein Danke an @Endor 
    Dann noch die "Installation", also die Programmdateien.
    C:\Portable-Firefox\Nightly\Firefox
    und das Profil, welches beim ersten aufruf des Programms erstellt wird.
    C:\Portable-Firefox\Nightly\Profilordner

    Und jetzt zum Vergleich FuchsFan 's Portable.

    Code
    C:\Portable-Firefox\Portable.Firefox.Updater.v1.3.5.0
    Darin enhalten sind,
    "Firefox Beta x64 Launcher.exe", "Firefox ESR x64 Launcher.exe", "Firefox Nightly x64 Launcher.exe" und
    "Firefox Stable x64 Launcher.exe"!
    Und dann wären da dann nur noch die Ordner "Firefox Beta x64", "Firefox ESR x64", "Firefox Nightly x64"
    und "Firefox Stable x64" ‼
    
    In diesen Ordner befinden sich jeweils die entsprechenden Versionen des Firefox.
    Also die Programmdateien.
    Und ...
    der Profilordner!
    Beispiel:
    C:\Portable-Firefox\Portable.Firefox.Updater.v1.3.5.0\Firefox Beta x64\profile
    Alles anzeigen

    Aber auch die Programmdateien unterscheiden sich von denen, wo einfach nur die Setupdatei entpackt wurde. ;)

    Wie ich schon erwähnte, werde ich ab nächster Woche etwas genauer
    a. mit den verschiedenen Portablen auseinandersetzen.
    b. schauen, ob und wie auch aus einer Portablen per Skript eine andere Version gestartet werden kann.

    Aber testet ruhig weiter, achtet aber darauf, welche Art von Portable ihr nutzt.
    Das ist wichtig!
    Und auch welchen "Loader" ihr nutzt.
    Am besten ersetzt Ihr Cashy's "Loader (FirefoxStarter.exe) durch den "MultipleFirefoxLoader.exe".
    Dann funktioniert auch der "Aufruf" aus dem Skript.

    Und hier der Zwischenstand.
    Das Skript funktioniert z.Z. nur aus einer installierten Version:!:

    Code
    // Das Script erstellt einen Button, der den Profilmanager zur Auswahl einer weiteren Instanz öffnet.
    
    // Source file https://www.camp-firefox.de/forum/thema/xxx
    
    /* ----------------------------------------------------------------------------------- */
    /*     Zu beachten ist, dass die Grafiken sich im richtigen Ordner befinden müssen     */
    /*            %appdata%\Mozilla\Firefox\Profiles\"Profilname"\chrome\icons             */
    /* ----------------------------------------------------------------------------------- */
    
    (function() {
      if (!window.gBrowser) return;
    
      // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
      const id = 'aboutprofiles-Start'; // Id des Buttons
      const label = 'Profil zusätzlich starten'; // Bezeichnung des Buttons
      const tooltiptext = 'Zusätzliche Firefox-Profile starten';
    
      // Icon-Einstellungen
      const icon = 'profile.svg';  // [Name.Dateiendung] des Symbols
      const iconPath = '/chrome/icons/'; // Pfad zum Ordner der das Icon beinhaltet
    
      // Portable Firefox-Pfade
      const portableProfiles = [
        {
          name: "Portable Version 53.0 💛",
          profileName: "profile",
        //  exePath: "C:\\Portable-Firefox\\Firefox_53.0\\Firefox Stable x32 Launcher.exe",
          exePath: "C:\\Portable-Firefox\\Firefox_53.0\\MultipleFirefoxLoader.exe",
          iconPath: "file:///C:/FoxIcons/Nightly.png"
        },
        {
          name: "Portable Beta 💙",
          profileName: "profile",
          exePath: "C:\\Portable-Firefox\\Beta\\MultipleFirefoxLoader.exe",
          iconPath: "file:///C:/FoxIcons/Nightly.png"
        },
        {
          name: "Portable Nigly 💜",
          profileName: "profile",
          exePath: "C:\\Portable-Firefox\\Nightly\\MultipleFirefoxLoader.exe",
          iconPath: "file:///C:/FoxIcons/Nightly.png"
        }
      ];
      // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    
      const popup_id = id + '-popup';
      const curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
    
      // Basispfad für profiles.ini
      const basePath = PathUtils.normalize(PathUtils.parent(PathUtils.parent(PathUtils.profileDir)));
      const INI_PATH = basePath + "\\profiles.ini";
    
      // 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 = '#ff5a79';
          }
        });
      } catch(e) {}
    
      // EXE-Pfad aus compatibility.ini eines Profils lesen
      function getFirefoxExeForProfile(profilePath) {
        try {
          const compatPath = profilePath + "\\compatibility.ini";
          let compatFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          compatFile.initWithPath(compatPath);
    
          if (!compatFile.exists()) return null;
    
          const parser = Cc["@mozilla.org/xpcom/ini-parser-factory;1"]
            .getService(Ci.nsIINIParserFactory)
            .createINIParser(compatFile);
          const platformDir = parser.getString("Compatibility", "LastPlatformDir");
          if (platformDir) return platformDir + "\\firefox.exe";
        } catch(e) {
          console.error("compatibility.ini Fehler für", profilePath, e);
        }
        return null;
      }
    
      // Absoluten Profilpfad aus profiles.ini berechnen
      function getAbsoluteProfilePath(iniParser, section) {
        const rawPath = iniParser.getString(section, "Path");
        let isRelative;
        try {
          isRelative = iniParser.getString(section, "IsRelative");
        } catch(e) {
          isRelative = "1";
        }
        if (!rawPath) return null;
        if (isRelative === "1") {
          return PathUtils.normalize(basePath + "\\" + rawPath.replace(/\//g, "\\"));
        }
        return PathUtils.normalize(rawPath);
      }
    
      /* Zum Testen deaktiviert!
      // Profil starten
      function startProfile(profileName, exePath) {
        // Falls exePath auf "Launcher.exe" endet, starte die EXE ohne Parameter
        if (exePath && exePath.toLowerCase().includes("launcher.exe")) {
          let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          file.initWithPath(exePath);
    
          if (!file.exists()) {
            console.error("Firefox EXE nicht gefunden:", exePath);
            return;
          }
    
          let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
          process.init(file);
          process.run(false, [], 0); // Keine Parameter für Portable-Launcher
          return;
        }
    
        // Standard-Firefox-EXE mit -P-Parameter starten
        if (!exePath) {
          const curDir = Services.dirsvc.get("GreBinD", Ci.nsIFile);
          exePath = curDir.path + "\\firefox.exe";
        }
    
        let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
        file.initWithPath(exePath);
    
        if (!file.exists()) {
          console.error("Firefox EXE nicht gefunden:", exePath);
          return;
        }
    
        let args = ["-no-remote", "-P", profileName || ""];
        let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
        process.init(file);
        process.run(false, args, args.length);
      }
      */
    
    /*
    function startProfile(profileName, exePath) {
      console.log("startProfile aufgerufen mit:", { profileName, exePath }); // Debug-Ausgabe
    
      // Falls exePath auf "launcher.exe" endet (unabhängig von Groß-/Kleinschreibung)
      if (exePath && exePath.toLowerCase().endsWith("launcher.exe")) {
        console.log("Starte Portable-Launcher:", exePath); // Debug-Ausgabe
        let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
        file.initWithPath(exePath);
    
        if (!file.exists()) {
          console.error("Datei nicht gefunden:", exePath); // Debug-Ausgabe
          return;
        }
    
        let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
        process.init(file);
        process.run(false, [], 0);
        return;
      }
    
      // Standard-Firefox-EXE mit -P-Parameter starten
      console.log("Starte Standard-Firefox:", exePath); // Debug-Ausgabe
      if (!exePath) {
        const curDir = Services.dirsvc.get("GreBinD", Ci.nsIFile);
        exePath = curDir.path + "\\firefox.exe";
      }
    
      let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
      file.initWithPath(exePath);
    
      if (!file.exists()) {
        console.error("Firefox EXE nicht gefunden:", exePath);
        return;
      }
    
      let args = ["-no-remote", "-P", profileName || ""];
      let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
      process.init(file);
      process.run(false, args, args.length);
    }
    */
      // NEU
    
    function startProfile(profileName, exePath) {
      console.log("startProfile aufgerufen mit:", { profileName, exePath });
    
      // Falls exePath auf "launcher.exe" endet
      if (exePath && exePath.toLowerCase().endsWith("launcher.exe")) {
        console.log("Starte Portable-Launcher:", exePath);
    
        // Pfad in Anführungszeichen setzen, falls Leerzeichen enthalten sind
        const quotedExePath = exePath.includes(" ") ? `"${exePath}"` : exePath;
    
        let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
        file.initWithPath(exePath); // Hier bleibt der Pfad ohne Anführungszeichen
    
        if (!file.exists()) {
          console.error("Datei nicht gefunden:", exePath);
          return;
        }
    
        let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
        process.init(file);
    
        // WICHTIG: Leere Argumentenliste, aber Pfad mit Anführungszeichen
        // Da nsIProcess den Pfad intern verarbeitet, reichen leere Argumente
        process.run(false, [], 0);
        return;
      }
    
      // Standard-Firefox-EXE mit -P-Parameter starten
      console.log("Starte Standard-Firefox:", exePath);
      if (!exePath) {
        const curDir = Services.dirsvc.get("GreBinD", Ci.nsIFile);
        exePath = curDir.path + "\\firefox.exe";
      }
    
      let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
      file.initWithPath(exePath);
    
      if (!file.exists()) {
        console.error("Firefox EXE nicht gefunden:", exePath);
        return;
      }
    
      let args = ["-no-remote", "-P", profileName || ""];
      let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
      process.init(file);
      process.run(false, args, args.length);
    }
    
    /*
    function startProfile(profileName, exePath) {
      console.log("startProfile aufgerufen mit:", { profileName, exePath });
    
      // Falls exePath auf "launcher.exe" endet
      if (exePath && exePath.toLowerCase().endsWith("launcher.exe")) {
        console.log("Starte Portable-Launcher:", exePath);
    
        // Pfad in Anführungszeichen setzen, falls Leerzeichen enthalten sind
        const commandLine = `"${exePath}"`;
    
        let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
        process.initWithCommandLine(commandLine); // Verwende initWithCommandLine
        process.run(false, [], 0);
        return;
      }
    
      // Standard-Firefox-EXE mit -P-Parameter starten
      console.log("Starte Standard-Firefox:", exePath);
      if (!exePath) {
        const curDir = Services.dirsvc.get("GreBinD", Ci.nsIFile);
        exePath = curDir.path + "\\firefox.exe";
      }
    
      // Pfad in Anführungszeichen setzen, falls Leerzeichen enthalten sind
      const commandLine = `"${exePath}" -no-remote -P "${profileName || ""}"`;
    
      let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
      process.initWithCommandLine(commandLine);
      process.run(false, [], 0);
    }
    */
    
      /* Zum Testen deaktiviert
      // Menüeintrag erstellen
      function addProfileItem(aDocument, menupopup, label, profileName, exePath, iconPath = null) {
        const xulNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
        let item = aDocument.createElementNS(xulNS, "menuitem");
        item.setAttribute("label", label);
    
        if (profileName !== undefined) {
          item.setAttribute("tooltiptext", exePath || "Standard-EXE");
          item.addEventListener("command", () => startProfile(profileName, exePath));
        }
    
        if (iconPath) {
          item.style.listStyleImage = `url("${iconPath}")`;
          item.style.minWidth = 'fit-content';
        }
    
        menupopup.appendChild(item);
      }
      */
    function addProfileItem(aDocument, menupopup, label, profileName, exePath, iconPath = null) {
      const xulNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
      let item = aDocument.createElementNS(xulNS, "menuitem");
      item.setAttribute("label", label);
    
      if (profileName !== undefined) {
        item.setAttribute("tooltiptext", exePath || "Standard-EXE");
        // Debug: Gib den exePath in der Konsole aus, wenn der Menüeintrag erstellt wird
        console.log("Menüeintrag erstellt:", { label, profileName, exePath });
        item.addEventListener("command", () => startProfile(profileName, exePath));
      }
    
      if (iconPath) {
        item.style.listStyleImage = `url("${iconPath}")`;
        item.style.minWidth = 'fit-content';
      }
    
      menupopup.appendChild(item);
    }
    
    
      // Profile aus profiles.ini laden + Portable-Profile hinzufügen
      function loadProfilesWithNiceNames(aDocument, menupopup) {
        try {
          let iniFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          iniFile.initWithPath(INI_PATH);
    
          if (!iniFile.exists()) {
            addProfileItem(aDocument, menupopup, "⚠️ profiles.ini fehlt");
            return;
          }
    
          const iniParser = Cc["@mozilla.org/xpcom/ini-parser-factory;1"]
            .getService(Ci.nsIINIParserFactory)
            .createINIParser(iniFile);
    
          // Standard-Profile aus profiles.ini laden
          for (let section of iniParser.getSections()) {
            if (!section.startsWith("Profile")) continue;
            let profileName;
            try {
              profileName = iniParser.getString(section, "Name");
            } catch(e) {
              profileName = section.replace("Profile", "");
            }
            const profilePath = getAbsoluteProfilePath(iniParser, section);
            let exePath = null;
            if (profilePath) {
              exePath = getFirefoxExeForProfile(profilePath);
            }
            let displayLabel = profileName;
            if (exePath) {
              const parts = exePath.replace(/\\firefox\.exe$/i, "").split("\\");
              const folder = parts[parts.length - 1];
              displayLabel += "  →  " + folder;
            }
            addProfileItem(aDocument, menupopup, displayLabel, profileName, exePath);
          }
    
          // Portable-Profile aus der Konfiguration hinzufügen
          for (let portable of portableProfiles) {
            addProfileItem(
              aDocument,
              menupopup,
              portable.name,
              portable.profileName,
              portable.exePath,
              portable.iconPath
            );
          }
        } catch(e) {
          console.error("Fehler beim Laden der Profile:", e);
          addProfileItem(aDocument, menupopup, "⚠️ Fehler beim Laden der Profile");
        }
      }
    
      // Popup erstellen oder aktualisieren
      function buildPopupIfNeeded() {
        const button = document.getElementById(id);
        if (!button) return null;
    
        const xulNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
        let popup = document.getElementById(popup_id);
    
        if (!popup) {
          popup = document.createElementNS(xulNS, "menupopup");
          popup.setAttribute("id", popup_id);
          button.appendChild(popup);
        } else {
          popup.textContent = "";
        }
    
        loadProfilesWithNiceNames(document, popup);
        button.setAttribute("profiles-menu-built", "true");
        return popup;
      }
    
      // Button-Klick behandeln (nur Linksklick)
      function click_button() {
        const button = document.getElementById(id);
        if (!button) return;
    
        // Kontextmenü unterdrücken
        button.addEventListener("contextmenu", event => event.preventDefault());
    
        // Event-Listener für Linksklick registrieren
        button.addEventListener("mousedown", function handleClick(event) {
          if (event.button !== 0) return; // Nur Linksklick
          event.preventDefault();
          event.stopPropagation();
    
          const popup = buildPopupIfNeeded();
          if (!popup) return;
    
          try {
            popup.hidePopup();
          } catch(e) {}
    
          popup.openPopup(button, "after_start", 0, 0, false, false);
        });
      }
    
      // Initialisierung
      function initForWindow() {
        const init = () => click_button();
        if (document.readyState !== "loading") {
          init();
        } else {
          window.addEventListener("DOMContentLoaded", init);
        }
      }
    
      // Initialisierung + nach Toolbar-Anpassung
      initForWindow();
      window.addEventListener('aftercustomization', () => setTimeout(click_button, 100));
    })();
    Alles anzeigen

    :saint: Sorry, da ist noch auskommentierter Code vorhanden, aber das Skript ist ja auch noch in der "Pubertät". :D

Unterstütze uns!

Jährlich (2026)

76,1 %

76,1% (589,79 von 775 EUR)

Jetzt spenden
  1. Kontakt
  2. Datenschutz
  3. Impressum
Community-Software: WoltLab Suite™
Mastodon