procedure TForm1.Button1Click(Sender: TObject); var IpStream: IPersistStreamInit; AStream: TMemoryStream; iw: IWebbrowser2; i: Integer; sl: TStringList; begin for i := 0 to Webbrowser1.OleObject.Document.frames.Length - 1 do begin iw := GetFrame(i); AStream := TMemoryStream.Create; try IpStream := iw.document as IPersistStreamInit; if Succeeded(IpStream.save(TStreamadapter.Create(AStream), True)) then begin AStream.Seek(0, 0); sl := TStringList.Create; sl.LoadFromStream(AStream); sl.SaveToFile('c:\frame' + IntToStr(i) + '.txt'); // memo1.Lines.LoadFromStream(AStream); sl.Free; end; except end; AStream.Free; end; end;
uses ActiveX; function TForm1.GetFrame(FrameNo: Integer): IWebbrowser2; var OleContainer: IOleContainer; enum: IEnumUnknown; unk: IUnknown; Fetched: PLongint; begin while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages; if Assigned(Webbrowser1.document) then begin Fetched := nil; OleContainer := Webbrowser1.Document as IOleContainer; OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum); Enum.Skip(FrameNo); Enum.Next(1, Unk, Fetched); Result := Unk as IWebbrowser2; end else Result := nil; end;
WebBrowser1.Navigate('about:blank'); while WebBrowser1.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages; AStream.Seek(0, 0); (WebBrowser.Document as IPersistStreamInit).load(TStreamadapter.Create(AStream));(注:挿入上述試試)
(WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(AStream)); 这一句讲当前页面整个填充了,我要的效果只是填充网页中的一小块区域。 不理解为什么可以存储ifram中的内容,但是读入到这块区域却不行呢?
var
IpStream: IPersistStreamInit;
AStream: TMemoryStream;
iw: IWebbrowser2;
i: Integer;
sl: TStringList;
begin
for i := 0 to Webbrowser1.OleObject.Document.frames.Length - 1 do
begin
iw := GetFrame(i);
AStream := TMemoryStream.Create;
try
IpStream := iw.document as IPersistStreamInit;
if Succeeded(IpStream.save(TStreamadapter.Create(AStream), True)) then
begin
AStream.Seek(0, 0);
sl := TStringList.Create;
sl.LoadFromStream(AStream);
sl.SaveToFile('c:\frame' + IntToStr(i) + '.txt');
// memo1.Lines.LoadFromStream(AStream);
sl.Free;
end;
except
end;
AStream.Free;
end;
end;
ActiveX; function TForm1.GetFrame(FrameNo: Integer): IWebbrowser2;
var
OleContainer: IOleContainer;
enum: IEnumUnknown;
unk: IUnknown;
Fetched: PLongint;
begin
while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
Application.ProcessMessages;
if Assigned(Webbrowser1.document) then
begin
Fetched := nil;
OleContainer := Webbrowser1.Document as IOleContainer;
OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum);
Enum.Skip(FrameNo);
Enum.Next(1, Unk, Fetched);
Result := Unk as IWebbrowser2;
end
else
Result := nil;
end;
while WebBrowser1.ReadyState < READYSTATE_INTERACTIVE do
Application.ProcessMessages;
AStream.Seek(0, 0);
(WebBrowser.Document as IPersistStreamInit).load(TStreamadapter.Create(AStream));(注:挿入上述試試)
AStream中不是己装入了指定的IFRAM内容吗?WebBrowser1.Navigate('about:blank');//就是清当前页面
WebBrowser1.Navigate('about:blank');把当前控件中的页面转向空白页了。
var iw: IWebbrowser2;
AStream: TMemoryStream;
IpStream: IPersistStreamInit;
begin
iw := GetFrame(1); //指定某Frame
AStream := TMemoryStream.Create;
try
IpStream := iw.document as IPersistStreamInit;
if Succeeded(IpStream.save(TStreamadapter.Create(AStream), True)) then
begin
WebBrowser1.Navigate('about:blank');
while WebBrowser1.ReadyState < READYSTATE_INTERACTIVE do
Application.ProcessMessages; AStream.Seek(0, 0);
(WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(AStream)); AStream.Seek(0, 0); //為了Test、Frame内容装入Memo
memo1.Lines.LoadFromStream(AStream);
end;
except
end;
AStream.Free;
end;
MEMO1中的内容是取得的Frame的HTML?
也可以把你TEST用的HTTP Address贴出...
这一句讲当前页面整个填充了,我要的效果只是填充网页中的一小块区域。
不理解为什么可以存储ifram中的内容,但是读入到这块区域却不行呢?
http://webeditor.aspsir.com/
试下这个,把一个HTM文件的HTML代码读入到里面去
等一下、我試試看...
begin
Webbrowser1.Navigate('http://webeditor.aspsir.com/');
end;procedure TForm1.Button2Click(Sender: TObject);
var
oIFrame: OleVariant;
begin
oIFrame := WebBrowser1.OleObject.Document.Frames.item(0);
Memo1.Lines.Clear;
//IFrame代码存入Memo1
Memo1.Lines.Add(oIFrame.document.body.innerHTML);
end;procedure TForm1.Button3Click(Sender: TObject);
var
oIFrame: OleVariant;
begin
oIFrame := WebBrowser1.OleObject.Document.Frames.item(0);
//在IFrame读入Memo1中的HTML代码
oIFrame.Document.body.innerText := Memo1.Text;
//oIFrame.Document.body.innerHTML := Memo1.Text;
end;