2012-09-26 106 views
3

我正在开发Firefox的Addon SDK(v1.10)上的扩展。从标签获取窗口对象

我的扩展程序有一个工具栏按钮,根据活动选项卡的内容将小徽章更新到其左侧。

问题

当存在多个窗口打开时,得到的ToolBarButton更新到有源标签的值,无论它是否是相同的窗口上。这意味着非活动窗口的toolbarbutton正在更新来自不同窗口的数据。

有权访问数据来自哪里的标签对象,有没有一种方法来识别标签附加到的窗口对象?

这种方法与here描述的方法相反。

回答

3

查看SDK源代码(即packages/api-utils/lib/tabs/tab.js),tab对象实际上具有window属性。我测试了它和这个作品确实:

console.log(require("tabs").activeTab.window.title); 

不知道为什么,这个属性是没有记录,可能是一个文档错误。

1

这是活动窗口吗?你可以得到一个窗口对象使用

windows.browserWindows.activeWindow 

文档的当前活动窗口:https://addons.mozilla.org/en-US/developers/docs/sdk/latest/packages/addon-kit/windows.html#browserWindows

窗口对象有目前在它打开的选项卡的列表:

https://addons.mozilla.org/en-US/developers/docs/sdk/latest/packages/addon-kit/windows.html#tabs

如果您需要在不是当前活动选项卡或窗口的窗口中查找选项卡,这可能更难以确定。你能提供更多关于你实际想要做什么的细节吗?

+0

我的扩展在每个打开的选项卡上执行计算,并通过在我创建的工具栏按钮上显示带有数字的小徽章来显示结果。这些计算是动态的,并且在任何时间点都会发生(不仅在选项卡处于活动状态或加载状态时)。到目前为止,我执行计算并在制表符激活时更新工具栏按钮上的徽章,以便始终向正在使用的制表位显示相应的徽章。当两个或更多的窗口同时打开时,问题就出现了。我怎样才能确定我应该在哪个窗口更新按钮的徽章? – josesigna

+1

使用activeWindow是不可能的,因为我的扩展的计算的动态性质:我可以使用不同的窗口,而我的扩展是在另一个打开的窗口上记录信息。 – josesigna