Автоматически очистить панель поиска после запуска поиска( Firefox17+ )
Автор: bunda1
Версия: от 08.09.2014.
Описание: Kод очищает поисковую строку Firefox после подачи поиска.
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую Custom Buttons кнопку, можно использовать уже существующую.

Выделить код

Код:

// Автоматически очистить панель поиска после запуска поиска, от 08.09.2014. ..............
var src = "BrowserSearch.searchBar.handleSearchCommand = " + BrowserSearch.searchBar.handleSearchCommand.toString(),
     res = src.replace("{", '{\nsetTimeout(function(t) t._textbox.value = "", 50, this)');
eval(res);
addDestructor(function() eval(src) );

Что-то в firefox 26 кнопка перестала работать.

Northtech пишет

Что-то в firefox 26 кнопка перестала работать.

Попробуй теперь.

Теперь всё нормально, спасибо.

А можно что бы происходил сброс на поисковую систему по умолчанию после подачи поиска?

fish08 пишет

А можно что бы происходил сброс на поисковую систему по умолчанию после подачи поиска?

Выделить код

Код:

// Автоматически очистить панель поиска после запуска поиска + возврат нужного поисковика, от 19.12.2013. ..............
(function() {
   var func = BrowserSearch.searchBar.handleSearchCommand.toString()
                   .replace(/^\s*function.+{/, '').replace(/}\s*$/, '');    
      
   var code = ['setTimeout(function() { textBox.value = ""; }, 500);\
               \n var searchService = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);\
               \n searchService.currentEngine = searchService.getEngineByName("Яндекс");\
                '].join('');

   func += code;
   BrowserSearch.searchBar.handleSearchCommand = new Function('aEvent', func );
})();
bunda1 пишет
fish08 пишет

А можно что бы происходил сброс на поисковую систему по умолчанию после подачи поиска?

Выделить код

Код:

// Автоматически очистить панель поиска после запуска поиска + возврат нужного поисковика, от 19.12.2013. ..............
(function() {
   var func = BrowserSearch.searchBar.handleSearchCommand.toString()
                   .replace(/^\s*function.+{/, '').replace(/}\s*$/, '');    
      
   var code = ['setTimeout(function() { textBox.value = ""; }, 500);\
               \n var searchService = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService);\
               \n searchService.currentEngine = searchService.getEngineByName("Яндекс");\
                '].join('');

   func += code;
   BrowserSearch.searchBar.handleSearchCommand = new Function('aEvent', func );
})();

Спасибо

А к новой редакции функцию возврата поисковика прикрутите пожалуйста.

Mishania пишет

А к новой редакции функцию возврата поисковика прикрутите пожалуйста.

Выделить код

Код:

var src = "BrowserSearch.searchBar.handleSearchCommand = " + BrowserSearch.searchBar.handleSearchCommand.toString(),
    res = src.replace("{", '{\nsetTimeout(function(t) { t._textbox.value = ""; Services.search.currentEngine = Services.search.getEngineByName("Яндекс") }, 50, this);');
eval(res);
addDestructor(function() eval(src) );

Спасибо.

bunda1
Можешь написать код"очистить панель поиска нажатием скм по иконке поисковика" ?

Maxut

Выделить код

Код:

// Очистить панель поиска нажатием скм по иконке поисковика, от 19.09.2014. ..............
(function () { 
   var searchbar = document.getElementById("searchbar");
   if ( !searchbar ) return;
 
   var engineButton = document.getAnonymousElementByAttribute( searchbar, "anonid", "searchbar-engine-button");
   addEventListener('click', function(e) {   
      if ( e.button == 1 ) searchbar.textbox.value = '';
   }, false, engineButton );   
})();

Но мне кажется очистить панель поиска прокруткой колёсиком мыши на панели поиска будет лучше:

Выделить код

Код:

// Очистить панель поиска прокруткой колёсиком мыши на панели поиска, от 19.09.2014. ..............
(function () { 
   var searchbar = document.getElementById("searchbar");
   if ( !searchbar ) return;
 
   addEventListener('DOMMouseScroll', function(){
      searchbar.textbox.value = '';
   }, false, searchbar ); 
})();

bunda1
Да,второй вариант удобнее. Спасибо

bunda1 пишет

Но мне кажется очистить панель поиска прокруткой колёсиком мыши на панели поиска будет лучше:

А можно  вариант, чтобы очищала и возвращала поисковик, но не колёсиком, а например ЛКМ+ПКМ, как в кнопке Toggle Find+, или любым другим сочетанием?

voqabuhe пишет

А можно  вариант, чтобы очищала и возвращала поисковик, но не колёсиком, а например ЛКМ+ПКМ, как в кнопке Toggle Find+, или любым другим сочетанием?

Выделить код

Код:

// ЛКМ + ПКМ на панели поиска очищают его, от 21.10.2014. ................................ 
function clearSearchbar(e) { 
   if ( e.type == "mousedown" ) {
        if ( e.button == 0 ) this.leftButtonDown = true;
        if ( e.button == 2 && this.leftButtonDown ) {
             this.leftButtonDown = false;
             setTimeout(function() e.target.textbox.value = '', 0); 
             }
         return;
       }
           
    if ( e.button == 0 ) this.leftButtonDown = false;    
    
    if ( e.button == 2 && this.leftButtonDown )
         e.preventDefault();
};
["mousedown", "click"]
.forEach(function(type) addEventListener( type, clearSearchbar, false, document.getElementById("searchbar") ));

bunda1
В [nightly] не срабатывает, открывает обычное контекстное меню.

voqabuhe
Если имеется в виду клик ПКМ при зажатой ЛКМ

скрытый текст

Выделить код

Код:

(searchbar => {
    var flag, engine = Services.search.getEngineByName("Яндекс");
    var btn = document.getAnonymousElementByAttribute(searchbar, "anonid", "search-go-button");
    addEventListener("click", e => {
        if (e.button == 2) {
            if (e.buttons != 1) return;
            e.preventDefault();
            flag = true;
            searchbar.value = "";
            if (Services.search.currentEngine != engine)
                Services.search.currentEngine = engine;
        } else if (flag && e.originalTarget == btn) {
            e.stopPropagation();
            e.preventDefault();
            flag = false;
        }
    }, true, searchbar);
    addEventListener("mouseleave", () => flag = false, false, btn);
})(document.getElementById("searchbar"));

Dumby пишет

Если имеется в виду клик ПКМ при зажатой ЛКМ

Да, именно это и имелось ввиду, и прекрасно работает. Спасибо.  Есть только одно маленькое но. Если поместить на панель главного меню, что эту кнопку, что "Очистить панель поиска прокруткой колёсиком мыши на панели поиска, от 19.09.2014.", они там работают только до первой перезагрузки [nightly]. А после их можно оживить только редактированием. Можно это поправить, а то у меня на панели меню спрятаны все кнопки, которые не требуют нажатия?

voqabuhe пишет

на панели меню спрятаны все кнопки, которые не требуют нажатия

Да-да, на панели меню (#toolbar-menubar) им самое место.
Сейчас поместил кнопку на этот тулбар, сделал рестарт, и ... — код работает :(.
Правда Nightly несвежая, но всё-таки 36.0a1.

Dumby пишет

Сейчас поместил кнопку на этот тулбар, сделал рестарт, и ... — код работает :(.

Значит у меня им что-то мешает, хотя остальные, кроме этих двух, там работают. Ну что ж, пусть тогда пока остаются в #PanelUI-button, где они себя прекрасно чувствуют.:)

А таймер к тому коду, что в шапке, прикрутить возможно? Допустим, чтобы стирание происходило спустя минуту.

Если выбран поисковик по умолчанию, то всё чистит, а если нет то не чистит.
Можно сделать чтоб тоже чистило?

4c97c6d820fe.png 52.0.2

gif (123 яндекс по умолчанию / 12345 google)
2d42b08b7351.gif

Присоединяюсь к просьбе Alex_one.

gif'ка, конечно, хороша. Но объясняет задачу не полностью.
Вот, например, допустим так. Если работает, то сойдёт ли?

скрытый текст

Выделить код

Код:

((bar, key) => {
    if (!bar) return;
    var value = bar[key], box = bar.textbox, set = (o, k = "value", v = "") => o[k] = v;
    var hasListener, clear = () => setTimeout(() => set(box), 50, hasListener = box.popup.removeEventListener("popuphidden", clear, false));
    Object.defineProperty(bar, key, {
        configurable: true, enumerable: true, get: () => value, set(val) {
            val === null && !hasListener && setTimeout(() => {
                if (box.popup.state != "open") set(box);
                else hasListener = !box.popup.addEventListener("popuphidden", clear, false);
            }, 50);
            return value = val;
        }
    });
    addDestructor(() => delete bar[key] && set(bar, key, value));
})(BrowserSearch.searchBar, "telemetrySearchDetails");

Dumby
Да, очищает при выборе поисковика, но...
Открывает в текущей вкладке при клике по стрелке, а должна в новой (активной), так же как при выборе поиска или по Еnter.
Можно еще прикрутить очистку строки поиска при клике ПКМ по стрелке (сейчас вызов меню панелей)?

Есть код который очищает поиск (или адрес) при прокрутке колесом на нем. Это удобнее, имхо. Поищите на форуме.

Ultima2m пишет

Есть код который очищает поиск (или адрес) при прокрутке колесом на нем.

Выделить код

Код:

// Очистить панель поиска прокруткой колёсиком мыши на панели поиска, от 10.04.2017. ..............
(bar=> {
   if ( !bar ) return;
   bar.textbox.onwheel =()=> bar.textbox.value = '';
   addDestructor(()=> bar.textbox.onwheel = null);
})(BrowserSearch.searchBar);
_zt пишет

Открывает в текущей вкладке при клике по стрелке, а должна в новой (активной), так же как при выборе поиска или по Еnter.
Можно еще прикрутить очистку строки поиска при клике ПКМ по стрелке (сейчас вызов меню панелей)?

:/

скрытый текст

Выделить код

Код:

(bar => {
    if (!bar) return;
    var events = ["mouseenter", "focus"], init = e => {
        for(var type of events) removeEventListener(type, init, false, bar);

        var key = "telemetrySearchDetails", value = bar[key], hasListener, btn;
        var box = bar.textbox, set = (o, k = "value", v = "") => o[k] = v;
        var clear = () => setTimeout(() => set(box), 50, hasListener = box.popup.removeEventListener("popuphidden", clear, false));

        Object.defineProperty(bar, key, {
            configurable: true, enumerable: true, get: () => value, set(val) {
                val === null && !hasListener && setTimeout(() => {
                    if (box.popup.state != "open") set(box);
                    else hasListener = !box.popup.addEventListener("popuphidden", clear, false);
                }, 50);
                return value = val;
            }
        });
        addDestructor(() => delete bar[key] && set(bar, key, value));

        if (!(btn = document.getAnonymousElementByAttribute(bar, "anonid", "search-go-button"))) return;
        var hm = e => e.ctrlKey || e.shiftKey || e.altKey || e.metaKey;

        addEventListener("click", e =>
            !Services.prefs.getBoolPref("browser.search.openintab")
            || e.button || hm(e) || e.originalTarget != btn
            || e.stopPropagation(btn.dispatchEvent(new MouseEvent("click", {ctrlKey: true, metaKey: true})))
        , true, btn.parentNode);
        addEventListener("contextmenu", e => hm(e) || e.preventDefault(set(box)), false, btn);
    }
    for(var type of events) addEventListener(type, init, false, bar);
})(BrowserSearch.searchBar);

Dumby,

Dumby пишет

gif'ка, конечно, хороша.

:D я старался)

Второй Ваш Код отлично справляется!
Спасибо большое за помощь :beer:

Ultima2m
Вот именно, что имхо.

Dumby
Шикарно. Спасибо. yahoo.gif

есть ещё аддон

Clear Search Bar Text On Search
https://addons.mozilla.org/ru/firefox/a … -bar-text/

В [firefox] 61 не работает. Можно исправить?

vitalii201
У меня 61.0.1
Работает. http://forum.mozilla-russia.org/viewtop … 34#p734734
и это тоже: http://forum.mozilla-russia.org/viewtop … 31#p734731

А возможно ли в Mozilla Firefox Quantum 66 очистку поиска такую сделать? custombuttons в Quantum видимо не установится,может есть выход? Спасибо:)

Bump! Пишу с Quantum 69. Проблема отсутствия автоочищения всё ещё актуальна.

Странное вот дело.
На [firefox] 71.0 то работает, то перестаёт работать, пока не перезапустишь браузер.
Помогите пожалуйста это дело подправить.

Автоматически очистить панель поиска после запуска поиска

Выделить код

Код:

(bar => {
    if (!bar) return;
    var events = ["mouseenter", "focus"], init = e => {
        for(var type of events) removeEventListener(type, init, false, bar);

        var key = "telemetrySearchDetails", value = bar[key], hasListener, btn;
        var box = bar.textbox, set = (o, k = "value", v = "") => o[k] = v;
        var clear = () => setTimeout(() => set(box), 50, hasListener = box.popup.removeEventListener("popuphidden", clear, false));

        Object.defineProperty(bar, key, {
            configurable: true, enumerable: true, get: () => value, set(val) {
                val === null && !hasListener && setTimeout(() => {
                    if (box.popup.state != "open") set(box);
                    else hasListener = !box.popup.addEventListener("popuphidden", clear, false);
                }, 50);
                return value = val;
            }
        });
        addDestructor(() => delete bar[key] && set(bar, key, value));

        if (!(btn = document.getAnonymousElementByAttribute(bar, "anonid", "search-go-button"))) return;
        var hm = e => e.ctrlKey || e.shiftKey || e.altKey || e.metaKey;

        addEventListener("click", e =>
            !Services.prefs.getBoolPref("browser.search.openintab")
            || e.button || hm(e) || e.originalTarget != btn
            || e.stopPropagation(btn.dispatchEvent(new MouseEvent("click", {ctrlKey: true, metaKey: true})))
        , true, btn.parentNode);
        addEventListener("contextmenu", e => hm(e) || e.preventDefault(set(box)), false, btn);
    }
    for(var type of events) addEventListener(type, init, false, bar);
})(BrowserSearch.searchBar);


Очистить панель поиска прокруткой колёсиком мыши на панели поиска

Выделить код

Код:

(bar=> {
   if ( !bar ) return;
   bar.textbox.onwheel =()=> bar.textbox.value = '';
   addDestructor(()=> bar.textbox.onwheel = null);
})(BrowserSearch.searchBar);

Alex_one
// Очистить панель адреса или поиска прокруткой колёсиком мыши на панели
["urlbar", "searchbar"].forEach(el=> document.getElementById(el).onwheel=e=> e.target.value = "");

xrun1
Спасибо, понаблюдаю. Пока работает. :beer:

До 89 работала кнопка автоматической очистки панели поиска

скрытый текст
((bar, key) => {
    if (!bar) return;
    var value = bar[key], box = bar.textbox, set = (o, k = "value", v = "") => o[k] = v;
    var hasListener, clear = () => setTimeout(() => set(box), 50, hasListener = box.popup.removeEventListener("popuphidden", clear, false));
    Object.defineProperty(bar, key, {
        configurable: true, enumerable: true, get: () => value, set(val) {
            val === null && !hasListener && setTimeout(() => {
                if (box.popup.state != "open") set(box);
                else hasListener = !box.popup.addEventListener("popuphidden", clear, false);
            }, 50);
            return value = val;
        }
    });
    addDestructor(() => delete bar[key] && set(bar, key, value));
})(BrowserSearch.searchBar, "telemetrySearchDetails");
В 89 уже не работает. Можно ли исправить.