cambriancn
小狐狸
小狐狸
  • UID57310
  • 注册日期2019-10-10
  • 最后登录2022-10-05
  • 发帖数28
  • 经验30枚
  • 威望0点
  • 贡献值16点
  • 好评度1点
阅读:1330回复:8

经典搜索栏UC脚本,74.0 开始有点小错误

楼主#
更多 发布于:2020-03-12 13:24
一个经典的搜索栏UC脚本,74.0开始 搜索引擎图标和名称混叠在一起了,不知道到怎么修复
不影响使用,但看着别扭,哪位大牛给看看?


// 'Alternative search bar' script for Firefox 69+ by Aris
//
// Thanks to UndeadStar (aka BoomerangAide) for Fx 69+ fixes and tweaks 
// https://github.com/Aris-t2/CustomJSforFx/issues/11
//
// Initial scripts was based on 'search revert' script by '2002Andreas':
// https://www.camp-firefox.de/forum/viewtopic.php?f=16&t=112673&start=2010#p1099758
//
//
// Feature (not optional): search glass is always visible at search bars end (like with "old" search)
// Feature (not optional): search button shows current search engines icon (like with "old" search)
// Feature (not optional): search buttons dropmarker is always visible (like with "old" search)
//
// Option: clear search input after search
// Option: revert to first search engine in list after search
// Option: old search engine selection popup
// Option: hide 'add engines' '+' indicator
// Option: hide 'oneoff' search engines (engines at popups bottom)
// Option: hide placeholder text 'Search'
// Option: swap the icons of search engine button and go button
// Option: show icons and search engine names instead of only icons
// Option: select search engine by scrolling mouse wheel over search bars button
 
// [!] Default browser feature: search engine can be changed inside default/modern popup by right-clicking
//     search icon and selecting 'Set As Default Search Engine' menuitem.
 
 
// Configuration area - start (all false beside last by default)
var clear_searchbar_after_search = false; // clear input after search (true) or not (false)
var revert_to_first_engine_after_search = false; // revert to first engine (true) or not (false)
var old_search_engine_selection_popup = true; // show old search engine selection popup (true) or not (false)
var select_engine_by_scrolling_over_button = true; // select search engine by scrolling mouse wheel over search bars button (true) or not (false)
var hide_oneoff_search_engines = false; // hide 'one off' search engines (true) or not (false)
var hide_addengines_plus_indicator = false; // hide add engines '+' sign (true) or not (false)
var hide_placeholder = false; // hide placeholder (true) or not (false)
var switch_glass_and_engine_icon = false; // swap icons of search engine button and go button (true) or not (false)
var show_search_engine_names = true; // show search engine names (true) or not (false)
var show_search_engine_names_with_scrollbar = false; // show search engine names with scrollbars (true) or not (false)
var show_search_engine_names_with_scrollbar_height = '170px'; // higher values show more search engines
var searchsettingslabel = "Change Search Settings"; // set label of search settings menuitem
var initialization_delay_value = 1000; // some systems might require a higher value than '1' second (1000ms) and on some even '0' is enough
// Configuration area - end
 
var isInCustomize = 1; //start at 1 to set it once at startup
 
var AltSearchbar = {
 init: function() {
 
   window.removeEventListener("load", AltSearchbar.init, false);
 
   try {
        
    var searchbar = document.getElementById("searchbar");
    var appversion = parseInt(Services.appinfo.version);
 
    if(!old_search_engine_selection_popup)
      updateStyleSheet();
     
    if(hide_placeholder)
      hideSearchbarsPlaceholder();
 
    if(select_engine_by_scrolling_over_button)
      selectEngineByScrollingOverButton();
 
    if(old_search_engine_selection_popup)
      createOldSelectionPopup();
 
    // select search engine by scrolling mouse wheel over search bars button
    function selectEngineByScrollingOverButton() {
      searchbar.addEventListener("DOMMouseScroll", (event) => {
        if (event.originalTarget.classList.contains("searchbar-search-button")) {
          searchbar.selectEngine(event, event.detail > 0);
        }
      }, true);
    };
 
    // hide placeholder
    function hideSearchbarsPlaceholder() {
      searchbar.getElementsByClassName('searchbar-textbox')[0].removeAttribute("placeholder");
    };
 
    function attachOldPopupToButton(e) {
        if(isInCustomize == 1) {
            setTimeout(function () { searchbar.getElementsByClassName("searchbar-search-button")[0].setAttribute("popup", "searchbuttonpopup"); }, initialization_delay_value);
        }
        if(isInCustomize > 0)
            isInCustomize--;
    }
 
    // old search selection popup
    async function createOldSelectionPopup() {
 
        searchbar.engines = await Services.search.getVisibleEngines();
         
        window.addEventListener("beforecustomization", function(e) { isInCustomize++; }, false);
        window.addEventListener("aftercustomization", attachOldPopupToButton, false);       
 
        // set new search engine
        searchbar.setNewSearchEngine = function(index) {
            searchbar.currentEngine = searchbar.engines[index];
            updateStyleSheet();
        };
 
        // create search popup
        searchbuttonpopup = document.createXULElement("menupopup");
        searchbuttonpopup.setAttribute("id", "searchbuttonpopup");
        searchbuttonpopup.setAttribute("width", searchbar.getBoundingClientRect().width - 6 );
        searchbuttonpopup.setAttribute("position", "after_start");
       
        try {
             
                    var hidden_list = Services.prefs.getStringPref("browser.search.hiddenOneOffs");
                    hidden_list =  hidden_list ? hidden_list.split(",") : [];                   
 
            for (var i = 0; i <= searchbar.engines.length - 1; ++i) {
                         
                if(!hidden_list.includes(searchbar.engines[i].name)) {
                         
                            menuitem = document.createXULElement("menuitem");;
                    menuitem.setAttribute("label", searchbar.engines[i].name);
                    menuitem.setAttribute("tooltiptext", searchbar.engines[i].name);
                            menuitem.setAttribute("class", "menuitem-iconic searchbar-engine-menuitem menuitem-with-favicon");
             
                    if (searchbar.engines[i] == searchbar.currentEngine)
                                menuitem.setAttribute("selected", "true");
             
                    if (searchbar.engines[i].iconURI)
                        menuitem.setAttribute("image",searchbar.engines[i].iconURI.spec);
                             
                            menuitem.setAttribute("oncommand", "document.getElementById('searchbar').setNewSearchEngine("+i+")");
 
                            searchbuttonpopup.appendChild(menuitem);
                             
                        }
       
                    }
         
                    menuseparator_om = document.createXULElement("menuseparator");
                    searchbuttonpopup.appendChild(menuseparator_om);
 
                    menuitem_om = document.createXULElement("menuitem");
                    menuitem_om.setAttribute("label", searchsettingslabel);
                    menuitem_om.setAttribute("tooltiptext", searchsettingslabel);
                    menuitem_om.setAttribute("class", "open-engine-manager");
                    menuitem_om.setAttribute("oncommand", "openPreferences('search');");
                    searchbuttonpopup.appendChild(menuitem_om); 
 
                    updateStyleSheet();
         
                }
      catch(exc) {
          console.log("Exception AltSearchbar: " + exc);
      }
 
      document.getElementById("mainPopupSet").appendChild(searchbuttonpopup);
 
      // adjust popup width
      setTimeout(function(){
        document.getElementById('searchbuttonpopup').setAttribute("width", document.getElementById("searchbar").getBoundingClientRect().width);
      },1000);
 
      var observer_width = new MutationObserver(function(mutations,observer) {
        observer.disconnect();
        try {
          document.getElementById('searchbuttonpopup').setAttribute("width", document.getElementById("searchbar").getBoundingClientRect().width );
        } catch(e){}
        observer.observe(document.getElementById('search-container'), { attributes: true, attributeFilter: ['width'] });
        observer.observe(document.getElementById('main-window'), { attributes: true, attributeFilter: ['sizemode'] });
      });
 
      try {
        observer_width.observe(document.getElementById('search-container'), { attributes: true, attributeFilter: ['width'] });
        observer_width.observe(document.getElementById('main-window'), { attributes: true, attributeFilter: ['sizemode'] });
      } catch(e){}
       
      // restore "add search engine" menuitem
      var observer_add_search = new MutationObserver(function(mutations,observer) {
          observer.disconnect();
          try {
               
                searchbuttonpopup = document.getElementById("searchbuttonpopup");
                var native_popup_search_add_item = document.getElementsByClassName("search-add-engines")[0];
               
                if(native_popup_search_add_item.hasChildNodes()) {
                   
                    var add_engine_menuitem;
                   
                    while(searchbuttonpopup.lastChild.classList.contains("custom-addengine-item")) {
                        searchbuttonpopup.removeChild(searchbuttonpopup.lastChild);
                    }
                     
                    if(searchbuttonpopup.lastChild.tagName.toLowerCase() != "menuseparator") {
                        searchbuttonpopup.appendChild(document.createXULElement("menuseparator"));
                        searchbuttonpopup.appendChild(document.createXULElement("menuseparator"));
                    }
                 
                    native_popup_search_add_item.childNodes.forEach(function(child_node) {
                         
                        menuitem = document.createXULElement("menuitem");
                        menuitem.setAttribute("label", child_node.label);
                        menuitem.setAttribute("class", "menuitem-iconic searchbar-engine-menuitem menuitem-with-favicon custom-addengine-item");
                        menuitem.setAttribute("tooltiptext", child_node.label);
                        menuitem.setAttribute("oncommand", "document.getElementById(\""+child_node.id+"\").click();");
                         
                        if(child_node.image)
                            menuitem.setAttribute("image",child_node.image);
                         
                        searchbuttonpopup.appendChild(menuitem);
                         
                    });
                     
                }
                else {
                     
                    while(searchbuttonpopup.lastChild.classList.contains("custom-addengine-item")) {
                        searchbuttonpopup.removeChild(searchbuttonpopup.lastChild);
                    }
                     
                    while(searchbuttonpopup.lastChild.tagName.toLowerCase() == "menuseparator")
                        searchbuttonpopup.removeChild(searchbuttonpopup.lastChild);
                     
                }
                 
                observer.observe(document.getElementsByClassName("search-add-engines")[0], { childList: true });
                 
          }
          catch(exc) {
              console.log("custom addengine exc: " + exc);
          }
     
      });
       
      try {
           
          var search_add_engines_candidates = document.getElementsByClassName("search-add-engines");
           
          if(search_add_engines_candidates.length == 0) {
              new MutationObserver(function(mutations,local_observer) {
                  if(search_add_engines_candidates.length != 0) {
                      observer_add_search.observe(search_add_engines_candidates[0], { childList: true });
                      local_observer.disconnect();
                  }                               
              }).observe(document, { childList : true, attributes : true, attributeFilter : [ "class" ] , subtree : true });
          }
          else {
            observer_add_search.observe(search_add_engines_candidates[0], { childList: true });
          }
         
         
      }catch(exc) { console.log("observer_add_search: " + exc); }
       
      // update search engine list after adding a new search engine
      var observer_engines_list = new MutationObserver(async function(mutations,observer) {
           
          var i;
          observer.disconnect();
           
          try {
               
            searchbuttonpopup = document.getElementById("searchbuttonpopup");
               
            searchbar.engines = await Services.search.getVisibleEngines();
                     
                    try {
             
                        while(searchbuttonpopup.childNodes[0].tagName.toLowerCase() != "menuseparator")
                            searchbuttonpopup.removeChild(searchbuttonpopup.firstChild);
                         
                        var separator = searchbuttonpopup.childNodes[0];
                         
                        var hidden_list = Services.prefs.getStringPref("browser.search.hiddenOneOffs");
                        hidden_list =  hidden_list ? hidden_list.split(",") : [];
 
                for (i = 0; i <= searchbar.engines.length - 1; ++i) {
                             
                    if(!hidden_list.includes(searchbar.engines[i].name)) {
                             
                                menuitem = document.createXULElement("menuitem");;
                        menuitem.setAttribute("label", searchbar.engines[i].name);
                                menuitem.setAttribute("class", "menuitem-iconic searchbar-engine-menuitem menuitem-with-favicon");
                        menuitem.setAttribute("tooltiptext", searchbar.engines[i].name);
                 
                        if (searchbar.engines[i] == searchbar.currentEngine)
                                    menuitem.setAttribute("selected", "true");
                 
                        if (searchbar.engines[i].iconURI)
                            menuitem.setAttribute("image",searchbar.engines[i].iconURI.spec);
                                 
                                menuitem.setAttribute("oncommand", "document.getElementById('searchbar').setNewSearchEngine("+i+")");
 
                                searchbuttonpopup.insertBefore(menuitem,separator);
                             
                            }
           
                        }
 
                        updateStyleSheet();
                     
            }catch(exc) { console.log("observer_engines_list mutation observer error:"); console.log(exc); }
             
            var search_panel_one_offs_candidates = document.getElementsByClassName("search-panel-one-offs");
           
            i = 0;
            while(!(search_panel_one_offs_candidates[i].getAttribute("role") == "group"))
              i++;
           
            observer.observe(search_panel_one_offs_candidates[i],{ childList: true });
                 
          }
          catch(exc) {
              console.log("update altbar exc: " + exc);
          }
           
      });
       
      try {
           
          var search_panel_one_offs_candidates = document.getElementsByClassName("search-panel-one-offs");
           
          if(search_panel_one_offs_candidates.length == 0) {
              new MutationObserver(function(mutations,local_observer) {
                  if(search_panel_one_offs_candidates.length > 0) {
                       
                      var i = 0;
                       
                      while(
                        i < search_panel_one_offs_candidates.length &&
                        !(search_panel_one_offs_candidates[i].getAttribute("role") == "group")
                      )
                        i++;
                         
                      if(i != search_panel_one_offs_candidates.length) {
                          observer_engines_list.observe(search_panel_one_offs_candidates[i],{ childList: true });   
                          local_observer.disconnect();
                      }
                       
                  }
              }).observe(document, { childList : true, attributes : true, attributeFilter : [ "class" ] , subtree : true });
          }
          else
          if(search_panel_one_offs_candidates.length == 1 && search_panel_one_offs_candidates[0].getAttribute("role") == "group")
              observer_engines_list.observe(search_panel_one_offs_candidates[0],{ childList: true });
          else {
               
              var i = 1;
               
              while(
                i < search_panel_one_offs_candidates.length &&
                !(search_panel_one_offs_candidates[i].getAttribute("role") == "group")
              )
                i++;
                 
              if(i != search_panel_one_offs_candidates.length)
                  observer_engines_list.observe(search_panel_one_offs_candidates[i],{ childList: true });   
               
          }
 
      }catch(exc) { console.log("observer_engines_list: " + exc); }
 
      // attach new popup to search bars search button
      try {
        attachOldPopupToButton();   
      }
      catch(e) {
          console.log("AltSearchbar: Failed to attach new popup to search bar search button");
      }
 
      // hide default popup when clicking on search button
      searchbar.addEventListener("mousedown", (event) => {
       if (event.originalTarget.classList.contains("searchbar-search-button")) {
        document.getElementById('PopupSearchAutoComplete').hidePopup();
        document.getElementById("PopupSearchAutoComplete").style.visibility="collapse";
 
        setTimeout(function() {
         document.getElementById("PopupSearchAutoComplete").style.visibility="visible";
         document.getElementById('PopupSearchAutoComplete').hidePopup();
        }, 1000);
 
       }
      }, true);
 
    }; //createOldSelectionPopup
     
    // doSearch function taken from Firefox 64s internal 'searchbar.js' file and added modifications
    searchbar.doSearch = function(aData, aWhere, aEngine, aParams, aOneOff) {
      let textBox = this._textbox;
 
      if (aData && !PrivateBrowsingUtils.isWindowPrivate(window) && this.FormHistory.enabled) {
        this.FormHistory.update({
            op: "bump",
            fieldname: textBox.getAttribute("autocompletesearchparam"),
            value: aData,
        }, {
            handleError(aError) {
              Cu.reportError("Saving search to form history failed: " + aError.message);
            },
        });
      }
 
      let engine = aEngine || this.currentEngine;
      let submission = engine.getSubmission(aData, null, "searchbar");
      let telemetrySearchDetails = this.telemetrySearchDetails;
      this.telemetrySearchDetails = null;
      if (telemetrySearchDetails && telemetrySearchDetails.index == -1) {
        telemetrySearchDetails = null;
      }
 
      const details = {
        isOneOff: aOneOff,
        isSuggestion: (!aOneOff && telemetrySearchDetails),
        selection: telemetrySearchDetails,
      };
      BrowserSearch.recordSearchInTelemetry(engine, "searchbar", details);
 
      let params = {
        postData: submission.postData,
      };
      if (aParams) {
        for (let key in aParams) {
          params[key] = aParams[key];
        }
      }
      openTrustedLinkIn(submission.uri.spec, aWhere, params);
 
        if(clear_searchbar_after_search)
            this.value = '';
           
        if(revert_to_first_engine_after_search) {
            searchbar.currentEngine = searchbar.engines[0];
            updateStyleSheet();
        }
    };
     
 
    // setIcon function taken from browsers internal 'searchbar.js' file and added modifications.
    // Required to update icon, if search engine is changed, but old search popup disabled.
    if(!old_search_engine_selection_popup)  searchbar.setIcon = function(element, uri) {
      element.setAttribute("src", uri);
      updateStyleSheet();
    };
     
 
    // main style sheet
    function updateStyleSheet() {
      var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
 
      var hide_oneoff_search_engines_code = '';
      var show_search_engine_names_code = '';
      var show_search_engine_names_with_scrollbar_code = '';
      var hide_addengines_plus_indicator_code = '';
      var switch_glass_and_engine_icon_code = '';
 
      if(hide_oneoff_search_engines)
        hide_oneoff_search_engines_code=' \
          #PopupSearchAutoComplete .search-panel-header, \
          #PopupSearchAutoComplete .search-one-offs { \
            display: none !important; \
          } \
        ';
 
      if(hide_addengines_plus_indicator)
       hide_addengines_plus_indicator_code=' \
         .searchbar-search-button[addengines=true]::after { \
           visibility: hidden !important; \
         } \
       ';
         
      if(show_search_engine_names && !hide_oneoff_search_engines && appversion == 69)
       show_search_engine_names_code=' \
        #PopupSearchAutoComplete .search-panel-tree:not([collapsed="true"]) { \
          display: block !important; \
          width: 100% !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree:not([collapsed="true"]) > * { \
          width: 100%; \
        } \
        #PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item { \
          -moz-appearance:none !important; \
          min-width: 0 !important; \
          width: 100% !important; \
          border: unset !important; \
          height: 22px !important; \
          background-image: unset !important; \
          -moz-padding-start: 3px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item:not([tooltiptext]) { \
          display: none !important; \
        } \
        #PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item .button-box { \
          position: absolute !important; \
          -moz-padding-start: 4px !important; \
          margin-top: 3px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item::after { \
          -moz-appearance: none !important; \
          display: inline !important; \
          content: attr(tooltiptext) !important; \
          position: relative !important; \
          top: -9px !important; \
          -moz-padding-start: 25px !important; \
          min-width: 0 !important; \
          width: 100% !important; \
          white-space: nowrap !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="21"] { \
          min-height: 21px !important; \
          height: 21px !important; \
          max-height: 21px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="42"] { \
          min-height: 42px !important; \
          height: 42px !important; \
          max-height: 42px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="63"] { \
          min-height: 63px !important; \
          height: 63px !important; \
          max-height: 63px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="84"] { \
          min-height: 84px !important; \
          height: 84px !important; \
          max-height: 84px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="105"] { \
          min-height: 105px !important; \
          height: 105px !important; \
          max-height: 105px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="126"] { \
          min-height: 126px !important; \
          height: 126px !important; \
          max-height: 126px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="147"] { \
          min-height: 147px !important; \
          height: 147px !important; \
          max-height: 147px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="168"] { \
          min-height: 168px !important; \
          height: 168px !important; \
          max-height: 168px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="189"] { \
          min-height: 189px !important; \
          height: 189px !important; \
          max-height: 189px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="210"] { \
          min-height: 210px !important; \
          height: 210px !important; \
          max-height: 210px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree scrollbar { \
          display: none !important; \
          visibility: collapse !important; \
          opacity: 0 !important; \
        } \
        ';
 
      if(show_search_engine_names && !hide_oneoff_search_engines && appversion == 70)
       show_search_engine_names_code=' \
        #PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item { \
          -moz-appearance:none !important; \
          min-width: 0 !important; \
          width: 100% !important; \
          border: unset !important; \
          height: 22px !important; \
          background-image: unset !important; \
          -moz-padding-start: 3px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item:not([tooltiptext]) { \
          display: none !important; \
        } \
        #PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item .button-box { \
          position: absolute !important; \
          -moz-padding-start: 4px !important; \
          margin-top: 3px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item::after { \
          -moz-appearance: none !important; \
          display: inline !important; \
          content: attr(tooltiptext) !important; \
          position: relative !important; \
          top: -9px !important; \
          -moz-padding-start: 25px !important;\
          min-width: 0 !important; \
          width: 100% !important; \
          white-space: nowrap !important; \
        } \
        #PopupSearchAutoComplete .search-panel-one-offs { \
          min-height: unset !important; \
          height: unset !important; \
          max-height: unset !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree:not([collapsed="true"]) { \
          width: 100% !important; \
          display: block !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree:not([collapsed="true"]) > * { \
          width: 100%; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="18"] { \
          min-height: 18px !important; \
          height: 18px !important; \
          max-height: 18px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="36"] { \
          min-height: 36px !important; \
          height: 36px !important; \
          max-height: 36px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="54"] { \
          min-height: 54px !important; \
          height: 54px !important; \
          max-height: 54px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="72"] { \
          min-height: 72px !important; \
          height: 72px !important; \
          max-height: 72px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="90"] { \
          min-height: 90px !important; \
          height: 90px !important; \
          max-height: 90px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="108"] { \
          min-height: 108px !important; \
          height: 108px !important; \
          max-height: 108px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="126"] { \
          min-height: 126px !important; \
          height: 126px !important; \
          max-height: 126px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="144"] { \
          min-height: 144px !important; \
          height: 144px !important; \
          max-height: 144px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="162"] { \
          min-height: 162px !important; \
          height: 162px !important; \
          max-height: 162px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="180"] { \
          min-height: 180px !important; \
          height: 180px !important; \
          max-height: 180px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree scrollbar { \
          display: none !important; \
          visibility: collapse !important; \
          opacity: 0 !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree { \
          overflow-y: hidden !important; \
        } \
        ';
         
      if(show_search_engine_names && !hide_oneoff_search_engines && appversion >= 71)
       show_search_engine_names_code=' \
        #PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item { \
          -moz-appearance:none !important; \
          min-width: 0 !important; \
          width: 100% !important; \
          border: unset !important; \
          height: 22px !important; \
          background-image: unset !important; \
          -moz-padding-start: 3px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item:not([tooltiptext]) { \
          display: none !important; \
        } \
        #PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item .button-box { \
          position: absolute !important; \
          -moz-padding-start: 4px !important; \
          margin-top: 3px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item::after { \
          -moz-appearance: none !important; \
          display: inline !important; \
          content: attr(tooltiptext) !important; \
          position: relative !important; \
          top: -3px !important; \
          -moz-padding-start: 5px !important;\
          min-width: 0 !important; \
          width: 100% !important; \
          white-space: nowrap !important; \
        } \
        #PopupSearchAutoComplete .search-panel-one-offs { \
          min-height: unset !important; \
          height: unset !important; \
          max-height: unset !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree:not([collapsed="true"]) { \
          width: 100% !important; \
          display: block !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree:not([collapsed="true"]) > * { \
          width: 100%; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="18"] { \
          min-height: 18px !important; \
          height: 18px !important; \
          max-height: 18px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="36"] { \
          min-height: 36px !important; \
          height: 36px !important; \
          max-height: 36px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="54"] { \
          min-height: 54px !important; \
          height: 54px !important; \
          max-height: 54px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="72"] { \
          min-height: 72px !important; \
          height: 72px !important; \
          max-height: 72px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="90"] { \
          min-height: 90px !important; \
          height: 90px !important; \
          max-height: 90px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="108"] { \
          min-height: 108px !important; \
          height: 108px !important; \
          max-height: 108px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="126"] { \
          min-height: 126px !important; \
          height: 126px !important; \
          max-height: 126px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="144"] { \
          min-height: 144px !important; \
          height: 144px !important; \
          max-height: 144px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="162"] { \
          min-height: 162px !important; \
          height: 162px !important; \
          max-height: 162px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree[height="180"] { \
          min-height: 180px !important; \
          height: 180px !important; \
          max-height: 180px !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree scrollbar { \
          display: none !important; \
          visibility: collapse !important; \
          opacity: 0 !important; \
        } \
        #PopupSearchAutoComplete .search-panel-tree { \
          overflow-y: hidden !important; \
        } \
        ';
 
      if(show_search_engine_names_with_scrollbar && !hide_oneoff_search_engines && show_search_engine_names)
       show_search_engine_names_with_scrollbar_code=' \
        #PopupSearchAutoComplete .search-one-offs { \
          height: '+show_search_engine_names_with_scrollbar_height+' !important; \
          max-height: '+show_search_engine_names_with_scrollbar_height+' !important; \
          overflow-y: scroll !important; \
          overflow-x: hidden !important; \
        } \
        \
        ';
 
      if(switch_glass_and_engine_icon)
       switch_glass_and_engine_icon_code=' \
        .search-go-button { \
          list-style-image: url('+document.getElementById("searchbar").currentEngine.iconURI.spec+') !important; \
          transform: scaleX(1) !important; \
        } \
        .searchbar-search-button .searchbar-search-icon { \
          list-style-image: url("chrome://browser/skin/search-glass.svg") !important; \
          -moz-context-properties: fill, fill-opacity !important; \
          fill-opacity: 1.0 !important; \
          fill: #3683ba !important; \
        } \
        .searchbar-search-button:hover .searchbar-search-icon { \
          fill: #1d518c !important; \
        } \
        .searchbar-search-button:active .searchbar-search-icon { \
          fill: #00095d !important; \
        } \
        \
        ';
 
      var uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(' \
        \
        #searchbuttonpopup {\
          -moz-margin-start: -1px; \
        } \
        .searchbar-search-button .searchbar-search-icon { \
          list-style-image: url('+document.getElementById("searchbar").currentEngine.iconURI.spec+') !important; \
        } \
        .search-go-button { \
          list-style-image: url("chrome://browser/skin/search-glass.svg") !important; \
          -moz-context-properties: fill, fill-opacity !important; \
          fill-opacity: 1.0 !important; \
          fill: #3683ba !important; \
          transform: scaleX(-1) !important; \
          background: unset !important; \
          margin-inline-end: 4px !important; \
        } \
        .search-go-button:hover { \
          fill: #1d518c !important; \
        } \
        .search-go-button:active { \
          fill: #00095d !important; \
        } \
        .search-go-button[hidden="true"] { \
          display: block !important; \
        } \
        .searchbar-search-button[addengines=true] > .searchbar-search-icon-overlay, \
        .searchbar-search-button:not([addengines=true]) > .searchbar-search-icon-overlay { \
          list-style-image: url("chrome://global/skin/icons/arrow-dropdown-12.svg") !important; \
          -moz-context-properties: fill !important; \
          margin-inline-start: -6px !important; \
          margin-inline-end: 2px !important; \
          width: 11px !important; \
          height: 11px !important; \
        } \
        .searchbar-search-button[addengines=true] > .searchbar-search-icon-overlay { \
          margin-top: 0px !important; \
        } \
        .searchbar-search-button[addengines=true]::after { \
          content: " " !important; \
          background: url("chrome://browser/skin/search-indicator-badge-add.svg") center no-repeat !important; \
          display: block !important; \
          visibility: visible !important; \
          width: 11px !important; \
          height: 11px !important; \
          -moz-margin-start: 18px !important; \
          margin-top: -11px !important; \
          position: absolute !important; \
        } \
        .searchbar-search-button[addengines=true] > .searchbar-search-icon-overlay { \
          visibility: visible !important; \
        } \
         \
        .custom-addengine-item > .menu-iconic-left::after { \
          position: absolute !important; \
          display: block; !important; \
          content: "" !important; \
          background: url("chrome://browser/skin/search-indicator-badge-add.svg") no-repeat center !important; \
          box-shadow: none  !important; \
          margin-top: -12px !important; \
          margin-inline-start: -4px !important; \
          width: 11px; !important; \
          height: 11px; !important; \
          min-width: 11px; !important; \
          min-height: 11px; !important; \
        } \
        '+hide_addengines_plus_indicator_code+' \
        '+hide_oneoff_search_engines_code+' \
        '+show_search_engine_names_code+' \
        '+show_search_engine_names_with_scrollbar_code+' \
        '+switch_glass_and_engine_icon_code+' \
        \
      '), null, null);
 
      // remove old style sheet
      if (sss.sheetRegistered(uri,sss.AGENT_SHEET)) {
        sss.unregisterSheet(uri,sss.AGENT_SHEET);
      }
 
      sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
 
    };
 
   } catch(e) {} 
 
 }
}
 
/* if search is not hidden on current window, wait for searchbar loading and then initialize 'alternative search' (with delay) */
if(!document.firstElementChild.hasAttribute("chromehidden") || !document.firstElementChild.getAttribute("chromehidden").includes("toolbar")) {
    if (document.readyState === "complete") {
        setTimeout(AltSearchbar.init, 1);
    }
    else {
        window.addEventListener("load", AltSearchbar.init, false);
    }
}
cambriancn
小狐狸
小狐狸
  • UID57310
  • 注册日期2019-10-10
  • 最后登录2022-10-05
  • 发帖数28
  • 经验30枚
  • 威望0点
  • 贡献值16点
  • 好评度1点
1楼#
发布于:2020-03-12 13:25
@lonely_8
大牛有空给看看?
lonely_8
非常火狐
非常火狐
  • UID30273
  • 注册日期2009-09-03
  • 最后登录2022-08-09
  • 发帖数733
  • 经验469枚
  • 威望0点
  • 贡献值86点
  • 好评度147点
  • 社区居民
  • 忠实会员
2楼#
发布于:2020-03-12 17:24
688-689行改成
top: -8px !important;
-moz-padding-start: 24px !important;
cambriancn
小狐狸
小狐狸
  • UID57310
  • 注册日期2019-10-10
  • 最后登录2022-10-05
  • 发帖数28
  • 经验30枚
  • 威望0点
  • 贡献值16点
  • 好评度1点
3楼#
发布于:2020-03-12 19:03
lonely_8:688-689行改成
top: -8px !important;
-moz-padding-start: 24px !important;
回到原帖
牛批
kidzgy
火狐狸
火狐狸
  • UID35190
  • 注册日期2011-02-03
  • 最后登录2024-03-28
  • 发帖数248
  • 经验196枚
  • 威望0点
  • 贡献值122点
  • 好评度17点
4楼#
发布于:2020-03-14 01:09
lonely_8:688-689行改成
top: -8px !important;
-moz-padding-start: 24px !important;
回到原帖
当与【搜索栏滚轮切换搜索引擎.uc】并用时,滑动滑轮,搜索图标不会随当前引擎而变化。不知可修复吗?FF74
(function() {
//Einstellungen - true = ein(aktiviert) false = aus(deaktiviert)
    
//Namen und Symbol der Suchmaschine in der Suchleiste anzeigen
  const BUTTON_ONLY = false //Nur bei Suchleisten Suchschaltfläche anwenden - Suchmaschinen wechseln mit Scrollrad im Hauptkontextmenü deaktivieren
  const label = true; //Namen anzeigen
  const img = true; //Symbol - Favicon anzeigen
//Doppelklick auf Suchleiste, um zur Standard Suchmaschine zurück zu kehren
  const only = false; //Suchleiste leeren und nicht zur Standardsuchmaschine zurückkehren [Neu in Version 0.6]
  const dbl = true; //Funktion aktivieren
  const zero = false; //Bei Klick zur obersten Suchmaschine zurückkehren
  const select = '百度'; //Standard Suchmaschine angeben, zum Beispiel 'DuckDuckGo'.
  const erase = true; //Nach Suche Suchleiste leeren
//[Aktion nach dem Suchen mit der Suchleiste]
  const auto = true; //Andere Einstellungen verwenden, durch einen Doppelklick auf die Suchleiste 
//Kontextmenü Suche wechseln mit[~~Suchen]
  const cxt = true; //Funktion aktivieren
  const icon = true; //Symbol - Favicon anzeigen
  const clk = true; //Klicken, um zur Standard Suchmaschine zurückzukehren (Andere Einstellungen verwenden ~ mit Doppelklick auf die Suchleiste)
  const sync = false; //Suchwort an die Suchleiste senden [Neu in Version 0.7]
  const hist = true; //Suchwort der Suchchronik der Suchleiste hinzufügen * Es ist OK, wenn die Synchronisation inkorrekt ist [Neu in Version 0.8]
//[Verhalten beim Start] * Gilt auch beim Neustart
  const start0 = false; //Andere Einstellungen verwenden, durch Doppelklick auf die Suchleiste
    
//Konfiguration
    
  const scrollRight = true;
  let bar = document.getElementById('searchbar');
  let box = bar.textbox;
  let menu = document.getElementById('context-searchselect');
  let BSS = Services.search;
      
  if(!!dbl) bar.addEventListener('dblclick', ResetE, false);
  bar.addEventListener('DOMMouseScroll', ChangeE, false);
  if(!!cxt) menu.addEventListener('wheel', ChangeE, false);
  if(!!clk) menu.addEventListener('click', function(){
    if(!!sync) {box.value = this.searchTerms}else{box.value = box.value}
    if(!!hist) SyncHistory();
    setTimeout(function(){ResetE()}, 0)
  }, false);
    
  window.addEventListener('unload', function uninit() {
        bar.removeEventListener('dblclick', ResetE, false);
        bar.removeEventListener('DOMMouseScroll', ChangeE, false);
        menu.removeEventListener('wheel', function(e){if(!!con) ChangeE(e)} , false);
        menu.removeEventListener('click', function(){
            if(!!sync) {box.value = this.searchTerms}else{box.value = box.value}
            if(!!hist) SyncHistory();
            setTimeout(function(){ResetE()}, 0)
        } , false);
        window.removeEventListener('unload', uninit , false);
  }, false);
      
  async function ResetE(){
    this.engines = await BSS.getVisibleEngines();
    if(!only){
    if(!!zero || select == ''){BSS.defaultEngine = this.engines[0]
    }else{
        BSS.defaultEngine = BSS.getEngineByName(select)
        }
    }
    if(!!erase || !!only) box.value = '';
  }
      
  function CMenu() {
    let selectedText = menu.searchTerms || window.getSelection().toString();
    if (selectedText.length > 15) {
        let truncLength = 15;
        let truncChar = selectedText[15].charCodeAt(0);
        if (truncChar >= 0xDC00 && truncChar <= 0xDFFF)
            truncLength++;
        selectedText = selectedText.substr(0, truncLength) + '\u2026';
    }
    var menuLabel = gNavigatorBundle.getFormattedString('contextMenuSearch',[BSS.defaultEngine.name, selectedText]);
    menu.setAttribute('label', menuLabel);
    if(!icon || !cxt) return;
    let style = '@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);#context-searchselect:before{margin:0 -20px 0 5px;content:"";display:inline-block;width:16px;height:16px;background:url('+ BSS.defaultEngine.iconURI.spec +');background-size:contain!important}';
    let sspi = document.createProcessingInstruction(
        'xml-stylesheet',
        'type="text/css" href="data:text/css,' + encodeURIComponent(style) + '"'
        );
    document.insertBefore(sspi, document.documentElement);
    sspi.getAttribute = function(name) {
        return document.documentElement.getAttribute(name);
    }; 
  }
      
  function SyncHistory(){
    let val = menu.searchTerms;
    let addHistory = function(val){
        setTimeout(function(){bar.FormHistory.update({op: "add", fieldname: "searchbar-history", value: val})}, 500);
    };
    let removeHistory = function(callback, val){
        bar.FormHistory.update({op: "remove", fieldname: "searchbar-history", value: val});
        callback(val);
    }
    removeHistory(addHistory, val);
  }
      
  async function ChangeE(event) {
    if(BUTTON_ONLY && event.originalTarget.className !== 'searchbar-search-button' && event.originalTarget !== menu) return;
    let dir = (scrollRight ? 1 : -1) * Math.sign(event.detail || event.deltaY);
    this.engines = await BSS.getVisibleEngines();
    let index = this.engines.findIndex(e => e.name === BSS.defaultEngine.name);
        this.engines[this.engines.length] = this.engines[0]
        if(index+dir < 0 || index+dir === this.engines.length - 1) return;
        BSS.defaultEngine = this.engines[index+dir];
  }
      
  function ShowCurrentE(){
    let E = BSS.defaultEngine;
        if(!!label)box.setAttribute('placeholder', E.name);
    let icon = bar.querySelector('.searchbar-search-icon');
        if(!!img)icon.setAttribute('style', "list-style-image: url('"+ E.iconURI.spec +"') !important; -moz-image-region: auto !important; width: 16px !important; padding: 2px 0 !important;");
  }
      
  Services.obs.addObserver(observe, "browser-search-engine-modified");
    window.addEventListener("unload", () => {
      Services.obs.removeObserver(observe, "browser-search-engine-modified");
  });
       
  Services.obs.addObserver(ob2, "browser-search-service");
    window.addEventListener("unload", () => {
      Services.obs.removeObserver(ob2, "browser-search-service");
  });
        
       
   function observe(aEngine, aTopic, aVerb) {
    if (aTopic == "browser-search-engine-modified") {
      aEngine.QueryInterface(Components.interfaces.nsISearchEngine);
      if(aVerb !== "engine-current" && aVerb !==  'engine-default') return;
        ShowCurrentE();
        CMenu();
    }
  }
    
   function ob2(aSubject, aTopic, aData) {
    if(aData === "init-complete" && aTopic === "browser-search-service") {
       if(!!start0) ResetE();
       ShowCurrentE();
       CMenu();
     }
   }
        
  if(!auto) return;
    bar.cmd = bar.doSearch;
    bar.doSearch = function(aData, aWhere, aEngine) {
    this.cmd(aData, aWhere, aEngine);
    ResetE()
  } 
  ShowCurrentE();
})()
cambriancn
小狐狸
小狐狸
  • UID57310
  • 注册日期2019-10-10
  • 最后登录2022-10-05
  • 发帖数28
  • 经验30枚
  • 威望0点
  • 贡献值16点
  • 好评度1点
5楼#
发布于:2020-03-14 11:17
kidzgy:当与【搜索栏滚轮切换搜索引擎.uc】并用时,滑动滑轮,搜索图标不会随当前引擎而变化。不知可修复吗?FF74
(function() {
//Einstellungen - true = ein(aktiviert) false = au...
回到原帖
我用的这个脚本,鼠标放在搜索图标上,滚动也能切换引擎;为啥还要用另外一个
kidzgy
火狐狸
火狐狸
  • UID35190
  • 注册日期2011-02-03
  • 最后登录2024-03-28
  • 发帖数248
  • 经验196枚
  • 威望0点
  • 贡献值122点
  • 好评度17点
6楼#
发布于:2020-03-14 12:47
cambriancn:我用的这个脚本,鼠标放在搜索图标上,滚动也能切换引擎;为啥还要用另外一个回到原帖
哦原来原本脚本也可以滚动切换引擎,但是发现有几个问题:
1、只能在鼠标移动到搜索引擎图标的时候才可以切换
2、按回车后不能切换回默认引擎
lonely_8
非常火狐
非常火狐
  • UID30273
  • 注册日期2009-09-03
  • 最后登录2022-08-09
  • 发帖数733
  • 经验469枚
  • 威望0点
  • 贡献值86点
  • 好评度147点
  • 社区居民
  • 忠实会员
7楼#
发布于:2020-03-15 21:35
kidzgy:哦原来原本脚本也可以滚动切换引擎,但是发现有几个问题:
1、只能在鼠标移动到搜索引擎图标的时候才可以切换
2、按回车后不能切换回默认引擎
回到原帖
2、30行 var revert_to_first_engine_after_search = false; 的 false 该为 true 字面上就是这个功能(没验证)。
kidzgy
火狐狸
火狐狸
  • UID35190
  • 注册日期2011-02-03
  • 最后登录2024-03-28
  • 发帖数248
  • 经验196枚
  • 威望0点
  • 贡献值122点
  • 好评度17点
8楼#
发布于:2020-03-15 23:29
lonely_8:2、30行 var revert_to_first_engine_after_search = false; 的 false 该为 true 字面上就是这个功能(没验证)。回到原帖
以前觉得经典的好用,是因为鼠标可以滑动切换引擎,回车可以清空搜索栏等。现在换不换回经典其实已经无所谓了,反正已经习惯新的了。
游客

返回顶部