首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

WebBrowser 页面加载有关问题

2012-03-07 
WebBrowser 页面加载问题窗口上有两个WebBrowse控件(分别叫 WEB1,WEB2),WEB1件已经加载完成了一个页面(htt

WebBrowser 页面加载问题
窗口上有两个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);

这样的方法,行不通。


[解决办法]
将第一个WEB保存到流里,第二个从流里加载
给你代码

Delphi(Pascal) code
uses ActiveX;procedure LoadStream(WebBrowser: TWebBrowser; Stream: TStream);varPersistStreamInit: 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}repeatApplication.ProcessMessages;Sleep(0);untilWebBrowser.ReadyState = READYSTATE_COMPLETE;{Get IPersistStreamInit - Interface}if WebBrowser.Document.QueryInterface(IPersistStreamInit, PersistStreamInit) = S_OK thenbegin{Clear document}if PersistStreamInit.InitNew = S_OK thenbegin{Make local copy of the contents of Stream if you want to use Stream directly, you have toconsider, that StreamAdapter will destroy it automatically}MemoryStream:= TMemoryStream.Create;tryMemoryStream.CopyFrom(Stream, 0);MemoryStream.Position:= 0;exceptMemoryStream.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);varS: TStringStream;beginS:= TStringStream.Create('<html><h1>Stream Test</h1><p>:This HTML content ' +'is being loaded from a stream.</html>');tryLoadStream(WebBrowser1, S);finallyS.Free;end;End;上面是把html字符串显示在WebBrowser里,下面是保存成Html文件:function SaveHTMLCode(WebBrowser: TWebBrowser; const FileName: TFileName): Boolean;varps: IPersistStreamInit;fs: TFileStream;sa: IStream;beginps := WebBrowser.Document as IPersistStreamInit;fs := TFileStream.Create(FileName, fmCreate);trysa := TStreamAdapter.Create(fs, soReference) as IStream;Result := Succeeded(ps.Save(sa, True));finallyfs.Free;end;end;Call with:SaveHTMLCode(WebBrowser1, 'C:\MyHTMLDoc.html');//保存成流:procedure SaveDocumentSourceToStream(Document: IDispatch; Stream: TStream);varPersistStreamInit: IPersistStreamInit;StreamAdapter: IStream;beginStream.Size := 0;Stream.Position := 0;if Document.QueryInterface(IPersistStreamInit, PersistStreamInit) = S_OK thenbeginStreamAdapter := TStreamAdapter.Create(Stream, soReference);PersistStreamInit.Save(StreamAdapter, False);StreamAdapter := nil;end;end;
[解决办法]
楼上的方法不错,行的通。

热点排行