• 主页
  • 招聘
  • 语言基础/算法/系统设计
  • 数据库相关
  • 图形处理/多媒体
  • 网络通信/分布式开发
  • VCL组件开发及应用
  • Windows SDK/API

delphi xe2 webbrowser使用问题,载入页面内容有时候会变成空白的。

stephenchern 2013-01-28 11:40:57
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;
...全文
192 点赞 收藏 9
写回复
9 条回复
yuhai_008 2013年08月16日
Mark,遇到一样问题呀
回复 点赞
stephenchern 2013年02月26日
问题还是没完美解决 ie版本太低 还是会报这个错误 继续求助中。。。。
回复 点赞
stephenchern 2013年02月05日
继续求助 。。。。
回复 点赞
stephenchern 2013年02月01日
不能保存成文件,这样在电脑上就会有东西了 必须通过流
回复 点赞
simonhehe 2013年01月29日
引用 2 楼 stephenchern 的回复:
不对吧 我直接载入html串报错了啊。。还请指教 谢谢。。。。
wb1.Navigate('about:<head><title>标题</title><body>Hello World</body>'); 这句能执行吧 :) 太复杂的字符串我也没测试过. 你可以把你的html串保存为文件然后wb1.Navigate('文件路径'); 看看会不会有装载不了的问题
回复 点赞
stephenchern 2013年01月29日
不对吧 我直接载入html串报错了啊。。还请指教 谢谢。。。。
回复 点赞
simonhehe 2013年01月29日
先确保HTML页面兼容低版本IE 然后看是不是webborwser过滤了一些提示之类的, 然后导致异常. 另外, webbrowser可以直接载入HTML串, 你为什么要用流? ------------------------------------------------------- wb1.Navigate('about:<head><title>标题</title><body>Hello World</body>');
回复 点赞
cyistudio 2013年01月29日
如果网页已经加载过内容就不需要WebBrowser.Navigate('about:blank');了,直接再次载入流就行了……
回复 点赞
simonhehe 2013年01月29日
这是个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;
回复 点赞
发动态
发帖子
Delphi
创建于2007-08-02

1463

社区成员

26.2w+

社区内容

Delphi 开发及应用
社区公告
暂无公告