Beiträge von FuchsFan
-
-
Mit einem installierten Firefox habe ich das Problem jedenfalls nicht.
Damit hier auch nicht, es sind nur die portablen Versionen.
-
Klicke ich auf: Weiter wird ein neues Profil erstellt.
Und das Schlimme daran ist, ich finde auch keine Möglichkeit das abzubrechen, also nur auf "Weiter" , oder gibt es da einen anderen Weg?
-
Warum nicht in der userContent.css?
Gute Frage, weil ich gelernt habe ::part imm er in Shadow.


-
Um hier reinen Tisch zu machen, es lag nicht an dem Script, sondern an css-Code in der userChromeShadow.css, und zwar an diesem.
Der war dafür gedacht die originalen Icon in dem Popup auszublenden (funktionierte bis Version 150).

Damit wurden dann auch noch die Suchmaschinen-Icon angezeigt, aber nicht mehr in Version 151.
Jetzt habe ich den css-Code so abgeändert, damit sind alle Probleme beseitigt.
CSSpanel-item[action="remove"]::part(button), panel-item[action="report"]::part(button) { background-image: none !important; }Danke, Andreas, für deinen Einsatz.


-
Ich glaube, du verwechselst da etwas

Dieses Skript lädt das, was in der userChromeShadow.css eingetragen ist.
Kann sein, ich war mir jetzt nicht sicher, deswegen nochmals nachgebohrt.
Und ich habe beide in meinem Script vereinigt, schau mal hier RE: Popup der Suchmaschinen ohne Icons, deswegen die Nachfrage.
-
Ja, und das macht es hier auch.
Gut, dann werde ich es auch mal testen, danke Andreas.

-
Funktioniert hier einwandfrei in Fx 151
Ja, glaube ich dir, aber noch einmal zu meinen Gedanken, muss das Script nicht auch den Code laden, der in userChromeShadow.css hinterlegt ist, damit er funktioniert?
-
Und was war jetzt genau der "falsche" Code?
Mira_Belle Dieser hier.
JavaScript
Alles anzeigen// userChromeShadow.uc.js // Button zum Aufruf der userChromeShadow.css im Ordner chrome (async function() { if (location != 'chrome://browser/content/browser.xhtml') return; try { let path = PathUtils.join(PathUtils.profileDir, 'chrome', 'userChromeShadow.css'); let cssIn = await IOUtils.readUTF8(path); let sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService); let uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(cssIn)); sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET); } catch(e) { console.log("UserChromeShadow-Error: " + e.name + ': ' + e.message ); }; })(); (function() { if (!window.gBrowser) return; let btn_id ='chromeshadow_button'; try { CustomizableUI.createWidget({ id: btn_id, defaultArea: CustomizableUI.AREA_NAVBAR, label: "Datei userChromeShadow.css", tooltiptext: "Datei userChromeShadow.css öffnen", onCreated: (this_button) => { this_button.style.MozContextProperties = 'fill, stroke, fill-opacity, stroke-opacity'; this_button.style.listStyleImage = 'url("file:///C:/FoxIcons2/css22.png")'; this_button.style.minWidth = 'fit-content'; } }); } catch(e) {} function click_button() { document.getElementById(btn_id).addEventListener('click', event => { if (event.button == 0) { let dir = Services.dirsvc.get('UChrm', Ci.nsIFile); dir.append('userChromeShadow.css'); dir.launch(); } }); }; if (window.readyState !== "loading") { setTimeout(click_button, 500); } else { window.addEventListener( "DOMContentLoaded", click_button ); }; window.addEventListener('aftercustomization', () => { setTimeout(() => click_button(), 100) }); })();Ich nutze hier dieses Skript dafür:
Ja, so rufe ich die Test-Shadow.css auf, aber das Script lädt ja nicht den Code in der userChromeShadow.css, damit er funktioniert. Liege ich mit meiner Denkweise daneben?

-
viel Spaß dann

Danke, hatte ich.

Du wirst es nicht glauben, es lag am Script userChromeShadow.uc.js. Mit dem folgenden Script funktioniert es nun wieder.
JavaScript
Alles anzeigen// userChromeShadow.uc.js // Button zum Aufruf der userChromeShadow.css im Ordner chrome (async function() { if (location !== 'chrome://browser/content/browser.xhtml') return; try { // Pfad zur CSS-Datei let file = PathUtils.join(PathUtils.profileDir, 'chrome', 'userChromeShadow.css'); // Datei-URI erzeugen statt Data-URI let fileObj = new FileUtils.File(file); let uri = Services.io.newFileURI(fileObj); let sss = Cc['@mozilla.org/content/style-sheet-service;1'] .getService(Ci.nsIStyleSheetService); // Vorherige Registrierung entfernen, falls schon vorhanden if (sss.sheetRegistered(uri, sss.AUTHOR_SHEET)) { sss.unregisterSheet(uri, sss.AUTHOR_SHEET); } sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET); } catch (e) { console.log("UserChromeShadow-Error: " + e.name + ': ' + e.message); } })(); (function() { if (!window.gBrowser) return; let btn_id = 'chromeshadow_button'; try { CustomizableUI.createWidget({ id: btn_id, defaultArea: CustomizableUI.AREA_NAVBAR, label: "Datei userChromeShadow.css", tooltiptext: "Datei userChromeShadow.css öffnen", onCreated: (this_button) => { this_button.style.MozContextProperties = 'fill, stroke, fill-opacity, stroke-opacity'; this_button.style.listStyleImage = 'url("file:///C:/FoxIcons2/css22.png")'; this_button.style.minWidth = 'fit-content'; } }); } catch (e) {} function click_button() { document.getElementById(btn_id).addEventListener('click', event => { if (event.button == 0) { let dir = Services.dirsvc.get('UChrm', Ci.nsIFile); dir.append('userChromeShadow.css'); dir.launch(); } }); } if (window.readyState !== "loading") { setTimeout(click_button, 500); } else { window.addEventListener("DOMContentLoaded", click_button); } window.addEventListener('aftercustomization', () => { setTimeout(() => click_button(), 100); }); })(); -
Hier werden die Icons in allen Profilen angezeigt.
Danke, Andreas, für den Text suche ich mir das Passende raus.

Nun habe ich den Ordner Scripte entfernt, alle Icon da, also auf zur Jagd.

-
Evtl. funkt dir ein anderer Code dazwischen
Alle Codes deaktiviert, keine Änderung. Es ist je nichts weiter verändert worden, nur das Update von 150 auf 151.
Für den Text habe ich das noch probiert, müsste funktionieren, wie es aussieht.
-
Bis Version 150.0.2 wurden die Icon angezeigt.

Ab Version 151 sieht es dann so aus 
Es ist merkwürdig, in einigen Versionen Beta und Nightly werden sie angezeigt, in anderen wieder nicht. Woran kann das eventuell liegen?
Ich versuche auch den Text (die Namen) anzupassen, was mir nur mit dem Code gelingt, der aber auch auf andere Teile zugreift (z.B. Sucheinstellungen). Gibt es noch eine weitere Möglichkeit, um das nur auf die Item (Namen) zu begrenzen?
-
Ich habe nochmals versucht deine Button nach dem Original anzupassen, eventuell kannst du es gebrauchen.
CSS
Alles anzeigen@-moz-document url-prefix("about:addons") { /* ========================================= Sidebar Buttons (alle) ========================================= */ moz-page-nav-button { background: lightgrey !important; color: black !important; border: 2px solid grey !important; border-radius: 50px !important; box-shadow: inset 0 0 5px 5px #888 !important; } /* ========================================= Hover (nur bei inaktiv sichtbar) ========================================= */ moz-page-nav-button:hover { background: blue !important; color: white !important; border-color: brown !important; box-shadow: inset 0 0 5px 5px #888 !important; } /* aktiver Button */ button[selected] { color: white !important; background-color: red !important; border-radius: 50px !important; box-shadow: inset 0 0 5px 5px #888 !important; } /* optional hover für aktiven Button */ /* button[selected]:hover { color: white !important; background-color: #8A2BE2 !important; } */ } -
Das Script wurde überarbeitet, alle Vorkommen von ownerGlobal durch documentGlobal ersetzt, damit es ab Version 152 wieder funktioniert.
JavaScript
Alles anzeigen// 'MultiRowTabs@BuF.uc.js' – Logik-Version mit MultiRow + DnD + Emoji-Marker // Styling (Farben, Tabhöhe, Breite, max. Zeilen) in userChrome.css "use strict"; MultiRowTabs(); function MultiRowTabs() { if (!window.gBrowser) { return; } // ---------------------------- // --- User-Settings: Start --- // ---------------------------- // Position der Tab-Leiste: // // [1] Tab-Leiste ist oberhalb aller Symbolleisten // [2] Tab-Leiste ist unterhalb aller Symbolleisten, aber über dem Inhaltsbereich // [6] Tab-Leiste ist unterhalb des Inhaltsbereichs var nTabbarPosition = 2; // MultiRow-Einstellungen (nur horizontale Positionen [1], [2], [6]) // Die tatsächliche Zeilenanzahl wird ausschließlich über CSS (max-height) begrenzt. var nTabLines = 3; // Dokumentationswert; in userChrome.css via max-height nachziehen var bTabScrollbar = true; // Scrollbar für Tab-Leiste anzeigen var bTabTooltips = false; // Tab-Tooltips (Tabvorschau) anzeigen? // Einstellungen für Maus-Bedienung var bTabWheel = false; // Tab per Mausrad wechseln var bPageScroll = true; // seitenweises Scrollen (statt zeilenweise) var bDblclickOnTabbarNewTab = true; // Doppelklick auf freie Tabbar -> neuer Tab var bDblclickOnTabReloadTab = true; // Doppelklick auf Tab -> Reload // ---------------------------- // --- User-Settings: Ende --- // ---------------------------- let strHomepageURL; try { strHomepageURL = Services.prefs.getCharPref("browser.startup.homepage"); } catch (e) { console.log("Error Homepage-String loading..."); } if (nTabbarPosition < 1 || (nTabbarPosition != 1 && nTabbarPosition != 2 && nTabbarPosition != 6)) { nTabbarPosition = 1; } // Tab-Leiste ganz unten if (nTabbarPosition == 6) { let tabbarBoxBottom = document.createXULElement("vbox"); tabbarBoxBottom.id = "tabbarboxbottom"; document .getElementById("navigator-toolbox") .parentNode.insertBefore(tabbarBoxBottom, null); let tabbar = document.getElementById("TabsToolbar"); tabbarBoxBottom.appendChild(tabbar); } // ------------------------------------------------------------- // Grund-CSS für Slot-Layout & Scrollbar (keine Farben!) // ------------------------------------------------------------- { let cssAgent = ` /* Scrollbars in der Tabbar sollen nicht als Fenster-Drag-Bereich dienen */ scrollbar, scrollcorner, scrollbar thumb, scrollbar scrollbarbutton { -moz-window-dragging: no-drag !important; } /* Slot-Inhalt (Tabs) direkt in den Flex-Container holen */ scrollbox[smoothscroll="true"] > slot { display: contents !important; } `; let sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService( Ci.nsIStyleSheetService ); let uriAgent = makeURI( "data:text/css;charset=UTF=8," + encodeURIComponent(cssAgent) ); if (!sss.sheetRegistered(uriAgent, sss.AGENT_SHEET)) { sss.loadAndRegisterSheet(uriAgent, sss.AGENT_SHEET); } } { // MultiRow-Layout: Wrap, keine Pfeile, „Alle Tabs“-Button entfernen let cssAuthor = ` #tabbrowser-tabs { --tab-overflow-pinned-tabs-width: 0px !important; } #alltabs-button, hbox.titlebar-spacer, #tabbrowser-arrowscrollbox::part(scrollbutton-up), #tabbrowser-arrowscrollbox::part(scrollbutton-down), #tabbrowser-arrowscrollbox::part(overflow-start-indicator), #tabbrowser-arrowscrollbox::part(overflow-end-indicator) { display: none !important; } tabs > arrowscrollbox::part(scrollbox) { flex-wrap: wrap !important; overflow-x: hidden !important; overflow-y: ${bTabScrollbar ? "auto" : "hidden"} !important; } `; let sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService( Ci.nsIStyleSheetService ); let uriAuthor = makeURI( "data:text/css;charset=UTF=8," + encodeURIComponent(cssAuthor) ); if (!sss.sheetRegistered(uriAuthor, sss.AUTHOR_SHEET)) { sss.loadAndRegisterSheet(uriAuthor, sss.AUTHOR_SHEET); } } // Tab-Leiste unterhalb der Symbolleisten (Position 2) if (nTabbarPosition == 2) { let tabbar = document.getElementById("TabsToolbar"); tabbar.parentNode.appendChild(tabbar); } //------------------------------------------------------------------------------------------ var tabsToolbar = document.getElementById("TabsToolbar"); var tabsscrollbox = document.getElementById("tabbrowser-arrowscrollbox"); var ScrollBox = tabsscrollbox.scrollbox; // ---------------------------------- // Load-Event: MultiRow aktivieren (keine Höhenberechnung mehr) // ---------------------------------- function onReady() { console.log("MultiRowTabs OnReady"); // Auswahl sichtbar halten gBrowser.selectedTab.scrollIntoView(); } if (document.readyState !== "loading") { setTimeout(onReady, 500); } else { window.addEventListener("DOMContentLoaded", onReady); } // ---------------------------------- // ToggleMenuObserver (Menüleiste ein/aus) – nur für Position 2/6 // ---------------------------------- if (nTabbarPosition == 2 || nTabbarPosition == 6) { let targetMenubar = document.getElementById("toolbar-menubar"); let titlebar = document.querySelector("#navigator-toolbox>vbox#titlebar"); const callback = (mutationList, observer) => { for (const mutation of mutationList) { if (mutation.type === "attributes") { let bInactive = targetMenubar.getAttribute("inactive"); if (bInactive == "true") { titlebar.style.display = "none"; } else { titlebar.style.display = "initial"; } } } }; let observerToggleMenu = new MutationObserver(callback); let configObserver = { attributes: true, attributeFilter: ["autohide","inactive"] }; observerToggleMenu.observe(targetMenubar, configObserver); } // ---------------------------------- // Middleclick auf Tab -> Close Tab // ---------------------------------- gBrowser.tabContainer.addEventListener( "click", function(event) { if (event.button == 1) { let element = event.target.parentNode; while (element) { if (element.localName == "tab") { gBrowser.removeTab(element, { animate: false }); event.preventDefault(); event.stopPropagation(); return; } element = element.parentNode; } } }, true ); // ---------------------------------- // Middleclick auf TabsToolbar -> New Tab // ---------------------------------- tabsToolbar.addEventListener( "click", function(event) { if (event.button == 1) { if (event.target.parentNode.id == "TabsToolbar") { if (strHomepageURL) { event.target.documentGlobal.openTrustedLinkIn(strHomepageURL,"tab"); } else { BrowserOpenTab(); } return; } } }, true ); // ---------------------------------- // Doubleclick auf TabsToolbar -> New Tab // ---------------------------------- tabsToolbar.addEventListener( "dblclick", function(event) { if (!bDblclickOnTabbarNewTab) return; if (event.button == 0) { if (event.target.parentNode.id == "TabsToolbar") { if (strHomepageURL) { event.target.documentGlobal.openTrustedLinkIn(strHomepageURL,"tab"); } else { BrowserOpenTab(); } event.preventDefault(); event.stopPropagation(); return; } } }, true ); // ---------------------------------- // Doubleclick auf leeren Bereich in TabContainer -> New Tab // ---------------------------------- gBrowser.tabContainer.addEventListener( "dblclick", function(event) { if (!bDblclickOnTabbarNewTab) return; if (event.button == 0) { let element = event.target.parentNode; if (element == gBrowser.tabContainer) { if (strHomepageURL) { event.target.documentGlobal.openTrustedLinkIn(strHomepageURL,"tab"); } else { BrowserOpenTab(); } event.preventDefault(); event.stopPropagation(); return; } } }, true ); // ---------------------------------- // Doubleclick auf Tab -> Reload Tab // ---------------------------------- gBrowser.tabContainer.addEventListener( "dblclick", function(event) { if (!bDblclickOnTabReloadTab) return; if (event.button == 0) { let element = event.target.parentNode; while (element) { if (element.localName == "tab") { element.linkedBrowser.reload(); return; } element = element.parentNode; } } }, true ); // ---------------------------------- // TabSelect -> Tab in Sicht bekommen // ---------------------------------- gBrowser.tabContainer.addEventListener( "TabSelect", function(event) { let bScroll = false; let bScrollTop = true; let scrollBoxY1 = event.target.parentElement.scrollbox.screenY; let scrollBoxHeight = event.target.parentElement.scrollbox.clientHeight; let scrollBoxY2 = scrollBoxY1 + scrollBoxHeight; let TabSelY1 = event.target.screenY; let TabSelHeight = event.target.clientHeight; let TabSelY2 = TabSelY1 + TabSelHeight; if (TabSelY2 > scrollBoxY2) { bScroll = true; bScrollTop = false; } if (TabSelY1 < scrollBoxY1) { bScroll = true; bScrollTop = true; } if (bScroll) { setTimeout(function() { event.target.scrollIntoView(bScrollTop); }, 0); } }, true ); // ---------------------------------- // Wheel-Event über Tab-Leiste // ---------------------------------- let tabsScrollbox2 = document.getElementById( "tabbrowser-arrowscrollbox" ).scrollbox; tabsScrollbox2.addEventListener( "wheel", function(event) { event.preventDefault(); event.stopPropagation(); let scrollUp = true; let wrap = false; let scrollBoxY1 = gBrowser.tabContainer._animateElement.scrollbox.scrollTop; let scrollHeight; if (bPageScroll) { scrollHeight = gBrowser.tabContainer._animateElement.scrollbox.clientHeight; } else { let firstTab = gBrowser.visibleTabs[0]; let h = firstTab ? firstTab.getBoundingClientRect().height : 24; scrollHeight = h; } let dir = (scrollUp ? 1 : -1) * Math.sign(event.deltaY); let bLastScrollLine = false; if ( gBrowser.tabContainer._animateElement.scrollbox.scrollTopMax == gBrowser.tabContainer._animateElement.scrollbox.scrollTop ) { bLastScrollLine = true; } if ( !bTabWheel || event.ctrlKey || event.originalTarget.localName == "thumb" || event.originalTarget.localName == "slider" || event.originalTarget.localName == "scrollbarbutton" ) { setTimeout(function() { let scrollBoxMod = scrollBoxY1 % scrollHeight; if (scrollBoxMod > 0) { if (dir == -1) { scrollBoxY1 -= scrollBoxMod; if (scrollBoxMod < scrollHeight && !bLastScrollLine) { scrollBoxY1 -= scrollHeight; } } else { scrollBoxY1 += scrollHeight - scrollBoxMod; if (scrollHeight - scrollBoxMod < scrollHeight) { scrollBoxY1 += scrollHeight; } } } else { if (dir == -1) { scrollBoxY1 -= scrollHeight; } else { scrollBoxY1 += scrollHeight; } } gBrowser.tabContainer._animateElement.scrollbox.scrollTo({ top: scrollBoxY1, left: 0, behavior: "auto" }); }, 20); } if (bTabWheel && !event.ctrlKey) { setTimeout(function() { if ( event.originalTarget.localName != "slider" && event.originalTarget.localName != "thumb" && event.originalTarget.localName != "scrollbarbutton" ) { gBrowser.tabContainer.advanceSelectedTab(dir, wrap); if ( gBrowser.tabContainer._firstTab == gBrowser.selectedTab || gBrowser.tabContainer._lastTab == gBrowser.selectedTab ) { gBrowser.selectedTab.scrollIntoView(); } } }, 50); } }, false ); //------------------------------------------------------------------------------------------- // Drag & Drop – Multirow-fähig, mit Emoji-Einfüge-Marker //------------------------------------------------------------------------------------------- // Einfüge-Markierung vorbereiten: Attribut "dnd-marker" statt Border if (!gBrowser.tabContainer.clearDropIndicator) { gBrowser.tabContainer.clearDropIndicator = function() { for (let tab of this.allTabs) { tab.removeAttribute("dnd-marker"); } }; gBrowser.tabContainer.addEventListener( "dragleave", function () { this.clearDropIndicator(); }, true ); } // _getDropIndex: ermittelt die Zielposition für den Drop 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; } return tabPos + 1; } let rect = tabToDropAt.getBoundingClientRect(); if (event.clientX > rect.x + rect.width / 2) { return tabPos; } return tabPos + 1; }; let listenersActive = false; gBrowser.tabContainer.addEventListener("dragstart", () => { gBrowser.visibleTabs.forEach(t => (t.style.transform = "")); 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); listenersActive = true; } }); } // Ende MultiRowTabs() // ----------------------------------------------------------------------------- // Globale Hilfsfunktionen für Drag&Drop (mit Emoji-Einfüge-Marker) // ----------------------------------------------------------------------------- var lastKnownIndex = null; var lastGroupStart = null; var lastGroupEnd = 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.25) && gBrowser.tabContainer.verticalMode) ) { return selectedTab; } } return tab; } function performTabDragOver(event) { event.preventDefault(); event.stopPropagation(); let tc = gBrowser.tabContainer; let ind = tc._tabDropIndicator; // Alte Marker entfernen if (tc.clearDropIndicator) { tc.clearDropIndicator(); } let effects = orig_getDropEffectForTabDrag(event); let tab; // Link-Drop (Links auf Tabs ziehen) – nur Auswahl, kein Marker if (effects == "link") { tab = getTabFromEventTarget(event, true); if (tab) { if (!tc._dragTime) { tc._dragTime = Date.now(); } if ( !tab.hasAttribute("pendingicon") && Date.now() >= tc._dragTime + tc._dragOverDelay ) { tc.selectedItem = tab; } if (ind) { ind.hidden = true; } return; } } if (!tab) { tab = getTabFromEventTarget(event, false); } let newIndex = tc._getDropIndex(event); if (newIndex == null) { return; } // eingebauten Indikator verstecken if (ind) { ind.hidden = true; } let tabs = gBrowser.tabs; // Am Ende der Tab-Leiste: Marker "right" am letzten Tab if (newIndex == tabs.length) { let lastTab = tabs[newIndex - 1]; if (lastTab) { lastTab.setAttribute("dnd-marker", "right"); } } else { // Sonst: Marker "left" am Tab an der Drop-Position let targetTab = tabs[newIndex]; if (targetTab) { targetTab.setAttribute("dnd-marker", "left"); } } } function performTabDropEvent(event) { 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 (tabgroup && !tab.previousSibling) { newIndex = 0; selectedTabs.forEach(t => { gBrowser.moveTabTo(t, { tabIndex: newIndex++, forceUngrouped: true }); }); } else if ( !tab || (!tabgroup && !tabToMoveAt?.group) || (tabgroup && tabToMoveAt?.group) ) { selectedTabs.forEach(t => { gBrowser.moveTabBefore(t, tabToMoveAt); }); } else { tabToMoveAt = gBrowser.tabContainer.getItemAtIndex(newIndex - 1); selectedTabs.forEach(t => { gBrowser.moveTabAfter(t, tabToMoveAt); }); } lastKnownIndex = null; lastGroupStart = null; lastGroupEnd = null; } // Marker nach dem Drop entfernen if (gBrowser.tabContainer.clearDropIndicator) { gBrowser.tabContainer.clearDropIndicator(); } } function orig_getDropEffectForTabDrag(event) { let dt = event.dataTransfer; let isMovingTabs = dt.mozItemCount > 0; for (let i = 0; i < dt.mozItemCount; i++) { 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.documentGlobal.isChromeWindow && sourceNode.ownerDocument.documentElement.getAttribute("windowtype") == "navigator:browser" && sourceNode.documentGlobal.gBrowser.tabContainer == sourceNode.container ) { if ( PrivateBrowsingUtils.isWindowPrivate(window) != PrivateBrowsingUtils.isWindowPrivate(sourceNode.documentGlobal) ) { return "none"; } if ( window.gMultiProcessBrowser != sourceNode.documentGlobal.gMultiProcessBrowser ) { return "none"; } if (window.gFissionBrowser != sourceNode.documentGlobal.gFissionBrowser) { return "none"; } return dt.dropEffect == "copy" ? "copy" : "move"; } } if (Services.droppedLinkHandler.canDropLink(event, true)) { return "link"; } return "none"; } -
Das Problem wurde gelöst, indem im Skript alle Vorkommen von ownerGlobal durch documentGlobal ersetzt wurden.
Sehr schön, das werde ich auch gleich mal ändern. Im Moment ist das ab 152 die erste Anlaufstelle, in der Regel funktioniert es. Danke!

-
Alle Skripte newtabfromhistory.uc.js ist komplett inkompatibel mit v152, und Links aus den Favoriten lassen sich nicht mehr öffnen.
Ich kann es nicht prüfen, weil ich nicht genau sagen kann, was das Script macht. Aber bitte mal testen, eventuell ist ja der Fehler hiermit behoben.
JavaScript
Alles anzeigen// ==UserScript== // @name newTabFromHistory.uc.js // @namespace https://www.camp-firefox.de/forum/viewtopic.php?p=1090093#p1090093 // @description Links aus Chronik in neuem Tab öffnen // @author aborix // @Source https://www.camp-firefox.de/forum/thema/138013/?postID=1251376#post1251376 // @Source_new https://www.camp-firefox.de/forum/thema/139502/?postID=1273989#post1273989 // @compatibility 139+ // @version 0.0.5 date 2025.06.18 // ==/UserScript== (function() { if (location.href !== 'chrome://browser/content/browser.xhtml') return; PlacesUIUtils.openNodeWithEvent = function PUIU_openNodeWithEvent(aNode, aEvent) { let window = aEvent.target.documentGlobal; let browserWindow = (window && window.document.documentElement.getAttribute('windowtype') == 'navigator:browser') ? window : BrowserWindowTracker.getTopWindow(); let where = window.BrowserUtils.whereToOpenLink(aEvent, false, true); if (this.loadBookmarksInTabs) { if (where == 'current' && !aNode.uri.startsWith('javascript:')) { where = 'tab'; } if (where == 'tab' && browserWindow.gBrowser.selectedTab.isEmpty) { where = 'current'; } } this._openNodeIn(aNode, where, window); } let onPopupshowing = function () { let historyMenu = document.getElementById('history-menu'); if (!historyMenu._placesView) { new HistoryMenu(event); historyMenu._placesView._onCommand = function HM__onCommand(aEvent) { let placesNode = aEvent.target._placesNode; if (placesNode) { PlacesUIUtils.openNodeWithEvent(placesNode, aEvent); } } } } let historyPopup = document.getElementById('historyMenuPopup'); historyPopup?.addEventListener('popupshowing', onPopupshowing); })(); -
Oh, ich sehe gerade, das bei Themes die Nummerierung weg ist. Kann das geheilt werden?
Der ganze rechte Bereich Themes muss in deinem Code angepasst werden.

-
Der Code in beiden Browsern ist identisch. Was ist nicht mehr kompatibel?
Wie auch bei about:preferences sehr viel verändert, und nach meinem Empfinden immer komplizierter das anzupassen. Nur mit diesem Code sehen dann die Button hier so aus (erster Test). Eventuell kannst du es verwenden.
CSS
Alles anzeigen#sidebar categories-box moz-page-nav moz-page-nav-button:not([selected]) { --page-nav-button-text-color-hover: red !important; --page-nav-button-background-color-hover: yellow !important; --page-nav-button-border-color-hover: blue !important; --page-nav-button-background-color: beige !important; border-top: 2px solid grey !important; border-bottom: 2px solid grey !important; border-left: 2px solid grey !important; } #sidebar categories-box moz-page-nav moz-page-nav-button { --page-nav-button-background-color-selected: #7DB040 !important; --color-accent-primary: white !important; } -
Mist, kannst Du mir den noch einmal erklären,
oder darauf verlinken, wenn es schon eine Erklärung hier im Board gibt?
Ich komme gerade nicht darauf, was genau das für ein Test war.Das Script besteht nicht den Elchtest, dass heißt, im ersten Fenster wird das Script bedient, dann wird das Fenster geschlossen. Jetzt soll das Script auch in den weiteren geöffneten Fenstern funktionieren, aber das macht es nicht.