在TWebBrowser中带frame的网页,怎样显示子网页的源代码???(50分)

  • 主题发起人 主题发起人 peacekeeper
  • 开始时间 开始时间
P

peacekeeper

Unregistered / Unconfirmed
GUEST, unregistred user!
如果不含frame的网页,可以显示源代码如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, OleCtrls, SHDocVw,mshtml;

type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
webbrowser1.Navigate('http://202.114.98.12/book/');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
all:IHTMLElementcollection;
doc:IHTMLDocument2;
item:OleVariant;
begin
doc:=webbrowser1.document as ihtmldocument2;
all:=doc.all;
item:=all.item(0,varEmpty);
Memo1.Clear;
memo1.Lines.Add(item.innerhtml);//item.innerhtml就是源文件内容
end;

end.

但是,<b>如果含Frame呢???</b>
如果用
TAROBJ:OLEVARIANT;
....
TarOBJ := WebBrowser1.OleObject.Document.Frames.Item(1).Document;
我接不下去。
 
不懂:(
 
我这段代码是从ie的网页中获取代码并显示在memo中,调试通过。
乱是乱了些,但是能用。你用twebbroser,基本上大同小异。
呵呵,给分!!!ft,才50 :-(

var
ShellWindow: IShellWindows;
nCount: integer;
spDisp: IDispatch;
i,j: integer;
vi,VJ: OleVariant;
IE1: IWebBrowser2;
IDoc1: IHTMLDocument2;
HtmlFrame : IHTMLFramesCollection2;
HtmlWin : IHTMLWindow2;
begin
ShellWindow := CoShellWindows.Create;
nCount := ShellWindow.Count;

for i := 0 to nCount - 1 do
begin
vi := i;
spDisp := ShellWindow.Item(vi);
if spDisp = nil then continue;
spDisp.QueryInterface( iWebBrowser2, IE1 );
if IE1 <> nil then
begin
IE1.Document.QueryInterface(IHTMLDocument2,iDoc1);
if iDoc1 <> nil then
begin
HtmlFrame := idoc1.Get_frames;
for j:=0 to HtmlFrame.length-1 do
begin
Application.ProcessMessages;
vj:=j;
spDisp := HtmlFrame.item(vj);
if SUCCEEDED(spDisp.QueryInterface(IHTMLWindow2 ,HtmlWin))then
begin
Memo2.Lines.Add(HtmlWin.name)
//写上frame的name
if SUCCEEDED(HtmlWin.document.QueryInterface(IHTMLDocument2 ,IDoc1))then
begin
vj:=IDoc1.Get_all.item(0,0);
Memo2.Lines.Add(vj.innerhtml)
//这里是frame的网页代码啦
end;
end;
end;
Exit
//我只对第一个ie窗口使用,所以就退出
end;
end;
end;
end;
 
elan:
  这题不少分的啦!请看:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=283924
到那边报个名吧(早就知道你是这么贪心,哈哈)!
<h1><b>另外,</h1></b>
  大虾,我是超级菜鸟,你这段代码这么少注释,我看不懂,有没有其他参考资料
介绍给我参考?至于,如何改为对TWebBrowser控件下的,真的不懂,大虾你就勉为其
难随便把代码写出来吧?
 
实际上对twebBrowser的代码基本上不变也可以用啊。都是通过先获取接口,然后
再实现对属性和方法的访问


IE1.Document.QueryInterface(IHTMLDocument2,iDoc1);

从这儿以下的语句你基本上不改就应该能用的吧。前面的删掉就行了
 
接受答案了.
 
后退
顶部