WebBrowser 页面加载问题

ezhuo 2011-06-13 04:36:43
窗口上有两个WebBrowse控件(分别叫 WEB1,WEB2),WEB1件已经加载完成了一个页面(http://www.mapabc.com/map.html),
WEB2也要加载这个页面,如果从新加载,速度会慢,我的想法是,能不能web2从web1里装入已经加载好的页面。

var
a: TStringList;
begin
a := TStringList.Create;

WEB1.SaveToStrings(a);
WEB2.Navigate('about:blank');
WEB2.LoadFromStrings(a);

这样的方法,行不通。
...全文
236 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ezhuo 2012-01-19
  • 打赏
  • 举报
回复
不好意思,结晚了。
fslqh 2011-09-03
  • 打赏
  • 举报
回复
楼上的方法不错,行的通。
orxor 2011-06-26
  • 打赏
  • 举报
回复
将第一个WEB保存到流里,第二个从流里加载
给你代码

uses ActiveX;


procedure LoadStream(WebBrowser: TWebBrowser; Stream: TStream);
var
PersistStreamInit: IPersistStreamInit;
StreamAdapter: IStream;
MemoryStream: TMemoryStream;
begin
{Load empty HTML document into Webbrowser to make "Document" a valid HTML document}
WebBrowser.Navigate('about:blank');
{wait until finished loading}
repeat
Application.ProcessMessages;
Sleep(0);
until
WebBrowser.ReadyState = READYSTATE_COMPLETE;
{Get IPersistStreamInit - Interface}
if WebBrowser.Document.QueryInterface(IPersistStreamInit, PersistStreamInit) = S_OK then
begin
{Clear document}
if PersistStreamInit.InitNew = S_OK then
begin
{Make local copy of the contents of Stream if you want to use Stream directly, you have to
consider, that StreamAdapter will destroy it automatically}
MemoryStream:= TMemoryStream.Create;
try
MemoryStream.CopyFrom(Stream, 0);
MemoryStream.Position:= 0;
except
MemoryStream.Free;
raise;
end;
{Use Stream-Adapter to get IStream Interface to our stream}
StreamAdapter:= TStreamAdapter.Create(MemoryStream, soOwned);
{Load data from Stream into WebBrowser}
PersistStreamInit.Load(StreamAdapter);
end;
end;
end;



{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
S: TStringStream;
begin
S:= TStringStream.Create('<html><h1>Stream Test</h1><p>:This HTML content ' +
'is being loaded from a stream.</html>');
try
LoadStream(WebBrowser1, S);
finally
S.Free;
end;

End;

上面是把html字符串显示在WebBrowser里,下面是保存成Html文件:

function SaveHTMLCode(WebBrowser: TWebBrowser; const FileName: TFileName): Boolean;
var
ps: IPersistStreamInit;
fs: TFileStream;
sa: IStream;
begin
ps := WebBrowser.Document as IPersistStreamInit;
fs := TFileStream.Create(FileName, fmCreate);
try
sa := TStreamAdapter.Create(fs, soReference) as IStream;
Result := Succeeded(ps.Save(sa, True));
finally
fs.Free;
end;
end;

Call with:
SaveHTMLCode(WebBrowser1, 'C:\MyHTMLDoc.html');

//保存成流:
procedure SaveDocumentSourceToStream(Document: IDispatch; Stream: TStream);
var
PersistStreamInit: IPersistStreamInit;
StreamAdapter: IStream;
begin
Stream.Size := 0;
Stream.Position := 0;
if Document.QueryInterface(IPersistStreamInit, PersistStreamInit) = S_OK then
begin
StreamAdapter := TStreamAdapter.Create(Stream, soReference);
PersistStreamInit.Save(StreamAdapter, False);
StreamAdapter := nil;
end;
end;


ezhuo 2011-06-25
  • 打赏
  • 举报
回复
该方法行不通。。
不担心 2011-06-13
  • 打赏
  • 举报
回复
assign

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧