2013-05-08 54 views
2

我想添加一个新的搜索引擎,显示在firefox nav-bar中显示的搜索栏的下拉菜单中。当用户通过我的分机的偏好设置它时,将其设置为默认的searchEngine。使用SDK通过Firefox重启扩展添加新的搜索引擎

对于非无需重启的扩展,通过XUL,我们的组件,以做这样的事情:

Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService).addEngineWithDetails(...); //Adds a new search engine 

Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService).currentEngine = ...; //sets the current search engine value. 

我怎样才能做到在无需重启的扩展类似的东西,使用Firefox的插件 - SDK创建的?我看到的一个问题是没有稳定的API来获取并设置'about:config'中列出的Firefox偏好设置。但即使我使用了不稳定的首选项服务here,我也无法通过扩展来执行默认搜索引擎更改。请帮助!

回答

7

在Firefox中搜索有两件你必须要担心。

首先用于搜索输入

实际上,你要使用相同的系统设置的搜索引擎,但你需要加载铬模块中的SDK。

var { Cc, Ci } = require("chrome"); 
var SearchService = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService); 

// Add your engine to the list of engines in the drop down 
SearchService.addEngineWithDetails('yoursearch', 'icon', 'yoursearchalias', 'your search description', 'get', 'http://stackoverflow.com/search?q={searchTerms}'); 

// Set your engine as the currentEngine so it's the default engine for the search input 
SearchService.currentEngine = SearchService.getEngineByName('yoursearch'); 

接下来的地址栏

更新:火狐23的keyword.URL偏好没有效果,上面的代码将改变在这两个领域的默认行为。

如果您想更改用于URL栏的搜索引擎,您必须使用用户首选项。

var preferences = require('sdk/preferences/service'); 

// the 'search keyword' will be appended to the url you provide so strip out the 
// {searchTerms} OpenSearch identifier 
preferences.set('keyword.URL', 'http://stackoverflow.com/search?q='); 

// When you want to set things back just reset the value 
preferences.reset('keyword.URL'); 

祝你好运!

+1

我不认为你需要的部分网址吧了。我为搜索栏设置了提供者,并且url栏搜索到相同的地方。 也许这是最近的一次变化。 – Garrett 2013-11-05 21:08:03

+2

是的,自Firefox 23开始,'keyword.URL'首选项没有效果。您只能通过SearchService调整默认提供者。更新答案... – 2013-11-28 01:36:00