我正在尝试从Firefox插件/扩展程序中找到如何获取Firefox的X11 WId(窗口ID)。
已检出nsIWindowMediator
,nsIXULBrowserWindow
,nsIXULWindow
但尚未找到。
我宁愿不按照通常的方式(ab)使用Xlib在窗口树中搜索与当前窗口的属性匹配的内容,例如标题,类型等。
答案 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 ++编写)来实际检索该属性。不知道这是否是一个可以接受的解决方案。唯一的选择应该是搜索窗口树。