1

我正在开发一个 Firefox 扩展,需要一些帮助。
我的扩展被覆盖并使用 XBL 绑定向用户界面添加新项目。
是否可以将此扩展转换为引导类型?

我正在尝试向查找栏添加一个按钮。
使用 XBL 覆盖查找栏界面。

从引导程序开始,我在 style.css 中包含“findbar{ -moz-binding:...}”规则,并在 startup() 上注册此表
(使用 nsIStyleSheetService.loadAndRegisterSheet())。
在这种情况下,我的按钮无需重新启动即可添加到栏中。

但是当我禁用或删除插件时,我需要重新启动浏览器以使按钮消失。
我尝试在 bootstrap.js 中的 shutdown() 上使用以下方法将其删除:

var fb=window.gFindBar.getElement("findbar-container")  
var but=window.gFindBar.getElement("the-button")  
fb.removeChild(but)  

但这并没有删除它。我调试了代码并找到并删除了所有元素(fb,但是),但它没有触及我拥有或打开的任何选项卡中的真正查找栏。

所以我试图取消注册将我的 XBL 绑定到查找栏的样式表。这次 findbar 只是没有在当前选项卡中打开。
但是在新标签中它打开并且没有按钮(更好一点......)。

我还发现 findbar 没有在打开的选项卡中打开,因为一个奇怪的错误:“this.browser is undefined”。
此错误指向 findbar.xml 行 533,其中代码尝试运行 _unpdateCaseSensitivity() 但无法获得“gFindBar._browser”属性。
也许是因为从浏览器启动时没有为原始 findbar 对象加载此属性(它被覆盖的 findbar 对象使用)...

所以这是我坚持的重点......

现在的问题是:
如何在不重新启动的情况下删除按钮并打开查找栏?

4

1 回答 1

1

从 Findbar Tweak 插件中,我提取了此方法以将新复选框添加到 findbar(并根据我的需要进行了更改):

var findbar=window.gFindBar
var container = findbar.getElement("findbar-container")
var button = $('<toolbarbutton>')
button.setAttribute('anonid', 'test-find-tabs')
button.setAttribute('label', 'Test')
button.setAttribute('type', 'checkbox')
button.addEventListener('command', test,false)
container.insertBefore(button, findbar.getElement('find-case-sensitive').nextSibling)

但为了我的最终目的,它需要一些额外的编辑。所以现在我将离开这个问题。也许以后我会想到一个明智的想法。因为当我们把注意力从问题上转移回来之后,一个好主意经常会浮现在脑海中……

于 2015-01-09T10:49:22.120 回答