uses MSHTML, ActiveX; function GetFrame(FrameNo:Integer):IWebbrowser2; var OleContainer:IOleContainer; enum:IEnumUnknown; unk:IUnknown; Fetched:PLongint; begin while Form1.wb1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages; if Assigned(Form1.wb1.document)then begin Fetched:= nil; OleContainer:= Form1.wb1.Document as IOleContainer; OleContainer.EnumObjects(OLECONTF_EMBEDDINGS,enum); Enum.Skip(FrameNo); Enum.Next(OLECONTF_EMBEDDINGS,Unk,Fetched); Result:=Unk as IWebbrowser2; end else Result:=nil; end; procedure TForm1.btn3Click(Sender: TObject); var doc,frm: IHTMLDocument2; iw: IWebbrowser2; i: integer; begin doc:=wb1.Document as IHTMLDocument2; for i:=0 to doc.frames.length-1 do begin iw:=GetFrame(i); frm:=iw.Document as IHTMLDocument2; mmo1.Lines.Add( '==============Frame '+ IntToStr(i)+ '=================='); mmo1.Lines.Add(frm.body.outerHTML); end; end; procedure TForm1.btn2Click(Sender: TObject); var Index: Integer; Document: IHTMLDocument2; FrameIdx: OleVariant; FrameDis: IDispatch; FrameWin: IHTMLWindow2; begin while wb1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages; if wb1.Document = nil then Exit; if wb1.Document.QueryInterface(IHTMLDocument2, Document) <> 0 then Exit; if Document.frames.length > 0 then begin for Index := 0 to Document.frames.length - 1 do begin FrameIdx := Index; FrameDis := Document.frames.item(FrameIdx); if FrameDis.QueryInterface(IHTMLWindow2, FrameWin) <> 0 then Exit; mmo1.Lines.Add(#13#10+'==============Frame '+ IntToStr(Index)+ '=================='+#13#10); mmo1.Lines.Add(FrameWin.document.body.outerHTML+#13#10); end; end; end;
关键字词: