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