在X11下获取Firefox的窗口ID(WId)

时间:2012-06-15 20:40:01

标签: firefox firefox-addon gtk x11

我正在尝试从Firefox插件/扩展程序中找到如何获取Firefox的X11 WId(窗口ID)。

已检出nsIWindowMediatornsIXULBrowserWindownsIXULWindow但尚未找到。

我宁愿不按照通常的方式(ab)使用Xlib在窗口树中搜索与当前窗口的属性匹配的内容,例如标题,类型等。

1 个答案:

答案 0 :(得分:0)

我认为唯一可以获得它的地方是nsIEmbeddingSiteWindow.siteWindow(Linux上的类型为GtkWidget*,应该可以从中获取窗口ID)。获取顶级窗口的nsIEmbeddingSiteWindow实例相对简单:

Components.utils.import("resource://gre/modules/Services.jsm");

var embedding = Services.ww.getChromeForWindow(window)
                  .QueryInterface(Components.interfaces.nsIEmbeddingSiteWindow);

问题是siteWindow属性标有[noscript]注释器 - 无法从JavaScript访问。所以我不得不使用二进制XPCOM组件(用C ++编写)来实际检索该属性。不知道这是否是一个可以接受的解决方案。唯一的选择应该是搜索窗口树。