在异步可插入协议线程中 - 这怎么可能 associated/resolved 到实现 ::SetSite() 的特定 COM 对象?
In an Asynchronous Pluggable Protocol thread - how can this be associated/resolved to a particular COM object implementing ::SetSite()?
在 IE11 中,当访问诸如 www.yahoo.com 之类的站点时,多个线程将触发应用程序 - 这些线程中只有非常小的一个子集可以与浏览器相关联 window(通过查询创建选项卡时在 ::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)
之类的东西应该可以工作,并帮助您连接回请求浏览器 and/or 文档。
在 IE11 中,当访问诸如 www.yahoo.com 之类的站点时,多个线程将触发应用程序 - 这些线程中只有非常小的一个子集可以与浏览器相关联 window(通过查询创建选项卡时在 ::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)
之类的东西应该可以工作,并帮助您连接回请求浏览器 and/or 文档。