2

我想添加一个新的搜索引擎,以显示在 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 addon-sdk 创建的无重启扩展中做类似的事情?我看到的一个问题是没有稳定的 API 来获取和设置“about:config”中列出的 Firefox 首选项。但即使我使用此处记录的不稳定首选项服务,我也无法通过扩展来更改默认搜索引擎。请帮忙!

4

1 回答 1

7

Firefox 中的搜索有两个您需要担心的部分。

首先是搜索输入

您实际上将使用相同的系统来设置搜索引擎,但您需要在 SDK 中加载 chrome 模块。

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');

URL 栏的下一步

更新:从 Firefox 23keyword.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');

祝你好运!

于 2013-05-14T15:53:37.343 回答