什么是收听工具栏按钮初始化的正确方法(比如我想根据插件的当前更改图标)?
现在我只是在听window.load
,并通过检测工具栏按钮是否存在document.getElementById
。
对于用户工具栏自定义,我正在使用该aftercustomization
事件,以防工具栏按钮被删除然后由用户重新添加。
但是有没有更直接的方法呢?
什么是收听工具栏按钮初始化的正确方法(比如我想根据插件的当前更改图标)?
现在我只是在听window.load
,并通过检测工具栏按钮是否存在document.getElementById
。
对于用户工具栏自定义,我正在使用该aftercustomization
事件,以防工具栏按钮被删除然后由用户重新添加。
但是有没有更直接的方法呢?
有几种方法可以“修改”工具栏按钮,即使它隐藏在调色板中(用户尚未添加或删除它)。这是一个选择:
document.getElementById
无论如何,如果没有产生结果,您可以通过手动搜索调色板来获得对 DOM 节点的引用。无论如何,这适用于 browser.xul。一些代码(简化自我正在使用的代码,但经过一些清理后未经测试)。它用<toolbox>.palette
function findToolbarButtonAnyway(id) {
let tb = document.getElementById(id);
if (tb) {
return tb;
}
let palette = $("navigator-toolbox").palette;
for (let c = palette.firstChild; c; c = c.nextSibling) {
if (c.id == id) {
return c;
}
}
return null; // not found
}
您可以改为使用<broadcaster>
(或<command>
) “广播”一组属性,所有其他节点观察广播者将采用。例如,您可以设置属性并使用相应的 CSS 规则来选择适当的图标或其他内容。这个解决方案会更干净,但需要一些时间来弄清楚。