Lesezeichenordner ohne klicken öffnen
-
hwww -
20. November 2019 um 07:38 -
Erledigt
-
-
Ja, das geht....
Und zwar mit folgendem Script: MouseoverOpenBookmarkFolder.uc.js:
JavaScript
Alles anzeigen// ==UserScript== // @name mouseover open bookmark folder // @description ブックマークツールバーのフォルダをマウスオーバーで開く // @version 1.1 // @include main // @compatibility Firefox 31.3, 34.0.5 // @author oflow // @namespace http://oflow.me/1149 // ==/UserScript== (function() { var bookmarkFolder = { toolbar: document.getElementById('PlacesToolbarItems'), init: function() { this.toolbar.addEventListener('mouseover', this, false); window.addEventListener('unload', this, false); }, uninit: function() { this.toolbar.removeEventListener('mouseover', this, false); window.removeEventListener('unload', this, false); }, handleEvent: function(e) { switch (e.type) { case 'mouseover': this.open(e.target); break; case 'unload': this.uninit(); break; } }, open: function(item) { switch (item.nodeName) { case 'toolbarbutton': this.close(item); if (item.getAttribute('type') == 'menu') { item.open = true; } break; } }, close: function(item) { var items = document.querySelectorAll('#PlacesToolbarItems > toolbarbutton[type="menu"]'); for (var i = 0; i < items.length; i++) { if (items[i] != item) { items[i].open = false; } } } }; bookmarkFolder.init(); })();
-
Ja, das geht....
Besten Dank dafür. Funktioniert!
Schöne Woche noch für dich hwww
-
Muss mich noch mal melden. Gibt es vielleicht die Möglichkeit das wenn man mit der Maus vom Lesezeichen weg geht sich das Fenster von selbst wieder schließt. Im Moment ist es so das ich über das LZ gehe das Fenster sich aufrollt und dann auf bleibt bis ich irgendwo drauf klicke.
-
Gibt es vielleicht die Möglichkeit das wenn man mit der Maus vom Lesezeichen weg geht sich das Fenster von selbst wieder schließt.
Ich bin mir ziemlich sicher, dass es diese Möglichkeit gibt. Dafür müsste man dann noch einen 'EventListener' für 'mouseout' im Menupopup hinzufügen. Ich habe etwas rumprobiert, aber festgestellt, dass meine Ambitionen größer waren, als mein FireFox/JS-Wissen.
Vielleicht gibt es auch noch andere (fertige) Skripte, die das unterstützen.
Ansonsten musst du warten, bis sich jemand der Sache annimmt, der wirklich Ahnung von der Materie hat...
-
Wie wäre es mit diesem Script:
Code
Alles anzeigen// ==UserScript== // @name AutoPopup.uc.js // @description Auto popup menulist/menupopup // @compatibility Firefox 69 // @author GOLF-AT, modified by gsf & aborix // @version 2019.08.09 // ==UserScript== (function() { const showDelay = 200; // delay of showing popups const hideDelay = 500; // delay of hiding popups const AlwaysPop = false; // show popups also when window is not focused var overElt = null; var PopElt = null; var PopTimer = null; var HideTimer = null; // elements are CSS selector strings var BlackIDs = []; // whitelist, and trigger action var whiteIDs = [ { id: 'omnibar-defaultEngine', popMemu: 'omnibar-engine-menu', run: function(overElem) { document.getElementById('omnibar-in-urlbar').click(0); } }, { id: 'ucjs_zoom_statuslabel', popMemu: 'ucjs_zoom-context', run: null }, { id: 'UserScriptLoader-icon', popMemu: 'UserScriptLoader-popup', run: null }, { id: 'readLater', popMemu: 'readLater-popup', run: null //function(overElem) {PopElt.popup();} }, { id: 'foxyproxy-toolbar-icon', popMemu: 'foxyproxy-toolbarbutton-popup', run: null } ]; var whitesInx = -1; const popupPos = ['after_start', 'end_before', 'before_start', 'start_before']; const searchBar = window.BrowserSearch ? BrowserSearch.searchBar : null; function IsButton(elt) { return elt && (elt.localName == 'toolbarbutton' || elt.localName == 'button'); } function IsWidgetBtn(elt) { return IsButton(elt) && ((elt.hasAttribute('widget-id') && elt.getAttribute('widget-type') == 'view') || elt.id == 'fxa-toolbar-menu-button' || elt.id == 'library-button' || elt.id == 'alltabs-button'); } function IsSearchBtn(elt) { return (elt && elt.className == 'searchbar-search-button') || whitesInx == 0; } function IsPanelMenuBtn(elt) { return elt && elt.id == 'PanelUI-menu-button'; } function IsDownloadBtn(elt) { return elt && elt.id == 'downloads-button'; } function IsMenuBtn(elt) { return IsPanelMenuBtn(elt) || IsDownloadBtn(elt) || IsWidgetBtn(elt) || (IsButton(elt) && getPopupMenu(elt)); } function IsOverflowBtn(elt) { return elt && elt.id == 'nav-bar-overflow-button'; } function IsUrlbarDropmarker(elt) { return elt && elt.classList && elt.classList.contains('urlbar-history-dropmarker'); } function IsCustomizationBtn(elt) { return IsButton(elt) && elt.className == 'customizationmode-button'; } function IsAutoComplete(elt) { try { return elt.getAttribute('type').substr(0, 12) == 'autocomplete'; } catch(e) { } } function isBlackNode(elt) { return BlackIDs.some(function(css) { try { var nodes = document.querySelectorAll(css); } catch(e) { return false; } for (var node of nodes) { if (node == elt) return true; } return false; }) } function getPopupNode(node) { if (whitesInx > -1 && PopElt) return PopElt; if (IsSearchBtn(node) || IsOverflowBtn(node) || node.id == 'sidebar-switcher-target') return node; var elt, isPop, s; for (; node != null; node = node.parentNode) { if (node == PopElt) return node; isPop = false; // node isn't popup node s = node.localName; if (s == 'menupopup' || s == 'popup' || s == 'menulist' || IsAutoComplete(node) || IsMenuBtn(node) || IsUrlbarDropmarker(node)) { isPop = true; } else if (s == 'dropmarker' && node.getAttribute('type') == 'menu' && node.parentNode.firstChild.localName == 'menupopup') { isPop = true; } else if (s == 'menu') { isPop = (node.parentNode.localName == 'menubar'); } else if (IsButton(node)) { for (elt = node; (elt = elt.nextSibling) != null;) { if (elt.localName == 'dropmarker' && elt.width > 0 && elt.height > 0) break; } if (elt) break; } if (isPop) break; } if (PopElt && node) { // whether node is child of PopElt for (elt = node.parentNode; elt != null; elt = elt.parentNode) { if (elt == PopElt) return PopElt; } } return isPop ? node : null; } function getPopupMenu(elt) { if (whitesInx > -1 && PopElt) return PopElt; var nodes = elt ? elt.ownerDocument.getAnonymousNodes(elt) || elt.childNodes : null; if (nodes) { for (let node of nodes) { if (node.localName == 'menupopup' || node.localName == 'panel') return node; } } var s = elt.getAttribute('popup'); return s ? document.getElementById(s) : null; } function getPopupPos(elt) { if (elt.id == 'bookmarks-menu-button') return null; var x, y, pos, i; for (pos = 0, x = elt.screenX, y = elt.screenY; elt != null; elt = elt.parentNode) { if (elt.localName == 'window' || !elt.parentNode) break; else if (elt.localName != 'toolbar' && elt.localName != 'hbox' && elt.localName != 'vbox'); else if (elt.height >= 3 * elt.width) { if (elt.height >= 45) { pos = 9; break; } } else if (elt.width >= 3 * elt.height) { if (elt.width >= 45) { pos = 8; break; } } } try { i = (pos & 1) ? // is pos odd? (x <= elt.width / 2 + elt.screenX ? 1 : 3) : (y <= elt.height / 2 + elt.screenY ? 0 : 2); } catch(e) { i = 0; } return popupPos[i]; } function AutoPopup() { PopTimer = null; if (!overElt) return; if (whitesInx > -1 && PopElt && whiteIDs[whitesInx].run) { whiteIDs[whitesInx].run(overElt); return; } if (!PopElt) PopElt = overElt; if (overElt.localName == 'dropmarker') { PopElt.showPopup(); } else if (overElt.localName == 'menulist') { overElt.open = true; } else if (IsPanelMenuBtn(overElt)) { PopElt = document.getElementById('appMenu-popup'); PanelUI.show(); } else if (IsWidgetBtn(overElt)) { PopElt = document.getElementById('customizationui-widget-panel'); if (overElt.hasAttribute('onmousedown')) overElt.dispatchEvent(new MouseEvent('mousedown')); else overElt.dispatchEvent(new UIEvent('command')); } else if (IsDownloadBtn(overElt)) { PopElt = document.getElementById('downloadsPanel'); DownloadsPanel.showPanel(); } else if (IsSearchBtn(overElt)) { searchBar.openSuggestionsPanel(); } else if (IsOverflowBtn(overElt)) { PopElt = document.getElementById('widget-overflow'); if (!overElt.open) overElt.click(); } else if (overElt.id == 'sidebar-switcher-target') { PopElt = document.getElementById('sidebarMenu-popup'); if (!overElt.classList.contains('active')) SidebarUI.toggleSwitcherPanel(); } else if (IsUrlbarDropmarker(overElt)) { PopElt = gURLBar.panel; if (!gURLBar.textbox.hasAttribute('open')) overElt.click(); } else { PopElt = getPopupMenu(overElt); if (IsCustomizationBtn(overElt)) overElt.open = true; else { try { let Pos = getPopupPos(overElt); PopElt.removeAttribute('hidden'); PopElt.openPopup(overElt, Pos, 0, 0, false, false, null); } catch(e) { PopElt = null; } } } } function HidePopup() { try { if (overElt.localName == 'dropmarker') { try { PopElt.parentNode.closePopup(); } catch(e) { try { PopElt.hidePopup(); } catch(e) { } } } else if (overElt.localName == 'menulist') PopElt.open = false; else if (PopElt && PopElt.hidePopup) PopElt.hidePopup(); else if (PopElt.popupBoxObject) PopElt.popupBoxObject.hidePopup(); else if (IsSearchBtn(overElt)) searchBar.textbox.closePopup(); else if (IsPanelMenuBtn(overElt)) PanelUI.hide(); } catch(e) { } HideTimer = null; overElt = PopElt = null; } function MouseOver(e) { if (!AlwaysPop && !document.hasFocus()) return; var popNode, n = e.originalTarget; whitesInx = -1; if (n.hasAttribute('id') && whiteIDs.some(function(k,i,me) { if (k.id == n.id) { overElt = n; whitesInx = i; PopElt = document.getElementById(k.popMemu); PopTimer = setTimeout(AutoPopup, showDelay); return true; } })) return; popNode = getPopupNode(e.originalTarget); if (!popNode || (popNode && popNode.disabled) || isBlackNode(popNode)) { MouseOut(); return; } if (HideTimer) { window.clearTimeout(HideTimer); HideTimer = null; } try { if (IsAutoComplete(popNode)) { return; }; for (var elt = popNode; elt != null; elt = elt.parentNode) { if (elt.localName == 'menupopup' || elt.localName == 'popup') return; } } catch(e) { } if (PopElt && popNode == PopElt && PopElt != overElt) return; if (overElt && popNode != overElt) HidePopup(); overElt = popNode; PopElt = null; PopTimer = setTimeout(AutoPopup, showDelay); } function MouseOut() { if (PopTimer) { window.clearTimeout(PopTimer); PopTimer = null; } if (!HideTimer && PopElt) HideTimer = window.setTimeout(HidePopup, hideDelay); } window.addEventListener('mouseover', MouseOver, false); })();
damit popt aber auch einiges anderes beim drüber fahren mit der Maus auf.
Mfg.
Endor -
Endor : Danke, sehr schönes Skript.
Würde ich direkt genau so verwenden, wenn das Skript nicht auch einige meiner AddOn-Buttons ( z.B: Close All Button ) automatisch beim 'Mouseover' auslösen würde. Das ist natürlich ein NoGo. Mal schauen, ob man das Skript auch zurechtstutzen kann...
Getestet unter Fx68ESR und Fx70 ...
Edit: Sehe gerade, dass man über die Selector-Bezeichner alles, was man nicht braucht, 'blacklisten' kann. Cool...
-
Danke Endor! Werde es Morgen mal testen.
-
Jetzt funktioniert es hier mit nachfolgenden Einstellungen im Script (Zeile25). Es werden bei mir nur noch die Elemente der Lesezeichen-Leiste per Mouseover aktiviert.
Danke nochmal an Endor und den/die Skript-Ersteller!
Die ersten sechs Einträge im Array sind AddOns-IDs, der Rest denke ich, selbsterklärend...
JavaScript
Alles anzeigen// elements are CSS selector strings var BlackIDs = ['#_4d787612-565e-4a13-be4d-574eb2979032_-browser-action', '#close-all-tabs-single_codefisher_org-browser-action', '#_4853d046-c5a3-436b-bc36-220fd935ee1d_-browser-action', '#_73a6fe31-595d-460b-a920-fcc0f8843232_-browser-action', '#jid1-mnnxcxisbpnsxq_jetpack-browser-action', '#ublock0_raymondhill_net-browser-action', '#PlacesChevron', '#nav-bar-overflow-button', '#panic-button', '#back-button', '#forward-button', '#PanelUI-menu-button', '#file-menu', '#edit-menu', '#view-menu', '#history-menu', '#bookmarksMenu', '#tools-menu', '#helpMenu' ];
Edit: Schade, Script funktioniert leider nicht mit der aktuelle Nightly...
-
Wie kommt man denn an so eine AddOn-ID?
Ich hab das Script grade mal getestet, kommt richtig gut, nur der "EPUBReader" müßte geblacklisted werden...
-
Wie kommt man denn an so eine AddOn-ID?
Mit den Browser-Werkzeugen.
Hier mal als Beispiel mit ublock Orgin.
-
harff182 :
Die ID für EPubReader ist #_5384767e-00d9-40e9-b72f-9cc39d655d6f_-browser-action
Wie kommt man denn an so eine AddOn-ID?
Am Besten mit der Entwicklungsumgebung für Web-Entwickler:
Hamburger-Menü -> Web-Entwickler -> Browser-Werkzeuge
Im Forum ist irgendwo, so glaube ich, die Entwicklungsumgebung mal genauer erklärt worden (ich denke von 2002Andreas/Sören?!). Muss man sich aber ein bisschen reinarbeiten...
-
-
Meinst du die?
Genau das...! Könnte man vielleicht auch mal festtackern?!
Obwohl, dass ist ja eigentlich 'Hoheitswissen'
vielleicht besser doch nicht...
-
Wie kommt man denn an so eine AddOn-ID?
Es ist nicht immer so eindeutig wie im Beispiel von Andreas in Beitrag #11, das siehst du auch am Beitrag #9 von BrokenHeart, wo manche Addon-IDs nur aus Zahlen bestehen. Gib daher about:support in die Adressleiste ein. Dort werden all deine Erweiterungen aufgelistet und dazu die zugehörige ID.
-
-
Genau das...! Könnte man vielleicht auch mal festtackern?!
Obwohl, dass ist ja eigentlich 'Hoheitswissen'
vielleicht besser doch nicht...
Per se ist hier im Forum nichts Hoheitswissen, das würde doch die Funktion eines Forums etwas ad absurdum führen. Das Problem mit dem Festtackern ist aber, dass das viele gar nicht lesen. Wer sich überhaupt nicht bemüht, im Forum zu suchen, schreibt gleich nur einen Beitrag mit seinem Anliegen. Den muss man darauf wieder hinweisen. Trotzdem bin ich nicht generell gegen das Festtackern, weil das zumindest den Helfern hilft, denn sie können auf einen zentralen Beitrag verweisen, der nicht im Wust der angesammelten Beiträge verschwindet.
Ein zweiter Punkt ist, dass solcherart Wissen so manchem zu „hoch“ ist oder vorkommt. Aber das muss jeder für sich entscheiden.
-
Gib daher about:support in die Adressleiste ein. Dort werden all deine Erweiterungen aufgelistet und dazu die zugehörige ID.
So wie die da stehen, funktionieren die aber nicht. Man muss schon den CSS-Selector-String aus der Entwicklungsumgebung nehmen. Kann man ja ausprobieren...
-
Per se ist hier im Forum nichts Hoheitswissen, das würde doch die Funktion eines Forums etwas ad absurdum führen.
Das war ein SCHERZ!
Du hast meinen Zwinkersmiley nicht mitzitiert -> deshalb . ok?
-
So wie die da stehen, funktionieren die aber nicht. Man muss schon den CSS-Selector-String aus der Entwicklungsumgebung nehmen. Kann man ja ausprobieren...
Ja, extra so gemacht, um da Hochwissen draus zu machen. Aber man kann doch nach Teilstrings suchen und wenn man dann weiß, wie es funktioniert, sprich das einmal mal gemacht hat, ist das dann ein Klacks.
-