Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№125-12-2016 22:52:12

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 50.0

URLBar Search

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

Выделить код

Код:

/*CODE*/
/* -------------------------------------------------------------
     URLBar Search
     by LouCypher (aka Zoolcar9)

     This button will search anything you type in location bar
     For Firefox 2.0 or above only
   ------------------------------------------------------------- */

this.search(this, event);
Выделить код

Код:

/*Initialization Code*/

if (!("@mozilla.org/browser/search-service;1" in Components.classes)) {
  this.disabled = true;
  return;
}

function searchService() {
  return Components.classes["@mozilla.org/browser/search-service;1"]
          .getService(Components.interfaces.nsIBrowserSearchService);
}

function getInput() {
  var ss = searchService();
  return prompt(ss.currentEngine.name, "", "Search");
}

this.search = function(aNode, aEvent) {
  var openInTab, loadInBackground;
  try {
    openInTab = gPrefService.getBoolPref("browser.search.openintab");
    loadInBackground = gPrefService.getBoolPref("browser.search.openintab.loadInBackground")
  } catch(ex) {
  }

  var query = "";
  if (!gURLBar) {
    query = getInput();
  }
  else if (gURLBar && gURLBar.focused) {
    query = gURLBar.value;
  }
  if (query == null) return;

  var url = aNode.engine.getSubmission(query, null).uri.spec;

  if (openInTab) {
    var newTab = gBrowser.addTab(url);
    if (!loadInBackground) gBrowser.selectedTab = newTab;
  } else
    openUILink(url, aEvent, false, true);
}

this.checkForMiddleClick = function(aNode, aEvent) {
  closeMenus(aEvent.target);
  if (aEvent.button == 1) {
    var fn = new Function("event", "this.search(this, event)");
    fn.call(aNode, aEvent);
    if (gURLBar) handleURLBarRevert(); //reset the URL bar
  }
}

this.selectEngine = function(aNode, aEvent) {
  var engine = aEvent.target.engine;
  var ss = searchService();
  ss.currentEngine = ss.getEngineByName(engine.name);
  aNode.engine = engine;
  aNode.tooltipText = aNode.engine.name;
  aNode.image = aEvent.target.getAttribute("src");
}

this.populateMenu = function(aNode) {
  var ss = searchService();
  var engines = ss.getVisibleEngines({ });
  const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

  while(aNode.firstChild && aNode.firstChild.localName != "menuseparator") {
    aNode.removeChild(aNode.firstChild);
  }

  for (var i = engines.length - 1; i >= 0; i--) {
    var mi = document.createElementNS(kXULNS, "menuitem");
    mi.id = "cb-search-" + engines[i].name;
    mi.className = "menuitem-iconic searchbar-engine-menuitem";
    mi.setAttribute("label", engines[i].name);
    if (engines[i].iconURI)
      mi.setAttribute("src", engines[i].iconURI.spec);
    mi.engine = engines[i];
    if (mi.engine == ss.currentEngine)
      mi.style.fontWeight = "bold";
    mi.setAttribute("onclick",
      "parentNode.parentNode.selectEngine(parentNode.parentNode, event)");
    aNode.insertBefore(mi, aNode.firstChild);
  }
}

this.currentEngine = searchService().currentEngine;

var ss = searchService();
this.engine = ss.currentEngine;
this.tooltipText = this.engine.name;
this.image = this.engine.iconURI.spec;

var mp = this.appendChild(document.createElement("menupopup"));
mp.setAttribute("onpopupshowing", "parentNode.populateMenu(this)");
mp.setAttribute("oncommand", "event.stopPropagation()");

var managerSeparator = mp.appendChild(document.createElement("menuseparator"));
managerSeparator.id = "cb-searchbutton-separator"
var managerItem = mp.appendChild(document.createElement("menuitem"));
managerItem.setAttribute("label", "Управление списком поисковых систем");
managerItem.setAttribute("oncommand",
  "openDialog('chrome://browser/content/search/engineManager.xul', " +
  "'engineManager', 'chrome, dialog=no')");

this.type = "menu";
this.setAttribute("onclick", "this.checkForMiddleClick(this, event)");

/* -------------------------------------------------------------
 bunda1
 поиск по нажатию на иконку выбранного поисковика
 https://forum.mozilla-russia.org/viewtopic.php?pid=641679#p641679
 ------------------------------------------------------------- */
function getEngineModified(subject, topic, data) {
   if ( data == "engine-current" && gURLBar.value !== '' ) {
        var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService); 
        var submission = ss.currentEngine.getSubmission( gURLBar.value, null );
        gBrowser.loadOneTab( submission.uri.spec, null, null, submission.postData, false, false );
        }
};
Services.obs.addObserver( getEngineModified, "browser-search-engine-modified", false ); 
addDestructor(function() { Services.obs.removeObserver( getEngineModified, "browser-search-engine-modified", false ) });


FF 50.1 не работает "Управление списком поисковых систем". Т.е. оно не открывается. Возможно ли исправить?
И смежный вопрос: где теперь находятся файлы поисковых плагинов, дефолтные и добавленные пользователем?

Отредактировано lokiju (25-12-2016 22:55:59)

Отсутствует

 

№227-12-2016 20:31:14

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: URLBar Search

lokiju пишет

FF 50.1 не работает "Управление списком поисковых систем". Т.е. оно не открывается. Возможно ли исправить?

Я сейчас проверил "Управление списком поисковых систем" на FF 50.1.и меню с поисковиками открывается даже при включенном e10.

Отсутствует

 

№328-12-2016 11:41:21

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 42.0

Re: URLBar Search

Снимки сделаны в FF42

нажатие на пункт "Управление списком поисковых систем" в меню кнопки
URLBarSearch.1482914014.png

должно вызвать окно"Управление списком поисковых систем"
Upravleniespiskompoiskovyhsistem.1482914145.png

В FF 50.1 окно"Управление списком поисковых систем" не появляется.

Отсутствует

 

№428-12-2016 12:55:24

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: URLBar Search

lokiju пишет

В FF 50.1 окно"Управление списком поисковых систем" не появляется.

Да, не появляется. Я ошибся, извиняюсь. На FF 50.1 уже нет "Управление списком поисковых систем", могу предложить только такой вариант:

Выделить код

Код:

/*Initialization Code*/

if (!("@mozilla.org/browser/search-service;1" in Components.classes)) {
  this.disabled = true;
  return;
}

function searchService() {
  return Components.classes["@mozilla.org/browser/search-service;1"]
          .getService(Components.interfaces.nsIBrowserSearchService);
}

function getInput() {
  var ss = searchService();
  return prompt(ss.currentEngine.name, "", "Search");
}

this.search = function(aNode, aEvent) {
  var openInTab, loadInBackground;
  try {
    openInTab = gPrefService.getBoolPref("browser.search.openintab");
    loadInBackground = gPrefService.getBoolPref("browser.search.openintab.loadInBackground")
  } catch(ex) {
  }

  var query = "";
  if (!gURLBar) {
    query = getInput();
  }
  else if (gURLBar && gURLBar.focused) {
    query = gURLBar.value;
  }
  if (query == null) return;

  var url = aNode.engine.getSubmission(query, null).uri.spec;

  if (openInTab) {
    var newTab = gBrowser.addTab(url);
    if (!loadInBackground) gBrowser.selectedTab = newTab;
  } else
    openUILink(url, aEvent, false, true);
}

this.checkForMiddleClick = function(aNode, aEvent) {
  closeMenus(aEvent.target);
  if (aEvent.button == 1) {
    var fn = new Function("event", "this.search(this, event)");
    fn.call(aNode, aEvent);
    if (gURLBar) handleURLBarRevert(); //reset the URL bar
  }
}

this.selectEngine = function(aNode, aEvent) {
  var engine = aEvent.target.engine;
  var ss = searchService();
  ss.currentEngine = ss.getEngineByName(engine.name);
  aNode.engine = engine;
  aNode.tooltipText = aNode.engine.name;
  aNode.image = aEvent.target.getAttribute("src");
}

this.populateMenu = function(aNode) {
  var ss = searchService();
  var engines = ss.getVisibleEngines({ });
  const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

  while(aNode.firstChild && aNode.firstChild.localName != "menuseparator") {
    aNode.removeChild(aNode.firstChild);
  }

  for (var i = engines.length - 1; i >= 0; i--) {
    var mi = document.createElementNS(kXULNS, "menuitem");
    mi.id = "cb-search-" + engines[i].name;
    mi.className = "menuitem-iconic searchbar-engine-menuitem";
    mi.setAttribute("label", engines[i].name);
    if (engines[i].iconURI)
      mi.setAttribute("src", engines[i].iconURI.spec);
    mi.engine = engines[i];
    if (mi.engine == ss.currentEngine)
      mi.style.fontWeight = "bold";
    mi.setAttribute("onclick",
      "parentNode.parentNode.selectEngine(parentNode.parentNode, event)");
    aNode.insertBefore(mi, aNode.firstChild);
  }
}

this.currentEngine = searchService().currentEngine;

var ss = searchService();
this.engine = ss.currentEngine;
this.tooltipText = this.engine.name;
this.image = this.engine.iconURI.spec;

var mp = this.appendChild(document.createElement("menupopup"));
mp.setAttribute("onpopupshowing", "parentNode.populateMenu(this)");
mp.setAttribute("oncommand", "event.stopPropagation()");

var managerSeparator = mp.appendChild(document.createElement("menuseparator"));
managerSeparator.id = "cb-searchbutton-separator"
var managerItem = mp.appendChild(document.createElement("menuitem"));
managerItem.setAttribute("label", "Изменить настройки поиска");
managerItem.onclick = function() gBrowser.selectedTab = gBrowser.addTab("about:preferences#search");

this.type = "menu";
this.setAttribute("onclick", "this.checkForMiddleClick(this, event)");

/* -------------------------------------------------------------
 bunda1
 поиск по нажатию на иконку выбранного поисковика
 https://forum.mozilla-russia.org/viewtopic.php?pid=641679#p641679
 ------------------------------------------------------------- */
function getEngineModified(subject, topic, data) {
   if ( data == "engine-current" && gURLBar.value !== '' ) {
        var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService); 
        var submission = ss.currentEngine.getSubmission( gURLBar.value, null );
        gBrowser.loadOneTab( submission.uri.spec, null, null, submission.postData, false, false );
        }
};
Services.obs.addObserver( getEngineModified, "browser-search-engine-modified", false ); 
addDestructor(function() { Services.obs.removeObserver( getEngineModified, "browser-search-engine-modified", false ) });

Отсутствует

 

№528-12-2016 13:05:14

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 42.0

Re: URLBar Search

bunda1
спасибо. А с этим  подскажите

где теперь находятся файлы поисковых плагинов, дефолтные и добавленные пользователем?

Раньше достаточно было в профиль скопировать папку searchplugins и перезапустить браузер чтобы ранее установленные на другом профиле поисковики заработали. На FF50.1 поисковики из папки searchplugins не подхватываются.

Отсутствует

 

№628-12-2016 13:47:38

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: URLBar Search

Вроде как файлы поисковых плагинов теперь находится в omni.ja, вот тут можно почитать: Firefox 40: "searchplugins" Folder | Форум поддержки Firefox | Поддержка Mozilla

Отсутствует

 

№712-01-2017 11:14:02

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 42.0

Re: URLBar Search

bunda1, с наступившими праздниками. Спасибо, что напомнили использовать поиск по форуму. Нашёл - что надо.
Невозможно добавить свой поисковый плагин. | Форум Mozilla Россия

Отредактировано lokiju (12-01-2017 11:15:39)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]