//------------------------------------------------------------------------------ function TMainFrame.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;
var
docHTML: IHTMLDocument3;
sl: TStringList;
begin
sl := TStringList.Create;
try
docHTML := Webbrowser1.document as IHTMLDocument3;
sl.Add(docHTML.documentElement.outerHTML);
sl.SaveToFile(ExtractFilePath(Application.ExeName) + 'temp1.htm');
finally
sl.Free;
end;
end;
docHTML: IHTMLDocument3;
编译报错, Undeclared Indentifier IHTMLDocument3 应 uses 哪个单元?
多谢!
[查看]菜单中[源文件]功能cronuz(cronus)兄:的是将IE中的内容存储类似
[文件]菜单中[保存]请问如何查看 !!!!!!!!! 源文件!!!!!!!!!!!!
MEMO1.LINES.TEXT := HtmlText;
MEMO1.LINES.SAVETOFILE('C:\TEXT.HTML')
Doc := (WebBrowser1.Document) as IHTMLDocument2;
if Doc<> nil then Doc.execCommand('??????',False,EmptyParam); ???? 应为什么参数,才能实现[查看]菜单中[源文件]功能
请多多指教, 帮帮小弟!!!
我没有试过多框架如何保存为HTML, 如[文件]中[保存]cronuz(cronus): 试过了, 不行啊.
masterjames(james) : 试过了不行啊! 小弟要求的是在WebBrowser控件中通过编程实现如IE中[查看]菜单[源文件]的功能, 可以以MEMO控件打开源文件, 救救小弟了!!
多谢各位帮助, 帮助UP者有分,决不失言.
在线急等.
[8-]
DEFINE_GUID(CGID_IWebBrowser,0xED016940L,0xBD5B,0x11cf,0xBA,
0x4E,0x00,0xC0,0x4F,0xD7,0x08,0x16); #define HTMLID_FIND 1
#define HTMLID_VIEWSOURCE 2
#define HTMLID_OPTIONS 3 LPDISPATCH lpDispatch = NULL;
LPOLECOMMANDTARGET lpOleCommandTarget = NULL; lpDispatch =m_webBrowser.GetDocument();
ASSERT(lpDispatch); // Get an IDispatch pointer for the IOleCommandTarget interface.
lpDispatch->QueryInterface(IID_IOleCommandTarget,
(void**)&lpOleCommandTarget);
ASSERT(lpOleCommandTarget); lpDispatch->Release(); // Invoke the given command id for the WebBrowser control
return lpOleCommandTarget->Exec(&CGID_IWebBrowser, nCmdID, 0,
NULL, NULL);
不过通常我都是用IPresistStream来获得和设置HTML内容
http://dev.csdn.net/article/18/18465.shtm
多谢了! 小弟正在将 C 转为 Delphi :(
有没有 Delphi 的代码 :)
调试中...
测试失败, 以下为从Stream中保存下的HTML文档, 当前页中的数据不存在, 而在IE中查看源文件可以找到数据. 救救小弟!!!
<html>
<head>
<title>LOGIN</title>
<meta http-equiv="Content-Type" content="text/html; charset=big5"></head>
<frameset rows="*,0" frameborder="NO" border="0" framespacing="0">
<frame name="ddnet_corp_index" src="new_index.php?type_chk=&langx=">
<frame name="ddnet_corp_func" scrolling="NO" noresize src="ok.php">
</frameset>
<noframes>
<body bgcolor="#FFFFFF" text="#000000">
</body>
</noframes>
</html> 查看源文件可见的内容(部分)<table width="780" border="0" cellspacing="1" cellpadding="0" class="m_tab" bgcolor="#000000">
<tr class="m_title" >
<td width="50" > **</td>
<td width="100"> **</td>
<td width="350"> **</td>
<td width="140"> **</td>
<td width="140"> **</td>
</tr>
<tr class="m_rig" align="left" onmouseover="setPointer(this, 0, 'over', '#FFFFFF', '#FFCC66', '#FFCC99');" onmouseout="setPointer(this, 0, 'out', '#FFFFFF', '#FFCC66', '#FFCC99');" >
<td align="center">09-15<br>
04:58:35</td>
<td align="center">cbb2103<font color="#CC0000"> 0</font></td>
<td>英格兰超级联赛<br> 曼联 <font color=#0000BB><b>VS.</b></font> 利物浦 <font class="td_13_c" color="red"><B></B></font><BR><font color=#CC0000>小盘 2.5</font> @ <font color=#CC0000><B>0.850</B></font></td>
<td>1000.0</td>
<td>-1000.0</td>
</tr>
<tr class="m_rig" align="left" onmouseover="setPointer(this, 0, 'over', '#FFFFFF', '#FFCC66', '#FFCC99');" onmouseout="setPointer(this, 0, 'out', '#FFFFFF', '#FFCC66', '#FFCC99');" >
<td align="center">09-15<br>
05:18:30</td>
<td align="center">cds0896<font color="#CC0000"> 0.75</font></td>
<td>英格兰超级联赛<br> 曼联 <font color=#0000BB><b>VS.</b></font> 利物浦 <font class="td_13_c" color="red"><B></B></font><BR><font color=#CC0000>小盘 2.5</font> @ <font color=#CC0000><B>0.850</B></font></td>
<td>100000.0</td>
<td>-99250.0</td>
</tr>
<tr class="m_rig" align="left" onmouseover="setPointer(this, 0, 'over', '#FFFFFF', '#FFCC66', '#FFCC99');" onmouseout="setPointer(this, 0, 'out', '#FFFFFF', '#FFCC66', '#FFCC99');" >
<td align="center">09-15<br>
12:13:16</td>
<td align="center">cc88111<font color="#CC0000"> 0.75</font></td>
<td>英格兰超级联赛<br> 曼联 <font color=#0000BB><b>VS.</b></font> 利物浦 <font class="td_13_c" color="red"><B></B></font><BR><font color=#CC0000>小盘 2.5</font> @ <font color=#CC0000><B>0.800</B></font></td>
<td>5000.0</td>
<td>-4962.5</td>
</tr>
...........
是DocumentComplete啊!
55555555555555555555
没有办法吗?
有用IDHTTP没有??
如下:
procedure TForm1.Button1Click(Sender: TObject);
var
Soure: TMemoryStream;
Response: TStringStream;
begin
//加入URL地址
if url.Items.IndexOf(url.Text) = -1 then
url.Items.Add(URL.Text) ;
Screen.Cursor := crHourGlass;
Button2.Enabled := True;
Button1.Enabled := False;
try
Memo1.Clear;
//设置HTTP的各属性
case Method.ItemIndex of
0:
begin
HTTP.Head(url.Text);
memo1.Lines.Add('Content-Type: ' + HTTP.Response.ContentType);
Memo1.Lines.Add('Date: ' + DateToStr(HTTP.Response.Date));
end;
1://获取包体内容
begin
Memo1.Lines.Text := HTTP.Get(url.Text);
// HTTP.Post(url.Text,memo1.Lines);
WebBrowser1.Navigate(url.Text);
end;
end;
finally
Screen.Cursor := crDefault;
Button2.Enabled := False;
Button1.Enabled :=true;
end;
end;
查询IHTMLFrameElement的IWebBrowser2接口之后得到Document重新分析……
感谢您多次观照, 我尝试过公别得到各框架有源文件, 依然得不到我所需结果.
其代码如下: shitianj(仲) 兄:
您使用IIndy控件是吗? 我估计不行, 不过我会试的.使用Indy控件对于 HTTPS 的SSL有效吗? 使用WebBrowser 可以完成吗?
function TMainFrame.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;
难道你搞错了访问时间?要等框架集页面的DocumentComplete的