>我试图找出如何从Firefox插件/扩展中获取Firefox的X11 WId(窗口ID)。
nsIWindowMediator
、nsIXULBrowserWindow
、nsIXULWindow
签出,但还没有找到。
我宁愿不采用通常的方式(ab)使用Xlib在窗口树中搜索与当前窗口的属性(如标题,类型等)匹配的窗口树。
我认为唯一可以得到它的地方是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++编写)来实际检索该属性。不知道这对您来说是否是可接受的解决方案。唯一的选择应该是搜索窗口树。