delphi xe2 webbrowser使用问题,载入页面内容有时候会变成空白的。
问题一般会发生在ie6 或 ie7上
ie8 9上运行都正常
症状就是页面在载入的时候,会变成空白,然后有时候重新载入,又会恢复正常
请教下大家 这是什么问题 急着用 现在遇到这个bugs,最好在所有ie上都可以使用 这样用户就无需升级ie代码如下:(webbrowser通过参数传入,html字段为html代码)
procedure LoadWebBrowser(WebBrowser: TWebBrowser; HTML: WideString);
var
  StrStream: TStringStream;
begin
  StrStream := TStringStream.Create(HTML);
  WebBrowser.Navigate('about:blank');
  Application.ProcessMessages;
  try
    StrStream.Position := 0;
    (WebBrowser.Document as IPersistStreamInit).Load(TStreamadapter.Create(StrStream));
  finally
    StrStream.Free;
  end;
end;

解决方案 »

  1.   

    先确保HTML页面兼容低版本IE
    然后看是不是webborwser过滤了一些提示之类的, 然后导致异常.另外, webbrowser可以直接载入HTML串, 你为什么要用流?
    -------------------------------------------------------
    wb1.Navigate('about:<head><title>标题</title><body>Hello World</body>');
      

  2.   

    不对吧 我直接载入html串报错了啊。。还请指教  谢谢。
      

  3.   

    wb1.Navigate('about:<head><title>标题</title><body>Hello World</body>');
    这句能执行吧  :)太复杂的字符串我也没测试过.
    你可以把你的html串保存为文件然后wb1.Navigate('文件路径'); 看看会不会有装载不了的问题
      

  4.   

    这是个webbrowser装载流的例子
    先初始化webbrowser的页面为空页面, 成功后装载流  procedure LoadStream(WebBrowser:TWebBrowser; Stream:TStream);
      var
        PersistStreamInit: IPersistStreamInit;
        StreamAdapter: IStream;
        MemoryStream: TMemoryStream;
      begin
        WebBrowser.Navigate('about:blank');
        repeat
            Application.ProcessMessages;
            Sleep(0);
        until
            WebBrowser.ReadyState=READYSTATE_COMPLETE;
        if WebBrowser.Document.QueryInterface(IPersistStreamInit,PersistStreamInit)=S_OK then
        begin
            if PersistStreamInit.InitNew=S_OK then
            begin
              MemoryStream:=TMemoryStream.Create;
              try
                MemoryStream.CopyFrom(Stream,0);
                MemoryStream.Position:=0;
              except
                MemoryStream.Free;
                raise;
              end;
              StreamAdapter:=TStreamAdapter.Create(MemoryStream,soOwned);
              PersistStreamInit.Load(StreamAdapter);
            end;
        end;
      end;
      

  5.   

    如果网页已经加载过内容就不需要WebBrowser.Navigate('about:blank');了,直接再次载入流就行了……