2

在 IE11 中,当访问诸如 www.yahoo.com 之类的站点时,多个线程将触发到 APP 中——并且这些线程中只有很小的一个子集可以与浏览器窗口相关联(通过查询服务提供商等)。创建选项卡时在 ::SetSite() 调用中传递。

这不适用于现代网站上的大多数线程(例如 www.evernote.com)

如何确定线程代表哪个 IE 选项卡 - 或者这是不可能的?

我很想知道有一些方法可以将这些线程与传递给 ::SetSite() (或类似的东西)的 pUnkSite 相匹配——但这似乎与我迄今为止所经历的 IE 模型不同。

谢谢。

4

1 回答 1

2

试试Switch/Continue技巧。您的应用程序会这样调用IInternetProtocolSink::Switch,例如Start

PROTOCOLDATA data = {0};
data.grfFlags = PD_FORCE_SWITCH;  // important
pProtocolSink->Switch(&data);

最终,客户端将转身在IInternetProtocol::Continue主 UI 线程上呼叫您。一旦进入主线程,类似的事情IServiceProvider::QueryService(IID_IWindowForBindingUI)应该可以工作,并帮助您连接回请求的浏览器和/或文档。

于 2015-03-01T15:00:30.057 回答