使用SDK通过firefox restartless扩展添加新的搜索引擎

use*_*043 2 firefox-addon firefox-addon-sdk

我想添加一个新的搜索引擎,显示在firefox导航栏中显示的搜索栏的下拉列表中.当用户通过我的扩展程序的首选项设置它时,将其设置为默认的searchEngine.

对于非重新启动的扩展,通过XUL,我们使用Components来执行以下操作:

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.
Run Code Online (Sandbox Code Playgroud)

如何在使用Firefox addon-sdk创建的无重启扩展中执行类似的操作?我看到的一个问题是没有稳定的API来获取和设置在'about:config'中列出的firefox首选项.但即使我使用此处记录的不稳定偏好服务,我也无法通过扩展来进行默认搜索引擎更改.请帮忙!

Bry*_*ark 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');
Run Code Online (Sandbox Code Playgroud)

接下来是URL栏

更新:从Firefox 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');
Run Code Online (Sandbox Code Playgroud)

祝好运!

  • 是的,从Firefox 23开始,`keyword.URL`首选项没有效果.您只能通过SearchService调整默认提供程序.更新答案...... (2认同)