【问题标题】:New Tab in Existing Frame of IEIE现有框架中的新标签
【发布时间】:2013-11-17 15:06:18
【问题描述】:

问题 - 想要在现有的 IE 框架内以正确的“完整性级别”启动一个新的 IE 选项卡。 就像 IELaunchURL() 所做的一样,它为我们提供了具有正确完整性级别的新 IE 实例。

我现在在做什么? 检测现有 IEFrame 的 IWebBrowser2,然后使用 URL 调用 IWebBrowser2->Navigate2()。为新启动的标签获取 IWebBrowser2 感到震惊

【问题讨论】:

  • 你能更准确一点吗?要解决什么问题?
  • IELaunchURL() 每次我调用它时,MS 都会在新框架或新窗口中打开给定的 URL。我想在 IE 中将 URL 作为选项卡打开(不在新窗口中)。
  • 换句话说,我们在 IE 框架内运行了一个选项卡,我想让 IWebBrowser2 ptr 到这个选项卡,我只知道它是选项卡的 URL。
  • 什么?您的问题是“如何获得 IWebBroser2?” ???您的问题措辞非常糟糕。
  • 编程语言是什么?

标签: internet-explorer com automation


【解决方案1】:

在 IWebBrowser2::Navigate2 方法的参数“Flags”中使用 navOpenInNewTab (0x0800)。

注意,您必须传递类型为 VT_I4 的 Variant。

文档:Navigate2 method

如果你想为新的 Tab 获取 IWebBrowser2 接口指针,只需像获取第一个那样做。可用的方法很多。

如果您只是通过某种枚举获取所有 IWebBrowser2,则可以通过检索 URL (IHTMLDocument2::get_URL) 来检测新的 IWebBrowser2

如果 URL 条件不够,您可以缓存托管 IWebBroser2 对象的窗口列表(IWebBrowser2 ==> IServiceProvider 的 QueryInterface,IServiceProvider ==> IOleWindow 的 QueryService,IOleWindow ==> GetWindow)

这些窗口有一个“TabWindowClass”(使用 Internet Explorer 9...您的里程可能会有所不同)。如果您构建一个新的 IWebBrowser2 列表,由新选项卡窗口托管的列表是新选项卡:-)

【讨论】:

  • 非常感谢 :) .. 我将实施几种方法,包括您在此处建议的方法 .. 我想分享一些观察结果并回复我的任何疑问。
  • 由于数据量很大,添加了上面的链接..请告诉我您的意见
  • // 将标题与预期标题进行比较 上面的行可以替换为 IWebBrowser2->get_HWND(&hwnd) & GetWindowText(hwnd) - 这会给我 IEFram 窗口 - 抱歉
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
相关资源
最近更新 更多