你不能在外部使用 C++/XPCOM 和 Firefox,就像你使用 COM 和 IE 一样,你只能在扩展的二进制组件中使用 C++/XPCOM。 因此,如果不编写扩展,您将无法做到这一点,此时更容易监听来自 JS 的选项卡事件并通知您的二进制组件。
请注意,在 FF 中支持二进制组件是 PITA,所以我不建议您在没有充分理由的情况下走这条路。
但是,一旦您拥有扩展和二进制组件,从选项卡获取 HWND 的方法就是这样(希望它仍然有效,我们停止支持 FF 许多版本):
static HWND GetWndHandle(nsIXULWindow * window) {
HWND hwnd = NULL;
nsCOMPtr<nsIDocShell> docshell;
nsresult res = window->GetDocShell(getter_AddRefs(docshell));
if(NS_SUCCEEDED(res)) {
nsCOMPtr<nsIBaseWindow> basewnd(do_QueryInterface(docshell));
if(basewnd) {
res = basewnd->GetParentNativeWindow((nativeWindow*)&hwnd);
if(NS_FAILED(res)) hwnd = NULL;
}
}
return hwnd;
}
有了这个和来自 JS 的通知,您的二进制组件可以提供查找以通过 HWND 查找选项卡并使用它进行操作。