这有点与this question重复,但这个问题没有(有效)答案,并且已经有1.5年的历史了,所以请求我自己希望人们现在有更多的信息。
如果你在APP实例中使用WebBrowser控件的多个实例,MSHTML,IHTMLDocument或其他......,主要是IInternetProtocol :: Start,有没有办法知道哪个实例正在加载资源?或者有没有办法为控件的每个实例使用不同的APP,可能是通过IDocHostUIHandler或ICustomDoc提供一个或其他?我目前正在使用IInternetSession :: RegisterNameSpace来处理它。
可选阅读,除非上述内容尚未明确,否则请不要阅读。
我正在使用遗留(Win32 C ++)电子邮件客户端,该客户端使用MS ActiveX WebBrowser控件(MSHTML或其他名称)来显示HTML电子邮件。它将所有内容保存到临时文件,更新cid:URL,然后控制加载。现在我想用正确的方式,使用APP。我已经完成了一些只使用静态变量/全局变量并加载一封电子邮件的测试代码。
我现在的问题是,应用程序可能有几个控件实例同时加载不同的电子邮件(和其他东西)...实际上不是多个线程,只是控件的异步性质。我可以为控件的每个实例提供一个唯一的URL来加载电子邮件,比如cid:email-GUID,然后在我的APP代码中我可以使用该URL来了解要加载的电子邮件。但是,当涉及到加载电子邮件中的任何内容时,例如使用src =" cid:"附加的图像,那些并不总是唯一的,所以我不会总是知道它是哪个图像,对于哪个电子邮件。我希望避免在显示HTML之前修改HTML的URL(我现在正在为临时文件执行此操作,但希望以更好的方式执行此操作)。
IInternetBindInfo :: GetBindString可以返回引用者,BINDSTRING_XDR_ORIGIN或根URL,BINDSTRING_ROOTDOC_URL,但那些需要较新版本的IE,我的遗留应用程序必须支持可能拥有IE6或IE7的旧XP安装,所以我' d而不是使用这些。
标记为TWebBrowser,因为这实际上是我使用的(Borland Builder 6 C ++),但不需要特定于该平台的答案。
答案 0 :(得分:1)
由于异步可插入协议处理程序的级别很低,因此无法将处理程序单独附加到不同的渲染控件。
以下是获取推荐人的方法:
BINDSTRING_HEADERS
Referer: http://...
来提取引荐来源。这是另一种疯狂的方式:
RegisterMimeFilter
创建另一个异步可插入协议处理程序。text/plain
和text/html
NameSpaceHandler
中,您可以使用此词典查找任何图像资源的引用。