在IE11中,当访问www.yahoo.com等网站时,多个线程将启动应用程序,并且这些线程中只有很小的一个子集可以与创建选项卡时在::SetSite()调用中传递的浏览器窗口相关联(通过查询服务提供商等)。
这不适用于现代网站上的大多数线程(例如www.evernote.com)
我如何才能弄清楚线程代表哪个IE选项卡执行操作?或者这是不可能的吗?
我很想知道有一些方法可以将这些线程与传递到::SetSite()中的pUnkSite(或类似的东西)相匹配,但这似乎与我迄今为止所经历的IE模型不同。
谢谢。
试试Switch
/Continue
的把戏。您的应用程序会这样调用IInternetProtocolSink::Switch
,例如在Start
:中
PROTOCOLDATA data = {0};
data.grfFlags = PD_FORCE_SWITCH; // important
pProtocolSink->Switch(&data);
最终,客户端将在主UI线程上对您调用IInternetProtocol::Continue
。一旦进入主线程,像IServiceProvider::QueryService(IID_IWindowForBindingUI)
这样的东西应该可以工作,并帮助您连接回请求的浏览器和/或文档。