【问题标题】:Get Window Handle of Chrome Tab from Within Extension?从扩展中获取 Chrome 选项卡的窗口句柄?
【发布时间】:2012-07-13 10:26:59
【问题描述】:

我编写了一个 Chrome 扩展程序(也带有 NPAPI),它允许我的应用程序和 Chrome 相互通信。这一切都很好。

我现在要做的是能够将 Chrome 窗口的 HWND 绑定到特定的窗口 ID 和选项卡 ID。

当我在 Chrome 中(通过插件)时,我有选项卡 ID 和窗口 ID,我可以基于它执行大多数操作。

当我在 Chrome 之外(通过我的应用程序)时,我可以看到窗口结构并获取各个选项卡的 HWND。

有什么方法可以将它们可靠地绑定在一起,以便我的应用程序可以告诉 Chrome 获取有关/来自特定标签的信息?

【问题讨论】:

  • 您需要什么样的信息?
  • 这种方法很脆弱,因为它取决于浏览器的实现细节。你到底想用这个实现什么?
  • 对于短期场景,我需要能够说当我的应用遇到 Chrome 窗口时,它可以以某种方式使用 HWND 向插件询问有关该特定窗口/选项卡的信息。没有办法(我可以看到)从插件外部获取 TabID/WindowID ......也没有办法在插件内部获取 HWND。所以我基本上只是想弄清楚如何将这些信息联系在一起。
  • 请记住,插件已售罄。我不知道扩展是否有更简单的方法,但是如果您将插件注入页面,您可能能够检索父进程或其 id。或者,您可以尝试通过插件窗口或绘图上下文访问父级。请记住,所有这些都取决于 Chrome 的多进程架构的细节(我没有研究过),并且可能会在未来的版本中中断。
  • s/out of press/out of process/

标签: google-chrome google-chrome-extension npapi window-handles


【解决方案1】:

如果您有 Spy++,您会看到站点标题与选项卡窗口标题保持一致。你绝对应该使用它。

要消除标题冲突,只需从扩展名中调用 chrome.tabs.query()chrome.tabs.update() 即可保存、更改和恢复选项卡的标题。然后使用GetCurrentProcess()EnumWindows()/WindowEnumProc() 获取子窗口层次结构并匹配您的自定义标题。您必须将其传递给 EnumWindowsProc 回调函数。

【讨论】:

  • 我不知道当时怎么样,但现在你只能得到一个选定标签的标题,而不是全部。
猜你喜欢
  • 1970-01-01
  • 2013-04-17
  • 2012-01-09
  • 2017-07-11
  • 1970-01-01
  • 2011-08-07
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多