Firefox:以编程方式添加搜索引擎并立即使用

Firefox:以编程方式添加搜索引擎并立即使用,firefox,firefox-addon,search-engine,Firefox,Firefox Addon,Search Engine,我开发了一个Firefox插件,它与Firefox24完全不同 我的插件根据一些用户设置向搜索栏添加搜索引擎。要添加搜索引擎,我使用fromnsIBrowserSearchService 在Firefox23之前,该功能还选择了添加的引擎,因此用户可以立即使用它。在Firefox24中,此行为停止:正在添加引擎,但不再选择 然而,委员会: 。。。新发动机将立即自动使用 如何强制Firefox 24立即使用新引擎?一个小解决方法是在添加新引擎后直接更改默认搜索引擎的首选项: browser.sea

我开发了一个Firefox插件,它与Firefox24完全不同

我的插件根据一些用户设置向搜索栏添加搜索引擎。要添加搜索引擎,我使用from
nsIBrowserSearchService

在Firefox23之前,该功能还选择了添加的引擎,因此用户可以立即使用它。在Firefox24中,此行为停止:正在添加引擎,但不再选择

然而,委员会:

。。。新发动机将立即自动使用


如何强制Firefox 24立即使用新引擎?

一个小解决方法是在添加新引擎后直接更改默认搜索引擎的首选项:

browser.search.defaultenginename
此首选项采用搜索引擎的确切名称

此外,还有关于在中添加搜索引擎的更多信息:

功能启动(数据、原因){
firstRun=reason==ADDON\u安装;
//如果这是第一次运行,请重新选择搜索引擎
//或者我们被重新启用了。
选择search=firstRun | | reason==ADDON_ENABLE;
//仅在引擎不存在时添加引擎。
if(!Services.search.getEngineByName(ENGINE\u DETAILS.name)){
Services.search.addEngineWithDetails.apply(Services.search,
[“名称”、“iconURL”、“别名”、“描述”、“方法”、“url”].map(
功能(k)发动机(详细信息[k]))
}
让engine=Services.search.getEngineByName(engine\u DETAILS.name);
//如果发动机未隐藏且这是第一次运行,则移动
//将其移动到引擎列表中的第一个位置并选择它
如果(选择Search&&!engine.hidden){
Services.search.moveEngine(engine,0);
Services.search.currentEngine=引擎;
}
}

这是一个有趣的建议。但是,我在函数中添加了搜索引擎。我现在也试着按照你的建议改变偏好,但没有效果。但是,如果我将一些已经存在的引擎设置为默认引擎(例如“Bing”),则会产生影响。因此,在startup()过程中,可能还不知道添加的引擎。)@GeorgJaehnig。你尝试过添加搜索引擎吗?现在我找到了解决方案!问题是我使用了
addEngine()
。此函数首先通过web下载Opensearch XML文件,这需要几毫秒的时间。所以很明显,在接下来的JS代码行中还没有引擎。相反,我现在使用的是
addEngineWithDetails()
,它可以立即添加引擎。多亏了你的链接,菲利佩,我可以复制这种方法。@GeorgJaehnig。伟大的很乐意帮忙。我在我的答案中添加了这个方法,以便更容易找到。