点球射飞
火狐狸
火狐狸
  • UID24757
  • 注册日期2008-06-18
  • 最后登录2024-04-04
  • 发帖数168
  • 经验45枚
  • 威望0点
  • 贡献值24点
  • 好评度0点
  • 社区居民
  • 忠实会员
阅读:815回复:0

求助 请帮忙修改84.0下自动弹出按钮菜单脚本AutoPopup.uc

楼主#
更多 发布于:2021-01-20 19:28
如题,这个脚本很方便,可以自动弹出按钮的菜单,省去一次点击,在75.0下,书签菜单没有效果(图中红圈按钮),请帮忙修改一下,谢谢了,以下是脚本代码
 
 
 
     // ==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 = 100;   // delay of showing popups
         const hideDelay = 100;   // 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;
         }
 
         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);
 
     })();
我的Firefox
游客

返回顶部