在异步可插拔协议线程中-如何将其关联/解析为实现::SetSite()的特定COM对象



在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)这样的东西应该可以工作,并帮助您连接回请求的浏览器和/或文档。

最新更新