2013-05-08 58 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

相關問題