在Delphi中取得Frame和IFrame对像的方法:
下面两种方法好像都不能取得不属于同一个域下框架,暂时还不知道该如何解决这个问题。
一、使用QueryInterface
function GetFrame(Doc: IHTMLDocument2;
Index: OleVariant): IHTMLDocument2;
var
OleWin: OleVariant;
FrameWin: IHTMLWindow2;
begin
if (Doc.frames.length <= Index) then
Result := nil
else begin
OleWin := Doc.Frames.Item(Index);
IUnknown(OleWin).QueryInterface(IID_IHTMLWindow2, FrameWin);
Result := FrameWin.Document;
end;
end;
二、使用IOleContainer
function GetFrame(Doc: IHTMLDocument2;
Index: OleVariant): IHTMLDocument2;
var
OleContainer: IOleContainer;
Enum: IEnumUnknown;
Unk: IUnknown;
Fetched: PLongint;
begin
Doc.domain := '163.com';
Fetched := nil;
OleContainer := wb.Document as IOleContainer;
OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
Enum.Skip(Index);
Enum.Next(1, Unk, Fetched);
Result := (Unk as IWebbrowser2).Document as IHTMLDocument2;
end;
下面两种方法好像都不能取得不属于同一个域下框架,暂时还不知道该如何解决这个问题。
一、使用QueryInterface
function GetFrame(Doc: IHTMLDocument2;
Index: OleVariant): IHTMLDocument2;
var
OleWin: OleVariant;
FrameWin: IHTMLWindow2;
begin
if (Doc.frames.length <= Index) then
Result := nil
else begin
OleWin := Doc.Frames.Item(Index);
IUnknown(OleWin).QueryInterface(IID_IHTMLWindow2, FrameWin);
Result := FrameWin.Document;
end;
end;
二、使用IOleContainer
function GetFrame(Doc: IHTMLDocument2;
Index: OleVariant): IHTMLDocument2;
var
OleContainer: IOleContainer;
Enum: IEnumUnknown;
Unk: IUnknown;
Fetched: PLongint;
begin
Doc.domain := '163.com';
Fetched := nil;
OleContainer := wb.Document as IOleContainer;
OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
Enum.Skip(Index);
Enum.Next(1, Unk, Fetched);
Result := (Unk as IWebbrowser2).Document as IHTMLDocument2;
end;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/634491/viewspace-246124/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/634491/viewspace-246124/