在 IE11 中,当访问 www.yahoo.com 等网站时,多个线程将触发应用程序 - 并且这些线程中只有很小的子集可以与浏览器窗口关联(通过查询服务提供商等) ),在创建选项卡时在::SetSite() 调用中传递。
这不适用于现代网站上的大多数线程(例如 www.evernote.com)
如何找出线程代表哪个 IE 选项卡 - 或者这是不可能的?
我很想知道有某种方法可以将这些线程与传递给::SetSite() (或类似的东西)的 pUnkSite 相匹配 - 但这似乎与我迄今为止经历过的 IE 模型不同。
谢谢。
最佳答案
尝试切换
/继续
技巧。您的应用程序将像这样调用 IInternetProtocolSink::Switch
,例如在开始
中:
PROTOCOLDATA data = {0};
data.grfFlags = PD_FORCE_SWITCH; // important
pProtocolSink->Switch(&data);
最终,客户端将转身并在主 UI 线程上对您调用 IInternetProtocol::Continue
。一旦进入主线程,IServiceProvider::QueryService(IID_IWindowForBindingUI)
之类的东西应该可以工作,并帮助您连接回请求的浏览器和/或文档。
关于multithreading - 在异步可插拔协议(protocol)线程中 - 如何将其关联/解析到实现::SetSite() 的特定 COM 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785521/