Firefox addon 使用SDK通过firefox无重启扩展添加新的搜索引擎

Firefox addon 使用SDK通过firefox无重启扩展添加新的搜索引擎,firefox-addon,firefox-addon-sdk,Firefox Addon,Firefox Addon Sdk,我想添加一个新的搜索引擎,显示在firefox导航栏中的搜索栏下拉列表中。当用户通过我的扩展的首选项进行设置时,将其设置为默认搜索引擎 var preferences = require('sdk/preferences/service'); // the 'search keyword' will be appended to the url you provide so strip out the // {searchTerms} OpenSearch identifier prefere

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

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');
对于非无重启扩展,通过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首选项。但即使我使用不稳定的首选项服务,我也无法通过扩展来更改默认搜索引擎。救命啊

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 23开始,
关键字.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');

祝你好运

我认为你不再需要url栏的部分了。我为搜索栏设置了提供者,url栏搜索到同一个位置。也许这是最近的变化。是的,从Firefox23开始,
关键字.URL
首选项没有效果。您只能通过SearchService调整默认提供程序。正在更新答案。。。