【问题标题】:In IE, how can I find the screen coordinates of an HTML element including elements within frames?在 IE 中,如何找到包含框架内元素的 HTML 元素的屏幕坐标?
【发布时间】:2020-01-07 06:56:43
【问题描述】:

我正在开发一个browser automation framework,在其他浏览器中驱动IE。因此,我需要获取用户想要与之交互的元素的屏幕坐标。我们用来获取这些坐标的主要方法是使用 getBoundingClientRect()。问题是在 IE 中,这些坐标总是相对于封闭文档的左上角给出。如果元素在 frame/iframe 中,这可能不是元素相对于浏览器窗口左上角的屏幕坐标。

我通过 C++ 使用 COM 来驱动浏览器,尽管我能够通过该 C++ 驱动程序层执行 JavaScript。我也在将它驱动到进程外,这意味着我没有在浏览器帮助对象(BHO 或 IE 插件)中执行。迁移到 BHO 不是该项目的选择。除了使用 IE 6、7、8 和 9 之外,我不必担心我能找到的任何方法的跨浏览器兼容性。使用 jQuery 或类似的东西对我来说确实不是一个选项,但如果有一个使用 JavaScript 库的解决方案,我可能能够逆向工程一个可以在项目中使用的解决方案。

以下是我迄今为止尝试过的一些事情:

  • 在 JavaScript 中使用 element.ownerDocument.parentWindow.frameElement。如果包含文档和框架内的文档位于不同的域中,这将失败。
  • 在包含框架内元素的窗口上使用 IHTMLWindow4::get_frameElement()。这应该是上面 JavaScript 方法的 C++ 等价物;但是,当我尝试使用它时,它会返回 E_NOINTERFACE。
  • 使用 IDisplayServices::TransformPoint() 将元素左上角的坐标转换为不同的参考系。这似乎不能跨进程工作。

当目标元素可能存在于框架或 iframe 中时,如何查找或计算 HTML 元素相对于浏览器窗口左上角的屏幕坐标?

【问题讨论】:

  • 即使没有框架或 iframe,您是如何做到的。您是如何将“元素相对于浏览器窗口左上角的坐标”转换为“元素相对于屏幕左上角的坐标”的?
  • 接受的答案(这是我的)描述了正确的方法。此外,答案还有一个指向演示解决方案的源文件 (C++) 的链接。

标签: c++ internet-explorer com


【解决方案1】:

此项目的正确方法是获取包含 frame 或 iframe 元素的文档,并遍历该父文档中的一组框架,直到找到合适的框架。在那里,您可以使用 document.parentWindow.frameElement() 获取 or 元素,并可以从那里计算包含元素的位置。解决问题的实际代码可以在 this link 的 Element::AppendFrameDetails() 中找到。

【讨论】:

  • 嗨。我面临同样的问题(获取 iframe 中元素的屏幕坐标,进程外,具有 IHTMLDocument2 界面)。您的答案中的链接不再可用。你能用一些解释编辑你的答案吗?我被 IHTMLWindow4::get_frameElement() 的 E_NOINTERFACE 卡住了。你使用 JavaScript 吗?
  • @manuell 我已更新链接以指向实现细节的当前位置。是的,正如a comment 在该方法中指出的那样,有些地方必须使用 JavaScript。
【解决方案2】:

您应该能够使用 IDisplayServices::TransformPoint。我记得你不能编组这个接口(我不知道为什么)......你是如何跨进程使用它的?

【讨论】:

  • @jeffmaphone 我们根据 IE 和操作系统的版本使用 CreateProcess() 或 IELaunchURL() 启动浏览器,然后使用带有 WM_HTML_GETOBJECT 的 SendMesssage() 来获取对 IHTMLDocument2 对象的引用。从那里,我们可以获得父窗口,并且可以使用 QueryService 走到 IWebBrowser2 对象。你可以在this link看到所有这些代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 2013-03-20
  • 1970-01-01
  • 2021-04-23
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多