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

  • 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 – 25 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

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 15:44

    Sören Hentzschel

    Das ist ein Missverständnis. Ich erkläre es nochmal kurz.

    Ich nutze diese Erweiterung schon seit Jahren und sie funktionierte in jeder Firefox Version, die seitdem existiert.
    Die Version 1.5.2.1 funktioniert mit dem aktuellsten Mozilla Firefox perfekt.
    Die Version 3.0 funktioniert mit dem aktuellen Firefox nicht. Das habe ich in einer Windows Sandbox getestet.

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 15:37

    Mira_Belle

    Ich verstehe nicht welchen Test du meinst. Ich habe Microsoft Edge, Brave, Firefox und SWR Iron. Und dort ist die Erweiterung in der Version 1.5.2.1 überall drin. Und die Browser sind alle aktuell.

    In all diesen Programmen sind fast identische Daten drin. Das heißt die Einstellungen, die Favoriten, wie das aussieht, die Anordnung, die ganzen Einstellungen sind alle dort drin. Fast nahezu identisch. Nur die Favoriten haben eine andere Anordnung, sind etwas älter. Weil ich noch nicht alle diese Browser auf das neue gebracht habe.

    Was ich jetzt mache ist, ich nehme die Windows Sandbox und werde dort Firefox nackt installieren, die Erweiterung drauf machen und dann mache ich ein Update für den Beitrag hier.

    UPDATE:
    Windows Sandbox,
    Firefox neue Installation.
    Nur diese Erweiterung installiert und sie funktioniert NICHT

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 15:30

    Sören Hentzschel

    Ich habe doch heute das Update von der Erweiterung bekommen. Gestern lief noch alles. Heute kam das Update und dann ging nichts mehr. Firefox hat etwas erzählt von Berechtigungen und Zugriffen. Dem habe ich zugestimmt. Dann hat er das Update gemacht auf die Version 3.0 und dann ging es plötzlich nicht mehr. In den anderen Webbrausern ist überall noch die alte Version drin. Der Vorgänger vor der Version 3.0.



    Auf dem Foto hier kannst du sehen, so sieht es aus in meinen anderen Browsern. Diese Version hat einwandfrei funktioniert. Und die Version 3.0 funktioniert nicht mehr.

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 15:26

    Mira_Belle

    Mein letztes Backup ist vom 6. Februar. Aber ich habe einige Änderungen am Firefox durchgeführt bei den Passwörtern. Das wäre ein absolutes Chaos, das wieder zusammenzubringen.

    Was ich nur weiß ist, dass vor dem Update dieser Erweiterung die Erweiterung einwandfrei funktioniert hat.

    Jetzt klicke ich auf den Knopf drauf und die Erweiterung reagiert nicht. Das ist wie ein toter Schalter, das funktioniert überhaupt nicht.

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 15:19

    Sören Hentzschel

    Ich habe verschiedene Internet-Browser, ich habe noch den Brave-Browser , den Microsoft-Edge-Browserund ich habe ein virtuelles Windows mit einer älteren Version von Firefox.

    Bei all diesen Web-Browsern ist noch die alte Version installiert von der Erweiterung und da funktioniert es auch. In meinen virtuellen Windows habe ich noch eine ältere Version vom Firefox drinnen, die ist ungefähr fünf Monate alt. Da ist auch noch die alte Version drinnen, das hat tadellos funktioniert. Erst jetzt nach dem Update, was bei mir heute angekommen ist, offiziell. Erst dann ist der Fehler aufgetreten.

    Ich habe gerade echt richtig Panik. Ich hoffe wirklich, dass das so schnell wie möglich dieser tolle Mensch das wieder repariert.

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 14:57

    Boersenfeger

    Dein Spruch mit dem Kleinkind kannst du sein lassen, das ist respektlos. So schreibe ich auch nicht mit dir und lass das bitte. Danke.


    grisu2099

    Ja, ich habe den Beitrag gelöscht, weil ich da so viel reingeschrieben habe und jetzt habe ich es noch mal gekürzt. Trotzdem habe ich Panik. Danke für deinen Tipp. Ich muss jetzt erstmal sehen, dass ich die nächsten Tage irgendwie schaffe, ohne diese Erweiterung. Es wird schwer, sehr schwer.

    2002Andreas

    Ich war jetzt in der Lage eine E-Mail dahin zu schicken, zu dem Erfinder. Ich hoffe, dass er die liest, aber vielleicht weiß ja trotzdem jemand schon. Außer mir bescheid darüber, dass die Erweiterung nicht mehr geht Vielleicht schreibt derjenige dann auch noch eine E-Mail. Je mehr Leute sich daran beteiligen, desto besser, desto schneller kann geholfen werden.

  • [defekt] Yay! Another Speed dial!

    • GermanFreme82
    • 12. Februar 2026 um 14:47

    Panik !!!!!!!!!!!

    Ich weiß nicht, wo du das mit der E-Mail gesehen hast. Ich finde das nicht. Ich weiß auch nicht, was ich dem schreiben soll. Ich weiß nicht mal, ob ich dieselbe Sprache spreche. Keine Ahnung. Ich bin völlig überfordert gerade. Ich brauche das Ding unbedingt, das weiß ich. Bitte !!!

Unterstütze uns!

Jährlich (2026)

69,4 %

69,4% (538,17 von 775 EUR)

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