XUL:多个窗口不会更新叠加状态

时间:2011-08-01 08:23:39

标签: windows firefox-addon overlay xul

我的叠加外观出现问题,这取决于加载项的当前状态。

我有一个菜单工具弹出项目,例如'设置可见'。选择后,它会显示例如“示例文本”作为“内容区域上下文菜单”弹出窗口中的菜单项。未选中时,隐藏“示例文本”。它在窗口中工作正常,但问题是当另一个窗口已经打开时。

让我们调用原始窗口,窗口A和新窗口,窗口B.当我从窗口A中选择“设置可见”时,“示例文本”显示在窗口A中,但是当我切换到窗口B时, “工具菜单”中的“设置可见”保持未选中状态,“示例文本”保持隐藏状态。我想在多个窗口中实现此功能,这样当我使用窗口进行更改时,其他窗口实例也将更新其状态。我该如何解决这个问题?

作为附加信息,当我在窗口A中选择“设置可见”并打开一个新窗口,比如窗口C时,更改会准确地反映在窗口C中,即从“工具”菜单中选择“设置可见”并且“示例文本”在Window C中可见。

1 个答案:

答案 0 :(得分:2)

每个叠加层仅在自己的窗口上运行。如果您希望更改影响所有叠加层,那么您需要一些将通知它们的中央实例。最基本的方法是在单击“设置可见”时更改首选项。您的所有叠加层都应注册listener for this preference,以便在更改此首选项后,他们可以采取必要的操作。

另一种方法是在你的扩展中有一个JavaScript code module(一个模块只加载一次)并在那里管理“Set Visible”按钮的状态。每个叠加层都需要加载模块并在那里注册其监听器功能。稍后单击该按钮时,应调用模块函数,该函数将调用所有已注册的侦听器函数。