我有一个小程序,使用了HtmlView,使用IID_IHTMLDocument2接口的
write 方法来显示我要输出的网页。具体实现差不多这个样子
LPDISPATCH pHtmlDoc = GetHtmlDocument();// get_Document();
hr=pHtmlDoc->QueryInterface(IID_IHTMLDocument2,(void **)&phmDoc2);phmDoc2->open(_bstr_t("text/html"),
_variant_t("_self") ,
_variant_t(),
_variant_t(),
NULL);phmDoc2->write(sfArray);
phmDoc2->close();如果我要输出的内容里面包含<img src="..."></img> 这类的信息,
HtmlView会自动下载图片和显示。现在服务器增加了安全要求,下载图片的时候要向服务器发送cookie认证。
cookie的内容我知道的,但是却无法让内嵌的IWebBrowser下载的时候
发送Cookie!这样图片现在就不能显示了。我现在通过IID_IHTMLDocument2的put_cookie方法,设置cookie。设置完了以后,我使用Navigate2方法,内嵌的IWebBrowser可以成功
下载到图片的。(说明我用的方法也不全错)不过通过 流 输入到IID_IHTMLDocument2的情形,如果HTML源文件中
包含<img src="..."></img> 这类的信息,这个浏览器会向指定的URL
发送请求,下载图片,却不会发送cookie,所以服务器不让下载。
不知道大家是否了解我的问题,这个问题困扰我一个星期了。理论上我
可以自己下载图片,然后修改html的源文件中的图像地址为本地,这样
也可以显示,不过比较麻烦。最后能通过什么方法让IWebBrowser自动
发送cookie。这个版很久没有来过了,以前在这里受到很多老大的帮助,尤其是蒋老大的恩惠。谢谢大家!!

解决方案 »

  1.   

    如果已经设置Cookie, 则问题可能出在img的src的URL上。因为“通过 流 输入到IID_IHTMLDocument2”时,整个文档的url是about:blank,
    img的src是相对url,所以根本找不到。你试试在流输入之前,这样处理一下:<html>
      <head>
        <base href="http://xxx.yyy.zzz/aaa/bbb/" />
    ...加入base标签,注意“http://xxx.yyy.zzz/aaa/bbb/”与img的src正好能合成为完整的图片url
      

  2.   

    谢谢楼上的现在就有 <base href="http://xxx.yyy.zzz/aaa/bbb/" />
    否则图片都显示不了。我在IE中设置了持久的cookie了,还是不行,真是奇怪
      

  3.   

    how about IHTMLDocument2::CreateElement or IMarkupServices::createElement?