Como obter o URL para o mecanismo de busca atual no Firefox?

0

Para obter o nome do mecanismo de pesquisa atual, basta ler o browser.search.defaultenginename.

No entanto, para obter o URL para o mecanismo de pesquisa (por exemplo, link ), não faço ideia.

keyword.url foi usado uma vez, mas não está mais disponível.

Eu gostaria de usar JavaScript para obter o URL.

    
por Smile4ever 20.08.2015 / 15:36

1 resposta

0

Na verdade, é possível obter o URL do mecanismo de pesquisa atual usando o serviço de pesquisa do navegador (BSS).

Por favor, note que você precisa fornecer termos de pesquisa para que isso funcione. Um único espaço não funcionará (você sempre pode retirar os parâmetros de pesquisa novamente depois de =)

Este código foi testado como código addon em 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);

    }
}
    
por 14.02.2016 / 16:56