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. GermanFreme82

Beiträge von GermanFreme82

  • Firefox 155 - Angst vor Update

    • GermanFreme82
    • 3. September 2026 um 12:41

    Hab vielen Dank für deine Hilfe und deine Geduld. Ich bin jetzt erleichtert, dass alles wieder funktioniert.

  • Firefox 155 - Angst vor Update

    • GermanFreme82
    • 3. September 2026 um 12:36

    Perfekt, also mein großer blauer Knopf zum Firefox Neustarten ist da, die Tab-Leiste ist auch wieder da, wo sie hingehört und die Leiste am Fußboden ist auch wieder da. Das ist das, was mir sofort ins Auge springt. Also hat es funktioniert, sagst du. 😉

  • Firefox 155 - Angst vor Update

    • GermanFreme82
    • 3. September 2026 um 12:35

    Okay, also es gibt hier kein... Klappt nur 50%, klappt nur 75%, entweder ganz oder gar nicht sozusagen. Richtig?

  • Firefox 155 - Angst vor Update

    • GermanFreme82
    • 3. September 2026 um 12:31



    Ok, ich hab das jetzt so gemacht.
    Das mit dem umbenennen mit der eins davor hat nicht funktioniert ich habe also diesen einen ordner und die eine datei das original weggeschmissen Und durch diese zwei sachen ersetzt jetzt scheint es zu funktionieren

    Gibt es irgendetwas woran ich merke, dass es geklappt hat oder dass es fehlerhaft war?

  • Firefox 155 - Angst vor Update

    • GermanFreme82
    • 3. September 2026 um 12:22
    Zitat von 2002Andreas
    Zitat von GermanFreme82

    Das funktioniert nicht.

    Ich hatte dir doch oben extra einen Link gegeben.

    Hier kannst du die beiden benötigten Dateien downloaden:

    Beitrag

    RE: JavaScript in der Nightly 155.0a1 (2026-07-28)

    Bitte mal testen.

    Die Datei und den Ordner im Installatiosnordner umbenennen.

    Dann die .zip entpacken und beides in den Ordner wieder einfügen.

    Ordner.zip
    2002Andreas
    29. Juli 2026 um 20:33

    Ja, das hat jetzt funktioniert. Den Link, den du mir gegeben hast, der hat funktioniert. Der auf GitHub war leider erfolglos.
    Ich werde es jetzt versuchen mal gucken ob danach Firefox noch funktioniert oder ob hier alles in die Luft fliegt. 🤣

  • Firefox 155 - Angst vor Update

    • GermanFreme82
    • 3. September 2026 um 12:15





    Wenn ich auf den Link klicke und versuche mit rechter Maustaste dieses Firefox Anpassungs-Zip-Archiv runterzuladen, dann kommen die Fehlermeldungen. Das funktioniert nicht. Das ist kein Zip-Archiv, sagt mein Computer.

  • Firefox 155 - Angst vor Update

    • GermanFreme82
    • 3. September 2026 um 12:09

    Hallo liebe Community.

    Ich habe erstmal ein Backup von meinem Firefox gemacht, Version 154.0.1, bevor ich auf die neue Version 155 wechseln wollte.
    Nach dem Update auf Firefox 155 kamen gleich die ersten Probleme.

    Die Tab-Leiste ist nicht mehr unter der Lesezeichen-Symbol-Leiste.
    Die Statusleiste unten am Fußboden war verschwunden.
    Das blaue Symbol, wo ich mit der rechten Maustaste draufklicken kann, um den Firefox komplett neu zu starten und alles zu entladen, war verschwunden.

    Jetzt habe ich im Forum irgendwas gelesen von Firefox 155, Skripte funktionieren nicht mehr.

    Es tut mir sehr leid, aber ich verstehe nur Bahnhof. Keine Ahnung, was da nicht funktioniert und warum es nicht mehr funktioniert. Ich würde mir wünschen, dass alles so funktioniert, dass es optisch wieder so aussieht, wie bei Version 154.0.1. Mehr möchte ich nicht.

    Ich werde dem Beitrag ein Foto beifügen und ich möchte, dass mein Firefox danach so aussieht, wenn ich das Update 155 einspiele. Außerdem habe ich noch ein Foto beigefügt, da sieht man welche Skripte bei mir im Firefox Ordner drin sind. Die müssten bitte funktionsfähig bleiben.

    Es wäre also lieb, wenn mir jemand helfen könnte, damit es keine optischen Änderungen gibt. 😢🙏

    LINK (keine Ahnung ?): https://github.com/Endor8/userChr…rChrome/Dateien



  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • GermanFreme82
    • 27. Mai 2026 um 02:07

    Mira_Belle Vielen Dank für den Hinweis. Das hört sich echt super an, was ich bisher gelesen habe. Wenn ich wieder etwas mehr Kraft für diese Umstellung habe, dann möchte ich das unbedingt auch umsetzen/probieren.

  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • GermanFreme82
    • 20. Mai 2026 um 23:26

    2002Andreas

    Ich verstehe, aber gibt es eine neue Version davon, die ich nutzen könnte, die fast das gleiche macht ?

    Ich meine damit das Aussehen der TABs, das verschieben, die Reihen, die Position und keine Ahnung, was ich davon noch benötige. Ich wette, das ich nicht einmal die Hälfte davon brauch, was da noch alles drinsteckt in dem Script.

    Die Funktionen sind mir nicht einmal alle bekannt darin.

    Aus dem Stehgreif würde ich sagen ich brauch:

    TAB
    ----------
    Design
    Position (unter Lesezeichen Symbolleiste)
    6 Reihen untereinander danach Scrolleiste (oben unten Pfeile)
    8 pro Reihe
    verschieben
    ...

    mehr fällt mir aktuell nicht ein.

  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • GermanFreme82
    • 20. Mai 2026 um 20:37

    2002Andreas

    ich muss gerade tierisch lachen 😉. Ich zeig dir mal das Ergebnis, denn Firefox macht wieder "Firefox Dinge" 🤣



    Lass es mich mal so ausdrücken. Es sieht interessant aus. 😅

    Das Problem siehst du dann aber auf dem nächsten Foto, was ich dir jetzt zeige. Wenn ich nämlich dann drei Leisten mit geöffneten Tabs habe und dann einen zweiten Tab anpinne, dann wird er ebenfalls an die linke Seite gerückt.



    Hast du vielleicht noch eine andere Idee im Kopf, die man umsetzen könnte? Weil es gestaltet sich dann bei mehreren Tab-Leisten ziemlich schwierig dann den Überblick zu behalten. 😇

  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • GermanFreme82
    • 20. Mai 2026 um 20:08

    Hallo liebe Fuchsfreunde !

    Ich habe folgendes Problem in meinem Firefox. Ich weiß nicht, wann das Problem aufgetreten ist, aber es ist jetzt einfach da und ich möchte es nicht.

    Wenn ich so viele Tabs geöffnet habe, dass davon eine Zeile gefüllt ist, das Bild habe ich in diesen Beitrag reingemacht und ich pinne dann einen dieser Tabs an, ist das Verhalten völlig normal. Das sieht man auf dem Foto ganz deutlich.




    Wenn ich jedoch so viele Tabs aufmache bei mir, dass man eine zweite Zeile braucht im Firefox und ich pinne dann einen dieser Tabs an, völlig egal welcher das ist, dann dreht dieses Skript völlig am Rad und läuft Amok und ich habe eine riesengroße Blase. Das brauche ich nicht.



    Könnte bitte jemand in diesem Skript die Zeile reparieren, die das kaputt macht?


    CSS
    // ==UserScript==
    // @name           MultiRowTabLiteforFx.uc.js
    // @namespace      Based on Alice0775's zzzz-MultiRowTab_LiteforFx48.uc.js
    // @description    Mehrzeilige Tableiste - Experimentelle CSS Version
    // @include        main
    // @compatibility  Firefox141+
    // @version        2025/06/30 16:58
    // ==/UserScript==
    "use strict";
    MultiRowTabLiteforFx();
    function MultiRowTabLiteforFx() {
    if (!window.gBrowser) { return; }
      // -- Config --
      // Vergleichbarer CSS Code in userChrome.css Datei wird vorrangig behandelt!
      const                                                 // Mehrzeilige Tableiste Ein/Aus Anzahl der Tabzeilen
      MultiRowTab_OnOff_and_TabBar_Rows =       -1         ,// [-1] = Mehrzeilige Tableiste aktiv unbegrenzte Anzahl von Zeilen.
                                                            //  0   = Mehrzeilige Tableiste aus.
                                                            //  1   = Mehrzeilige Tableiste aktiv. Standard = 1 Zeile. Bei Berührung
                                                            //        der Tableiste mit der der Maus, werden die zweite und die folgenden 
                                                            //        Zeilen bis zur angegebenen Anzahl von Zeilen angezeigt.
                                                            //  2   = Mehrzeilige Tableiste aktiv. Anzahl der Tabzeilen angeben.
           
      TabBar_Rows_on_MouseOver =                3          ,// Standard = 1 Zeile. Anzahl der Zeilen angeben, die angezeigt werden sollen, 
                                                            // wenn der Mauszeiger über die Tableiste bewegt wird. Voraussetzung: 
                                                            // „MultiRowTab_OnOff_and_TabBar_Rows“ auf „1“ setzen.
           
      TabBar_DisplayTime_on_MouseOver =         1          ,// Sie können die Anzeigezeit (Sekunden) festlegen, wann die zweite und die 
                                                            // folgenden Zeilen beim Mouseover angezeigt werden. Das Display zeigt den  
                                                            // eingestellten Wert(Sekunden) an und kehrt dann zur ersten Zeile zurück.
                                                            // Position der Tab-Leiste.
      TabBar_Position =                         1          ,// [0] = Standard
                                                            // 1   = unter der Symbolleiste
                                                            // 2   = unter dem Fenster
                                                            // Positionen der Tab-Leiste und der Lesezeichen-Symbolleiste tauschen.
                                                            // sofern die Position der Tab-Leiste unterhalb der Symbolleiste festgelegt ist.
                                                            // Voraussetzung: "TabBar_Position" auf "1".
      Bookmark_Toolbar_Position =             true         ,// [true] = Menüleiste, Navigationsleiste, Lesezeichenleiste, Tableiste
                                                            // false = Menüleiste, Navigationsleiste, Tableiste, Lesezeichensymbolleiste
                                                            // Tab-Höhe „UI-Dichte“
      UI_Density_Compact =                    32           ,// Standard = 29 Pixelbei Kompakt
      UI_Density_Normal =                     32           ,// Standard = 36 Pixel bei Normal
      UI_Density_Touch =                      41           ,// Standard = 41 Pixel bei Touch
                                                            // Tab-Breite
      Tab_Min_Width =                        165           ,// Standard - Mindestwert = 76px
      Tab_Max_Width =                        165           ,// Standard - Maxwert = 225px
                                                            // Bei gleichen Werten bei Min und Max, wird die Tabbreite fixiert!
                                                            // „Tab schließen“ Schaltfläche
      Tab_Close_Button =                       2           ,// [0] = Standard
                                                            //  1  = Ausgeblendet
                                                            //  2  = Auf allen Tabs anzeigen
                                                            //  3  = Nur bei Mausberührung anzeigen
                                                            //  4  = Aktive Tabs werden immer angezeigt, inaktive Tabs
                                                            // werden beim Mouseover angezeigt. *Standard für vertikalen Tab-Modus.
                                                            // ProtonUI Erscheinungsbild der Tabs ändern
      Proton_Margins =                      true           ,// [true] = Darstellung ProtonUI
                                                            // Die Höhe der Tab-Leiste entspricht der Höhe der UI-Dichte plus dem Leerraum darüber
                                                            // und darunter.                                                 
                                                            // false  = Darstellung wie bei browser.proton.enabled auf false, was man vor Firefox 90
                                                            // noch einstellen konnte.
                                                            // Wenn der Leerraum um die Tabs auf 0 und die Höhe auf die UI-Dichte eingestellt
                                                            // ist, ist sie 4 Pixel breiter und 8 Pixel niedriger als die Standardeinstellung.
                                    
                                                            // Ränder auf der linken und rechten Seite der Tabs
      Tab_Separators  =                     false          ,// [false] = Nicht anzeigen
                                                            // true    = Anzeigen
                                                            // Rahmen CSS wurde extrahiert und angepasst, an Aussehen wie bei browser.proton.enabled
                                                            // auf false, was man vor Firefox 90 noch einstellen konnte.
                                       
                                                            // Voraussetzung: „TabBar_Position“ auf „0“ setzen.
      TitleBar_Button_Autohide =            false          ,// [false] = Aktiviert
                                                            // true    = Deaktiviert
           
                                                            // Äußeren Rahmen der Titelleistenschaltfläche [-□×] reduzieren und transparent machen.
      TitleBar_Button_DisplayTime =          0.6           ,// Dauer der Anzeige in Sekunden, nach der Rückkehr zur Originalgröße und dem Aufheben
                                                            // der Transparenz per Mouseover angeben.
                                                            // Tab-Leiste von Anfang an auf die angegebene Höhe einstellen.
                                                            // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf „2“ oder höher setzen.
      Set_the_TabBar_to_the_Specified_Height =  false      ,// [false] = Die Tab-Leiste wird höher, wenn der nächsten Zeile weitere Tabs hinzugefügt werden.
                                                            //  true   = Verwendung: Die Tab-Leiste wird von Anfang an auf die angegebene Höhe eingestellt
                                                            // „.tabDropIndicator“, der beim Ziehen und Ablegen eines Tabs angezeigt wird, ersetzen.
                                                            // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf einen anderen Wert als „0“ setzen.
      Tab_Drop_Indicator =                  false          ,// [false] = Stecknadel Symbol 📍
                                                            // true    = Rote Linie (2px × 29px) als Symbol
                                                            // Position der angepinnten Tabs
                                                            // Voraussetzung: „MultiRowTab_OnOff_and_TabBar_Rows“ auf einen Wert ungleich „0“ setzen.
      Separate_Tabs_and_PinnedTabs =        false          ,// [false] = Standard
                                                            // true    = Angeheftete Tabs von der Tab-Leiste lösen und in die darüber liegende 
                                                            // Zeile verschieben. Breite der angehefteten Tabs für die Position der 
                                                            // angehefteten Tabs „true“ anpassen.
      PinnedTab_Width =                     false          ,// [false] = Kein Standard
                                                            //  true   = Breite angehefteter Tabs anpassen, z. B. „Tab-Breite“.
      PinnedTab_Min_Width =                    76          ,// Standard Mindestbreite =  76 Pixel
      PinnedTab_Max_Width =                   225          ,// Standard Maximalbreite = 225 Pixel
                                                            // Bei gleichen Werten ist die Breite fixiert.
                                                            // Angeheftete Tab, Schließen Schaltfläche
                                                            // Voraussetzung: „Separate_Tabs_and_PinnedTabs“ auf „true“ setzen.
      PinnedTab_Close_Button =                  0          ,// [0] = Standard
                                                            //  1  = auf allen Tabs sichtbar
                                                            //  2  = auf Tab bei Mouseover anzeigen
                                                            //  3  = Aktiver Tab immer sichtbar, inaktiver Tab bei Mouseover sichtbar 
                                                            // *Standard für vertikalen Tab-Modus.
                                                            // Tab-Leisten-Ziehbereich
      Left_Drag_Area =                          0          ,// Linker Ziehbereich Breite: Standard 40 Pixel
      Right_Drag_Area =                         0          ,// Rechter Ziehbereich Breite: Standard 40 Pixel
      Maximize_Left_Drag_Area =             false          ,// true = Linken Ziehbereich bei maximiertem Fenster anzeigen. Standard ausgeblendet.
      Fullscreen_Drag_Area =                false          ,// true = Linken und rechten Ziehbereich bei Vollbild anzeigen. Standard ausgeblendet.
                                                            // Wenn die Titelleiste angezeigt wird, funktioniert sie nicht als Drag-Bereich, selbst
                                                            // wenn „.titlebar-spacer“ angezeigt wird. Daher habe ich dafür gesorgt, dass sie nichts bewirkt.
      // -- Config Ende --
       css = `
       #TabsToolbar:not([collapsed="true"]) {
         :root[uidensity="compact"] & {
           --tab-min-height: ${UI_Density_Compact}px;
         }
         :root:not([uidensity]) & {
           --tab-min-height: ${UI_Density_Normal}px;
         }
         :root[uidensity="touch"] & {
           --tab-min-height: ${UI_Density_Touch}px;
         }
         
    &[dragtarget] {
       z-index: unset !important;
       position: unset !important;
       pointer-events: unset !important; /* avoid blocking dragover events on scroll buttons */
    }
    #tabbrowser-tabs[movingtab] & {
      position: unset !important;
    }
    #tabbrowser-tabs[movingtab] &:is(:active, [multiselected]) {
       position: relative;
       z-index: 2;
       pointer-events: none; /* avoid blocking dragover events on scroll buttons */
    }
         #tabbrowser-tabs {
           min-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px);
           ${MultiRowTab_OnOff_and_TabBar_Rows != 0 ? `
             &[overflow] {
               padding-inline: 0 !important;
               & > #tabbrowser-arrowscrollbox {
                 & > .tabbrowser-tab[pinned] {
                   display: flex;
                   margin-inline-start: 0 !important;
                   position: static !important;
                 }
                 &::part(scrollbox) {
                   padding-inline: 0;
                 }
               }
               & + #new-tab-button {
                 display: none;
               }
             }
             ${Tab_Drop_Indicator ? `
               & > .tab-drop-indicator {
                 background: url(
                   data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAdCAIAAAAPVCo9AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAASSURBVBhXY3growJEQ5+SUQEAOb1EM8kwskcAAAAASUVORK5CYII=
                 ) no-repeat center;
               }
             ` : ``}
             #tabbrowser-arrowscrollbox {
               &::part(scrollbox) {
                 & > slot {
                   flex-wrap: wrap;
                 }
                 ${MultiRowTab_OnOff_and_TabBar_Rows != -1 ? `
                   ${MultiRowTab_OnOff_and_TabBar_Rows == 1 ? `
                     ${TabBar_Rows_on_MouseOver == 0 || TabBar_Rows_on_MouseOver == 1 ? `
                       max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * 2);
                     ` : `
                       max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${TabBar_Rows_on_MouseOver});
                     `}
                     &:not(:hover) {
                       max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) !important;
                       ${Proton_Margins ? `scrollbar-width: none;` : ``}
                       transition: all 0s ease-in-out ${TabBar_DisplayTime_on_MouseOver}s;
                     }
                   ` : `
                     ${Set_the_TabBar_to_the_Specified_Height ? `
                       min-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows});
                       & > slot {
                         max-height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px);
                       }
                     ` : `
                       max-height: calc((var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px) * ${MultiRowTab_OnOff_and_TabBar_Rows});
                     `}
                   `}
                   overflow: hidden auto;
                   & scrollbar {
                     -moz-window-dragging: no-drag;
                   }
                 ` : ``}
               }
               &::part(overflow-start-indicator),
               &::part(overflow-end-indicator),
               &::part(scrollbutton-up),
               &::part(scrollbutton-down) {
                 display: none;
               }
               ${Separate_Tabs_and_PinnedTabs ? `
                 &:has(> .tabbrowser-tab[fadein][pinned]) {
                   &::part(scrollbox) {
                     & > slot::after {
                       display: flow-root list-item;
                       content: "";
                       flex-basis: -moz-available;
                       height: 0;
                       overflow: hidden;
                     }
                   }
                 }
                 .tabbrowser-tab[fadein] {
                   &:not([pinned]) {
                     #tabbrowser-tabs[haspinnedtabs] & {
                       &, & + :not(#tabs-newtab-button) {
                         order: 1;
                       }
                     }
                   }
                   &[pinned] {
                     .tab-background:after {
                       content: "📌";
                       font-size: 11px;
                       right: -2px;
                       position: absolute;
                       top: -2px;
                     }
                     ${PinnedTab_Width ? `
                       flex: 100 100;
                       max-width: ${PinnedTab_Max_Width}px;
                       min-width: ${PinnedTab_Min_Width}px;
                       .tab-throbber, .tab-icon-pending, .tab-icon-image, .tab-sharing-icon-overlay, .tab-icon-overlay {
                         margin-inline-end: 5.5px !important;
                       }
                       ${PinnedTab_Close_Button == 1 ? `
                         .tab-close-button {
                           display: flex;
                         }
                       ` : PinnedTab_Close_Button == 2 ? `
                         .tab-close-button {
                           display: none;
                         }
                         &:hover .tab-close-button {
                           display: flex;
                         }
                       ` : PinnedTab_Close_Button == 3 ? `
                         &:not([selected]):hover,
                         &[selected] {
                           .tab-close-button {
                             display: flex;
                           }
                         }
                       ` : ``}
                     ` : ``}
                   }
                 }
               ` : ``}
               #tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]):not([orient="vertical"]) > & {
                 &  > .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) {
                   margin-inline-start: 0 !important;
                 }
               }
             }
           ` : ``}
         }
         .tabbrowser-tab[fadein]:not([pinned]) {
           max-width: ${Tab_Max_Width}px;
           min-width: ${Tab_Min_Width}px;
           ${Tab_Close_Button == 1 ? `
             .tab-close-button {
               display: none;
             }
           ` : Tab_Close_Button == 2 ? `
             .tab-close-button {
               display: flex;
             }
           ` : Tab_Close_Button == 3 ? `
             .tab-close-button {
               display: none;
             }
             &:hover .tab-close-button {
               display: flex;
             }
           ` : Tab_Close_Button == 4 ? `
             &:not([selected]):hover {
               .tab-close-button {
                 display: flex;
               }
             }
           ` : ``}
         }
         ${Tab_Separators ? `
           .titlebar-spacer[type="pre-tabs"] {
             border-inline-end: 1px solid color-mix(in srgb, currentColor 20%, transparent);
           }
           .tabbrowser-tab {
             &::after,
             &::before {
               border-left: 1px solid color-mix(in srgb, currentColor 50%, transparent);
               height: calc(var(--tab-min-height) - 15%);
               margin-block: auto;
             }
             &:hover::after,
             &[multiselected]::after,
             #tabbrowser-tabs:not([movingtab]) &:has(+ .tabbrowser-tab:hover)::after,
             #tabbrowser-tabs:not([movingtab]) &:has(+ [multiselected])::after {
               height: 100%;
             }
             &::after,
             #tabbrowser-tabs[movingtab] &[visuallyselected]::before {
               display: flex;
               content: "";
             }
           }
         ` : ``}
         ${Proton_Margins ? `` : `
           .tabbrowser-tab,
           .toolbarbutton-1 {
             padding: 0;
           }
           .tabbrowser-tab,
           #tabs-newtab-button {
             height: var(--tab-min-height);
           }
           .tabbrowser-tab {
             .tab-background {
               box-shadow: none;
               margin-block: 0;
             }
             .tab-label-container {
               height: var(--tab-min-height);
               max-height: 24px;
             }
             .tab-close-button {
               height: 20px !important;
               padding-block: 3px !important;
             }
             &[usercontextid] > .tab-stack > .tab-background > .tab-context-line {
               margin-block-start: 1px !important;
             }
           }
         `}
       ${TabBar_Position == 0 ? `
         .titlebar-buttonbox-container {
           height: calc(var(--tab-min-height) + ${Proton_Margins ? 8 : 0}px);
         }
         ${TitleBar_Button_Autohide ? `
           & > .titlebar-buttonbox-container {
             background-color: color-mix(in srgb, currentColor 20%, transparent);
             position: fixed;
             right: 0;
             &:not(:hover) {
               height: 6px;
               .titlebar-button {
                 padding: 0;
               }
               &,& .titlebar-button {
                 opacity: 0;
                 transition: all 0s ease-in-out ${TitleBar_Button_DisplayTime}s;
               }
             }
           }
         ` : ``}
       }` : `
         ${TabBar_Position == 1 || TabBar_Position == 2 ? `
           & > .titlebar-buttonbox-container {
               display: none;
           }}
           #nav-bar {
             &:not(.browser-titlebar) {
               :root[customtitlebar] #toolbar-menubar[autohide="true"] ~ &,
               :root[inFullscreen] #toolbar-menubar ~ & {
                 & > .titlebar-buttonbox-container {
                   display: flex;
                 }
               }
             }
             .titlebar-button {
               padding-block: 0;
             }
           }
         ` : ``}
         body:has(> #navigator-toolbox:not([tabs-hidden])) {
           ${TabBar_Position == 1 ? `
             script, toolbar:not(#TabsToolbar ${Bookmark_Toolbar_Position ? `` : `, #PersonalToolbar`}) {
               order: -1;
             }
           ` : TabBar_Position == 2 ? `
             & > #fullscr-toggler[hidden] + tabbox,
             :root[inFullscreen] & > tabbox:hover {
               border-top: 0.01px solid var(--chrome-content-separator-color);
             }
             & > tabbox > #navigator-toolbox {
               border-block: none !important;
             }
             :root[inFullscreen] & {
               & > #navigator-toolbox {
                 transition: none;
                 &:has(~ tabbox:hover) {
                   margin-top: 0 !important;
                 }
                 &:hover ~ tabbox > #navigator-toolbox {
                   display: flex;
                 }
               }
               & > tabbox:not(:hover) {
                 border-top: 0.01px solid transparent;
                 & > #navigator-toolbox {
                   display: none;
                 }
               }
             }
           ` : ``}
         }
       `}
       toolbar[id$="bar"].browser-titlebar {
         .titlebar-spacer {
           &[type="pre-tabs"] {
             width: ${Left_Drag_Area}px;
           }
           &[type="post-tabs"] {
             width: ${Right_Drag_Area}px;
           }
           ${Maximize_Left_Drag_Area ? `
             :root[customtitlebar]:not([sizemode="normal"], [inFullscreen]) &[type="pre-tabs"] {
               display: flex;
             }
           ` : ``}
           ${Fullscreen_Drag_Area ? `
             :root[customtitlebar][inFullscreen] & {
               display: flex;
             }
           ` : ``}
         }
         #navigator-toolbox[tabs-hidden] & {
           #new-tab-button {
             display: none;
           }
         }
       }
       `,
       sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService),
       uri = Services.io.newURI("data:text/css;charset=UTF=8," + encodeURIComponent(css));
       ["0", "2", "dragend", "SSTabRestored", "TabAttrModified"].find(eventType => {
         if(!sss.sheetRegistered(uri, eventType)) sss.loadAndRegisterSheet(uri, eventType);
         if (MultiRowTab_OnOff_and_TabBar_Rows > 0) {
           gBrowser.tabContainer.addEventListener(eventType, (e) => {
             e.target.scrollIntoView({ behavior: "instant", block: "nearest" })
           })
         }
       })
       if (TabBar_Position == 2) {
         document.body.appendChild(
           document.createXULElement("tabbox")
         ).appendChild(
           document.importNode(document.getElementById("navigator-toolbox"))
         ).appendChild(
           document.adoptNode(document.getElementById("TabsToolbar"))
         )
       }
       gBrowser.tabContainer._getDropIndex = function(event) {
           let tabToDropAt = getTabFromEventTarget(event, false);
           if (tabToDropAt?.localName == "tab-group") {
             tabToDropAt = tabToDropAt.previousSibling;
             if (!tabToDropAt) {
               tabToDropAt = gBrowser.visibleTabs[0];
             }
           }
           if (!tabToDropAt) {
             tabToDropAt = gBrowser.visibleTabs[gBrowser.visibleTabs.length - 1];
           }
           const tabPos = gBrowser.tabContainer.getIndexOfItem(tabToDropAt);
           if (window.getComputedStyle(this).direction == "ltr") {
               let rect = tabToDropAt.getBoundingClientRect();
               if (event.clientX < rect.x + rect.width / 2)
                   return tabPos;
               else 
                   return tabPos + 1;
               
           } else {
               let rect = tabToDropAt.getBoundingClientRect();
               if (event.clientX > rect.x + rect.width / 2)
                   return tabPos;
               else
                   return tabPos + 1;
           }
       };
       // We set this to check if the listeners were added before
       let listenersActive = false;
    gBrowser.tabContainer.startTabDrag = function    startTabDrag(event, tab, { fromTabList = false } = {}) {
     const isTab = element => gBrowser.isTab(element);
     const isTabGroup = element => gBrowser.isTabGroup(element);
     const isTabGroupLabel = element => gBrowser.isTabGroupLabel(element);
         if (tab.multiselected) {
           for (let multiselectedTab of gBrowser.selectedTabs.filter(
             t => t.pinned != tab.pinned
           )) {
             gBrowser.removeFromMultiSelectedTabs(multiselectedTab);
           }
         }
         let dataTransferOrderedTabs;
         if (fromTabList || isTabGroupLabel(tab)) {
           // Dragging a group label or an item in the all tabs menu doesn't
           // change the currently selected tabs, and it's not possible to select
           // multiple tabs from the list, thus handle only the dragged tab in
           // this case.
           dataTransferOrderedTabs = [tab];
         } else {
           this.selectedItem = tab;
           let selectedTabs = gBrowser.selectedTabs;
           let otherSelectedTabs = selectedTabs.filter(
             selectedTab => selectedTab != tab
           );
           dataTransferOrderedTabs = [tab].concat(otherSelectedTabs);
         }
         let dt = event.dataTransfer;
         for (let i = 0; i < dataTransferOrderedTabs.length; i++) {
           let dtTab = dataTransferOrderedTabs[i];
           dt.mozSetDataAt(TAB_DROP_TYPE, dtTab, i);
           if (isTab(dtTab)) {
             let dtBrowser = dtTab.linkedBrowser;
             // We must not set text/x-moz-url or text/plain data here,
             // otherwise trying to detach the tab by dropping it on the desktop
             // may result in an "internet shortcut"
             dt.mozSetDataAt(
               "text/x-moz-text-internal",
               dtBrowser.currentURI.spec,
               i
             );
           }
         }
         // Set the cursor to an arrow during tab drags.
         dt.mozCursor = "default";
         // Set the tab as the source of the drag, which ensures we have a stable
         // node to deliver the `dragend` event.  See bug 1345473.
         dt.addElement(tab);
         // Create a canvas to which we capture the current tab.
         // Until canvas is HiDPI-aware (bug 780362), we need to scale the desired
         // canvas size (in CSS pixels) to the window's backing resolution in order
         // to get a full-resolution drag image for use on HiDPI displays.
         let scale = window.devicePixelRatio;
         let canvas = this._dndCanvas;
         if (!canvas) {
           this._dndCanvas = canvas = document.createElementNS(
             "http://www.w3.org/1999/xhtml",
             "canvas"
           );
           canvas.style.width = "100%";
           canvas.style.height = "100%";
           canvas.mozOpaque = true;
         }
         canvas.width = 160 * scale;
         canvas.height = 90 * scale;
         let toDrag = canvas;
         let dragImageOffset = -16;
         let browser = isTab(tab) && tab.linkedBrowser;
         if (isTabGroupLabel(tab)) {
           toDrag = tab;
         } else if (gMultiProcessBrowser) {
           var context = canvas.getContext("2d");
           context.fillStyle = "white";
           context.fillRect(0, 0, canvas.width, canvas.height);
           let captureListener;
           let platform = AppConstants.platform;
           // On Windows and Mac we can update the drag image during a drag
           // using updateDragImage. On Linux, we can use a panel.
           if (platform == "win" || platform == "macosx") {
             captureListener = function () {
               dt.updateDragImage(canvas, dragImageOffset, dragImageOffset);
             };
           } else {
             // Create a panel to use it in setDragImage
             // which will tell xul to render a panel that follows
             // the pointer while a dnd session is on.
             if (!this._dndPanel) {
               this._dndCanvas = canvas;
               this._dndPanel = document.createXULElement("panel");
               this._dndPanel.className = "dragfeedback-tab";
               this._dndPanel.setAttribute("type", "drag");
               let wrapper = document.createElementNS(
                 "http://www.w3.org/1999/xhtml",
                 "div"
               );
               wrapper.style.width = "160px";
               wrapper.style.height = "90px";
               wrapper.appendChild(canvas);
               this._dndPanel.appendChild(wrapper);
               document.documentElement.appendChild(this._dndPanel);
             }
             toDrag = this._dndPanel;
           }
           // PageThumb is async with e10s but that's fine
           // since we can update the image during the dnd.
           PageThumbs.captureToCanvas(browser, canvas)
             .then(captureListener)
             .catch(e => console.error(e));
         } else {
           // For the non e10s case we can just use PageThumbs
           // sync, so let's use the canvas for setDragImage.
           PageThumbs.captureToCanvas(browser, canvas).catch(e =>
             console.error(e)
           );
           dragImageOffset = dragImageOffset * scale;
         }
         dt.setDragImage(toDrag, dragImageOffset, dragImageOffset);
         // _dragData.offsetX/Y give the coordinates that the mouse should be
         // positioned relative to the corner of the new window created upon
         // dragend such that the mouse appears to have the same position
         // relative to the corner of the dragged tab.
         let clientPos = ele => {
           const rect = ele.getBoundingClientRect();
           return this.verticalMode ? rect.top : rect.left;
         };
         let tabOffset = clientPos(tab) - clientPos(this);
         let movingTabs = tab.multiselected ? gBrowser.selectedTabs : [tab];
         let movingTabsSet = new Set(movingTabs);
         tab._dragData = {
           offsetX: this.verticalMode
             ? event.screenX - window.screenX
             : event.screenX - window.screenX - tabOffset,
           offsetY: this.verticalMode
             ? event.screenY - window.screenY - tabOffset
             : event.screenY - window.screenY,
           scrollPos:
             this.verticalMode && tab.pinned
               ? this.verticalPinnedTabsContainer.scrollPosition
               : this.arrowScrollbox.scrollPosition,
           screenX: event.screenX,
           screenY: event.screenY,
           movingTabs,
           movingTabsSet,
           fromTabList,
           tabGroupCreationColor: gBrowser.tabGroupMenu.nextUnusedColor,
           expandGroupOnDrop: false,
         };
         event.stopPropagation();
       }
       // This sets when to apply the fix (by default a new row starts after the 23th open tab, unless you changed the min-size of tabs)
       gBrowser.tabContainer.addEventListener("dragstart", () => {
           // Multiple tab select fix
           gBrowser.visibleTabs.forEach(t => t.style.transform = "");
           // Event handling
           if (!listenersActive) {
               gBrowser.tabContainer.getDropEffectForTabDrag = function(){};
               gBrowser.tabContainer._getDropEffectForTabDrag = function(){};
               gBrowser.tabContainer.on_dragover = (dragoverEvent) => performTabDragOver(dragoverEvent);
               gBrowser.tabContainer._onDragOver = (dragoverEvent) => performTabDragOver(dragoverEvent);
               gBrowser.tabContainer.ondrop = (dropEvent) => performTabDropEvent(dropEvent);
               gBrowser.tabContainer.ondragleave = (ondragleave) => {gBrowser.tabContainer._dragTime = 0};
               gBrowser.tabContainer.ondragend = (ondragend) => clearTimeout(dragovertimer);
               listenersActive = true;
           }
       });
    }
    var lastKnownIndex = null;
    var lastGroupStart = null;
    var lastGroupEnd = null;
    let dragovertimer = null;
    let lasttabgroup = null;
    /**
    * Gets the tab from the event target.
    * @param {*} event The event.
    * @returns The tab if it was part of the target or its parents, otherwise null
    */
    function getTabFromEventTarget(event, { ignoreTabSides = false } = {}) {
       let { target } = event;
       if (target.nodeType != Node.ELEMENT_NODE) {
           target = target.parentElement;
       }
       let tab = target?.closest("tab") || target?.closest("tab-group");
       const selectedTab = gBrowser.selectedTab;
       if (tab && ignoreTabSides) {
           let { width, height } = tab.getBoundingClientRect();
           if (
               event.screenX < tab.screenX + width * 0.25 ||
               event.screenX > tab.screenX + width * 0.75 ||
               ((event.screenY < tab.screenY + height * 0.25 ||
                   event.screenY > tab.screenY + height * 0.75) &&
                   gBrowser.tabContainer.verticalMode)
           ) {
               return selectedTab;
           }
       }
       return tab;
    }
    /**
    * Performs the tab drag over event.
    * @param {*} event The drag over event.
    */
    function performTabDragOver(event) {
       event.preventDefault();
       event.stopPropagation();
       let ind = gBrowser.tabContainer._tabDropIndicator;
       let effects = orig_getDropEffectForTabDrag(event);
       let tab;
       if (effects == "link") {
         tab = getTabFromEventTarget(event, true);
         if (tab) {
           if (!gBrowser.tabContainer._dragTime)
             gBrowser.tabContainer._dragTime = Date.now();
           if (!tab.hasAttribute("pendingicon") && // annoying fix
               Date.now() >= gBrowser.tabContainer._dragTime + Services.prefs.getIntPref("browser.tabs.dragDrop.selectTab.delayMS")) {
               gBrowser.selectedTab = tab;
               ind.hidden = true;
               return;
           }
         }
       }
       if (!tab) {
           tab = getTabFromEventTarget(event, false);
       }
       if (tab?.nodeName == "tab-group") {
         if(lasttabgroup !== tab) {
           lasttabgroup = tab
           clearTimeout(dragovertimer);
           dragovertimer = setTimeout((tabgroup) => {
             tabgroup.collapsed = !tabgroup.collapsed
           }, Services.prefs.getIntPref("browser.tabs.dragDrop.expandGroup.delayMS"), tab);
         }
       } else {
         clearTimeout(dragovertimer);
         lasttabgroup = null;
       }
    
       let newIndex = gBrowser.tabContainer._getDropIndex(event);
       if (newIndex == null)
           return;
       // Update the last known index and group position
       lastKnownIndex = newIndex;
       
       if (tab?.nodeName == "tab-group" && !lastGroupStart) {
           lastGroupStart = tab.querySelector("tab:first-of-type")._tPos;
           lastGroupEnd = tab.querySelector("tab:last-of-type")._tPos;
       }
       let tabs = gBrowser.tabs;
       let ltr = (window.getComputedStyle(gBrowser.tabContainer).direction == "ltr");
       let rect = gBrowser.tabContainer.arrowScrollbox.getBoundingClientRect();
       let newMarginX, newMarginY;
      if (newIndex == tabs.length) {
           let tabRect = tabs[newIndex - 1].getBoundingClientRect();
           if (ltr)
               newMarginX = tabRect.right - rect.left;
           else
               newMarginX = rect.right - tabRect.left;
           newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fix
           if (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+
               newMarginY += rect.height / 2 - tabRect.height / 2;
           
       } else if (newIndex != null || newIndex != 0) {
           let tabRect = tabs[newIndex].getBoundingClientRect();
           if (ltr)
               newMarginX = tabRect.left - rect.left;
           else
               newMarginX = rect.right - tabRect.right;
           newMarginY = tabRect.top + tabRect.height - rect.top - rect.height; // multirow fix
           if (CSS.supports("offset-anchor", "left bottom")) // Compatibility fix for FF72+
               newMarginY += rect.height / 2 - tabRect.height / 2;
       }
       newMarginX += ind.clientWidth / 2;
       if (!ltr)
           newMarginX *= -1;
       ind.hidden = false;
       ind.style.transform = "translate(" + Math.round(newMarginX) + "px," + Math.round(newMarginY) + "px)"; // multirow fix
       ind.style.marginInlineStart = (-ind.clientWidth) + "px";
    }
    /**
    * Performs the tab drop event.
    * @param {*} event The drop event.
    */
    function performTabDropEvent(event) {
       clearTimeout(dragovertimer);
       let newIndex;
       let dt = event.dataTransfer;
       let dropEffect = dt.dropEffect;
       let draggedTab;
       if (dt.mozTypesAt(0)[0] == TAB_DROP_TYPE) {
           draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
           if (!draggedTab) {
               return;
           }
       }
       if (draggedTab && dropEffect != "copy" && draggedTab.container == gBrowser.tabContainer) {
           newIndex = gBrowser.tabContainer._getDropIndex(event);
           let selectedTabs = gBrowser.selectedTabs.length > 1 ? gBrowser.selectedTabs : [draggedTab];
           let tabToMoveAt = gBrowser.tabContainer.getItemAtIndex(newIndex);
           let tab = getTabFromEventTarget(event, false);
           let tabgroup = tab?.closest("tab-group");
           if (!tab) {
             newIndex = gBrowser.tabs.length;
             tabToMoveAt = null;
           }
           if (tab?.pinned && !selectedTabs[0].pinned) {
             selectedTabs.forEach(t => gBrowser.pinTab(t));
             if (tabToMoveAt == tab) {
               selectedTabs.forEach(t => {gBrowser.moveTabBefore(t, tab)});
             } else {
               selectedTabs.forEach(t => {gBrowser.moveTabBefore(t, tabToMoveAt)});
             }
             return;
           } else if(!tab?.pinned && selectedTabs[0].pinned) {
             selectedTabs.forEach(t => gBrowser.unpinTab(t));
           }
           if (tabgroup && !tabgroup.previousSibling) {
             newIndex = 0; 
             selectedTabs.forEach(t => {gBrowser.moveTabTo(t, { tabIndex: newIndex++,forceUngrouped:true});});
           } else if (!tab || 
               !tabgroup && !tabToMoveAt?.group || 
               tabgroup && tabToMoveAt?.group) {
             if (tab !== tabToMoveAt) {
               tabToMoveAt = gBrowser.tabContainer.getItemAtIndex(newIndex -1);
               selectedTabs.forEach(t => {gBrowser.moveTabAfter(t, tabToMoveAt); tabToMoveAt = t});
             } else {
               selectedTabs.forEach(t => {gBrowser.moveTabBefore(t, tabToMoveAt)});
             }
           } else  {
             tabToMoveAt = gBrowser.tabContainer.getItemAtIndex(newIndex -1);
             selectedTabs.forEach(t => {gBrowser.moveTabAfter(t, tabToMoveAt); tabToMoveAt = t});
           }
           // Restart global vars
           lastKnownIndex = null;
           lastGroupStart = null;
           lastGroupEnd = null;
       }
    }
    // copy of the original and overrided _getDropEffectForTabDrag method
    function orig_getDropEffectForTabDrag(event) {
       let dt = event.dataTransfer;
       let isMovingTabs = dt.mozItemCount > 0;
       for (let i = 0; i < dt.mozItemCount; i++) {
           // tabs are always added as the first type
           let types = dt.mozTypesAt(0);
           if (types[0] != TAB_DROP_TYPE) {
               isMovingTabs = false;
               break;
           }
       }
       if (isMovingTabs) {
           let sourceNode = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
           if (XULElement.isInstance(sourceNode) &&
               sourceNode.localName == "tab" &&
               sourceNode.ownerGlobal.isChromeWindow &&
               sourceNode.ownerDocument.documentElement.getAttribute("windowtype") ==
               "navigator:browser" &&
               sourceNode.ownerGlobal.gBrowser.tabContainer == sourceNode.container) {
               // Do not allow transfering a private tab to a non-private window
               // and vice versa.
               if (PrivateBrowsingUtils.isWindowPrivate(window) !=
                   PrivateBrowsingUtils.isWindowPrivate(sourceNode.ownerGlobal))
                   return "none";
           
               if (window.gMultiProcessBrowser !=
                   sourceNode.ownerGlobal.gMultiProcessBrowser)
                   return "none";
           
               if (window.gFissionBrowser != sourceNode.ownerGlobal.gFissionBrowser)
                   return "none";
           
               return dt.dropEffect == "copy" ? "copy" : "move";
           }
       }
       if (Services.droppedLinkHandler.canDropLink(event, true)) 
           return "link";
       return "none";
    }
    Alles anzeigen

    Ich habe versucht mit einer KI Google Gemini das ganze zu reparieren. Nach 45 Minuten habe ich dann aufgegeben, weil die KI das nicht konnte.

    Dateien

    MultiRowTabLiteforFx.uc.txt 40,92 kB – 37 Downloads
  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 16:54

    Mira_Belle

    Ja, das ist natürlich aus vielerlei Aspekten nicht gut. Das ist mir bewusst, das weiß ich ganz genau.

    Ich kann das Update aber nicht machen. Sobald ich das Update auf die Version 3.0.0 mache, geht das Programm ja gar nicht mehr zu öffnen.

    Vielleicht hast du es ja aus Versehen überlesen. Ich habe ja auch gesagt, dass es selbst in der Windows Sandbox mit einem komplett neu installierten Firefox. Mit der aktuellsten Version dieser Erweiterung frisch aus dem Webstore installiert, auch nicht mehr zu öffnen geht. Die Schaltfläche ist dann tot, die geht nicht mehr.

    Wenn ich das also rein logisch betrachte, kann man ausgrenzen, dass es an meinem Firefox liegt, weil in der Windows Sandbox ist der Firefox ja komplett neu, frisch installiert und dort geht es auch nicht. Diese Erweiterung.

    Also habe ich faktisch keine Möglichkeit, diese Erweiterung nutzen zu können nach dem Update, egal wo ;)


    ....

    Ich könnte auch ein Video davon drehen, wie ich die Windows Sandbox öffne, Firefox über die offizielle Webseite frisch neu installiere, dann in den Webstore gehe, die Erweiterung dort hinzufüge und dann mit der Maus tausendmal auf den Knopf drücke, um die Anwendung zu öffnen und dann wirst du sehen, es geht nicht. Nichts ist leerer und frischer als die Windows Sandbox und ich achte sehr penibel darauf, dass in dieser Windows Sandbox nur das Betriebssystem Windows 10 auf dem aktuellsten technischen Stand ist und alles andere ist dort logischerweise komplett nackt. Das ist ja der Sinn der Windows Sandbox.

    Ich weiß nicht, ob du dich mit der Windows Sandbox auskennst, aber die simuliert eine frische neue Windows Installation und hat keine Verbindung zu meinem echten Computer. Das bedeutet, jedes Mal wenn ich die Windows Sandbox öffne, wird sie frisch neu mit einem leeren Windows auf mich warten und wenn ich die Windows Sandbox schließe, werden alle Daten gelöscht, die sich darin befinden.

    Deswegen ist die Windows Sandbox für technische Spielereien, wie zum Beispiel so was gut geeignet, um einen frischen neuen Installationsstart zu simulieren unter kontrollierter Umgebung. Abgekoppelt vom richtigen Computer, aus Sicherheitsgründen.

    Wenn also in dieser Windows Sandbox das aktuellste normale Firefox nicht kompatibel ist mit dieser Erweiterung, dann geht sie definitiv nicht. Das wäre so, wie als wenn ich mir einen frisch neuen Computer oder Laptop kaufe und dort Windows 10 installiere, alle Sicherheitsupdates mache und dann das allererste Mal Firefox nackt dort aufspiele, dann hast du genau das Prinzip, was die Windows Sandbox macht. Grob gesehen.

    Es gibt Dinge, mit denen ich mich auskenne und Dinge, mit denen ich mich überhaupt nicht auskenne. Aber ich kann dir versichern, dass die Windows Sandbox eine sichere Umgebung ist, um so etwas zu testen. Und da funktioniert es nachweislich nicht.

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 16:19

    Mira_Belle

    Ja, das weiß ich. Das Ding ist mehrere Jahre alt. Ich habe jetzt erstmal alle Sicherheitskopien, die ich brauche, falls irgendwas schief geht.

    Ich warte einfach auf eine neue Version. Aktuell lebe ich erstmal mit der Version. Das ist für mich am streßfreiesten. Vielleicht antwortet der Erfinder ja auf meine e-mail. Dann kann ich dem ja auch jetzt erklären, was ich gemacht habe. Dass ich das auch mit der Windows Sandbox probiert habe, dass die Probleme dort auch auftauchen.

    milupo Hat ja auch geschrieben, dass es in der Versionshistorie drin steht, irgendwo, dass der Erfinder die Erweiterung von Grund auf neu gemacht hat. Wahrscheinlich ist da ein Fehler passiert dabei. Das weiß nur der Erfinder.


    Mira_Belle

    Jetzt muss ich erst mal durchatmen und vielleicht habe ich dann in den nächsten Tagen wieder genug Kraft, um bei dem Thema noch mal neu anzusetzen. Aber ich lasse es erst mal so, wie es ist.

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 16:11

    Mira_Belle

    Ja, danke für dein Mitgefühl.
    Vielen Dank, es ging wirklich zu schnell. Ich muss mit Sprachassistent arbeiten und der erkennt meine Sprache nicht immer richtig. Und dann muss ich die Wörter einzeln korrigieren und das kostet mich Zeit. Und dann muss ich da wieder darauf antworten und das geht alles zu schnell. Jetzt funktioniert es wieder.

    Ich wiederhole, es funktioniert wieder !!! DANKE

    Vielen Dank für die Unterstützung und Hilfe. 👍👍👍💖💖💖

    Ich habe jetzt auch den Schalter auf aus gestellt Für die automatischen Updates.
    Die Erweiterung wird nicht mehr automatisch aktualisiert.

    Ich habe mir die XPI-Datei auf dem Desktop gespeichert und den Link.
    Backup Einstellung erstellt.
    Foto von allen Kacheln / Favoriten erstellt.

    Vielen herzlichen dank es funktioniert wieder !! 💖💖💖💖

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 16:08

    https://addons.mozilla.org/firefox/downloads/file/3775587/yay_another_speed_dial-1.5.2.1.xpi

    Erweiterung Verison 1.5.2.1 + Firefox 147.0.3 = Alles geht !
    Erweiterung Version 3.0.0 + Firefox 147.0.3 = Erweiterung defekt !

    Windows Sandbox:
    -------------------------
    Erweiterung Verison 1.5.2.1 + Firefox 147.0.3 (neu installiert) = Alles geht !
    Erweiterung Version 3.0.0 + Firefox 147.0.3 (neu installiert) = Erweiterung defekt !

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 16:02

    Mira_Belle

    So, ich habe jetzt sicherheitshalber eine Kopie gemacht von meinem Firefox, wo die Erweiterung bei mir defekt ist.

    Danach bin ich auf deinen Link gegangen, habe das installiert und jetzt funktioniert es wieder.
    Jetzt habe ich die alte Version wieder die auch funktioniert !!!

    Ich wiederhole, mit deinem Link und der Installation funktioniert die Erweiterung jetzt wieder im Firefox !!

    Zusatz:
    ------------
    Windows Sandbox neue Version der Erweiterung
    frischer Firefox
    Erweiterung geht nicht

    Deinen Link klicken
    Alter Version installieren
    Erweiterung geht wieder !

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 15:56

    Mira_Belle

    Moment, ich mach das jetzt in der virtuellen Sandbox mit der alten Version. Ich habe jetzt auf dein Link draufgeklickt, da ging gleich ein Fenster auf. Moment, ich mach das. Moment.

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 15:51

    Mira_Belle

    Bitte nicht so schnell. Ich muss mit Sprachassistent und manueller Korrektur die Texte hier machen. Es fällt mir schwer, das alles so schnell hinzukriegen.

    Ich habe gestern die Version 1.5.2.1 dieser Erweiterung noch in meinem aktuellen Firefox 147.0.3 Benutzt.

    Was passiert dann mit den Einstellungen?

    Ich kann das jetzt hier nicht löschen in meinem richtigen Firefox. Ich komme ja nicht mehr an die Einstellungen ran. Die sind ja dann alle weg, wenn ich das Ding jetzt lösche, drüber installiere. Ich habe das noch nie gemacht. Keine Ahnung, was da jetzt passiert.


    Sören Hentzschel

    Ich habe so was noch nie gemacht, du machst es vielleicht täglich und bist Profi. Dann größter Respekt, aber ich habe so was noch nie gemacht. Eine alte Version drüber installieren, ich weiß noch nicht mal. Das ist gerade alles zu viel.

    Ich brauche das langsam und nicht so schnell. Das einzige was ich jetzt machen kann ist eine Kopie erstellen von meinem Firefox, wo die Erweiterung kaputt ist. Dann gehe ich in mein virtuelles Windows, kopiere dort die kaputte Version rein und spiele ich so lange an dem Firefox mit irgendwelchen Dingen umher, bis es wieder geht. Ich bin überfordert.

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 15:48

    milupo

    Das klingt interessant, ich weiß jetzt nicht, woher du die Information hast, aber ich vertraue dir jetzt einfach mal. Das würde vielleicht einiges erklären, warum es nicht mehr richtig funktioniert.

    Ich habe eben die Windows Sandbox geöffnet.
    Dort ist ein frisches neues Windows drin, aktuellster Stand mit allen Treibern.
    Kein einziger Webbrowser installiert.
    Ich habe eben frisch neu dort Firefox installiert und nur diese Erweiterung heruntergeladen. Und sie lässt sich nicht öffnen.

    Sie ist oben in der Symbolleiste, aber sie geht nicht zu öffnen. 😢

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 15:46

    Boersenfeger

    Hör auf mich Kleinkind zu nennen. DANKE

Unterstütze uns!

Jährlich (2026)

71,6 %

71,6% (554,79 von 775 EUR)

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