Как получить URL для текущей поисковой системы в Firefox?

577
Smile4ever

Чтобы получить имя текущей поисковой системы, достаточно прочитать browser.search.defaultenginename.

Однако получить URL для поисковой системы (например, https://duckduckgo.com/?q= ) я понятия не имею.

Когда-то использовался keyword.url, но он больше не доступен.

Я хотел бы использовать JavaScript, чтобы получить URL.

0
Я полагаю, вы можете использовать [`browser.search.defaulturl`] (http://kb.mozillazine.org/Firefox_:_FAQs_:_About:config_Entries#Browser.). MC10 8 лет назад 0
browser.search.defaulturl недоступен в Firefox 38 или любой последней версии Smile4ever 8 лет назад 0
Я думаю, что страница должна быть обновлена ​​тогда. Я не смог найти запись `about: config` с URL. Следующая лучшая вещь, вероятно, будет получить `browser.search.defaultenginename` и сопоставить его с URL в коде. MC10 8 лет назад 0
Это была моя мысль тоже. Но таким образом, мне нужно было бы реализовать все возможные поисковые системы. Конечно, я могу реализовать самые популярные из них только для сокращения работы. Smile4ever 8 лет назад 0

1 ответ на вопрос

0
Smile4ever

In fact, it is possible to get the URL of the current search engine using the Browser Search Service (BSS).

Please note that you need to provide search terms in order for this to work. A single space won't work (you can always strip off the search parameters again after =)

This code was tested as addon code in Pale Moon.

 var browserengine = "google"; // if all else fails try{ // does work for all search engines, except the default one browserengine = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch).getCharPref("browser.search.defaultenginename"); }catch(e){ alert("You don't seem to have search engines installed. Defaulting to Google."); } // if the selected engine is the default engine, get the value from the // default preferences branch in order to avoid this value: // chrome://browser-region/locale/region-properties if(browserengine.indexOf("chrome://") > -1){ try{ var branch = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch).getBranch("browser.search."); var value = branch.getComplexValue("defaultenginename",Components.interfaces.nsIPrefLocalizedString).data; browserengine = value; }catch(e){ // this should not happen alert("Failed to retrieve the default search engine."); } } browserengine = browserengine.toLowerCase(); // to compare with lowercase values // The magic begins here var bss = Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService); var engines = bss.getVisibleEngines({}); var i = 0; // get current search engine URL // mimic browser.search.defaulturl based on browser.search.defaultenginename for(i = 0; i < engines.length; i++){ if(engines[i].name.toLowerCase() == browserengine){ // we don't have the URL of browser.search.defaultenginename, but we can get it now! alert("The URL to the engine is " + engines[i].getSubmission("search terms here (required)", null).uri.spec); } }