Firefox扩展转换为使用XBL重新启动

时间:2015-01-06 17:50:33

标签: firefox-addon xbl

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

我正在尝试在查找栏中添加一个按钮 使用XBL覆盖findbar接口。

从bootstrap开始,我将“findbar {-moz-binding:...}”规则包含在style.css中,并在启动时注册此表单()
(使用nsIStyleSheetService.loadAndRegisterSheet()) 在这种情况下,我的按钮被添加到栏中而不重新启动。

但是当我禁用或删除插件时,我需要重新启动浏览器以使按钮消失 我尝试使用:

在bootstrap.js中的shutdown()上删除它
var fb=window.gFindBar.getElement("findbar-container")  
var but=window.gFindBar.getElement("the-button")  
fb.removeChild(but)  

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

所以我试图取消注册将我的XBL绑定到查找栏的样式表。这次查找栏没有在当前标签中打开。
但是在新标签中它打开而没有按钮(稍微好一些......)。

此外,我发现由于一个奇怪的错误,查找栏未在打开的标签中打开: “this.browser未定义”。
此错误指向findbar.xml第533行,其中代码尝试运行_unpdateCaseSensitivity()但它无法获得“gFindBar._browser”prorperty。 也许是因为这个属性没有从浏览器开始加载到原始的findbar对象(它被覆盖的findbar对象使用)...

所以这就是我坚持的观点......

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

1 个答案:

答案 0 :(得分:1)

在Findbar Tweak插件中,我提取了此方法,为查找栏添加了新的复选框(并根据我的需要进行了更改):

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)

但为了我的最终目的,它需要一些额外的编辑。所以现在我会留下这个问题。也许以后会有一个明智的想法。在我们从问题中改变焦点然后再回到它之后,经常会想到一个好主意...