1

Я пытаюсь выполнить поиск с использованием поисковых систем в окне поисковой системы Firefox.Выполнение поиска с использованием установленных поисковых систем с помощью javascript

я могу получить доступ двигатели со следующим кодом

// quick Proof of Concept code 
const {Cc,Ci} = require("chrome"); 

var browserSearchService = Cc["@mozilla.org/browser/search-service;1"] 
         .getService(Ci.nsIBrowserSearchService); 

var test = browserSearchService.getEngines(); 
//I can query test.attribute for each engine 

Я не нашел никакого способа, чтобы выполнить поиск, используя поисковые системы, установленные с помощью JavaScript. Кто-нибудь знает, как я могу это достичь?

ответ

1

В этом примере я ищу открытое окно, открывающее результаты поиска на новой вкладке. но вам не нужно это делать. вы можете использовать XHR. если вам нужно сделать это, просто возьмите параметры submission, как показано ниже, и вместо того, чтобы подключить их к win.openLinkIn, затем подключите его к XHR.

Cu.import('resource://gre/modules/Services.jsm'); 
var win = Services.wm.getMostRecentWindow('navigator:browser'); 
if (!win) { 
    throw new Error('no win found of type "navigator:browser" is open'); 
} 

var engineName = 'NAME OF INSTALLED ENGINE YOU WANT TO SEARCH WITH HERE'; 
console.log('enigneName:', engineName) 

var engine = Services.search.getEngineByName(engineName) 
if (!engine) { 
    throw new Error('could not find engine with name of "' + engineName + '"'); 
} 
var searchText = 'i want to search this value'; //if you want currently filled in text of search bar do this: win.BrowserSearch.searchBar.value 
var submission = engine.getSubmission(searchText, null, 'searchbar'); 

var useNewTab = true; 
var inBg = false; //if use new tab do you want to open it in background or foreground? 

win.openLinkIn(submission.uri.spec, 
    useNewTab ? 'tab' : 'current', { 
     postData: submission.postData, 
     inBackground: inBg, 
     relatedToCurrent: true //set this to true, if you are opening in new tab AND want the tab to sit next to it, if you are opening in new tab and set this to false then the new tab will open at end of tab bar 
    }); 

, если вы хотите, чтобы получить список доступных имен поисковых систем, вы можете сделать это:

var engines = Services.search.getVisibleEngines(); 
var engineNames = []; 
for (var i=0; i<engines.length; i++) { 
    engineNames.push(engines[i].name); 
} 
console.log('engine names of the installed engines:', engineNames); 
+0

Спасибо вам Noitidart! Это именно то, что я искал. – hooray

+0

мое удовольствие :)! – Noitidart

+0

Извините, что беспокою вас снова Noitidart, но знаете ли вы, могу ли я получить значок поисковой системы? Я хочу использовать его в формате data.url. Я посмотрел в массив движков, и он перечисляет значки как null или показывает getIcons methonds с собственным кодом, и мои поиски до сих пор были бесплодны. Есть идеи ? – hooray

Смежные вопросы