src := WebBrowser1.OleObject.document.getElementByIdx(’id1′).src
其實(shí)就是javascript中的 getElementByID 的函數
Html中的代碼 : <script> var userID=123</script>
在delphi程序中這么調用
id := Form1.WebBrowser1.OleObject.Document.script.userID
userID變量可以是javascript定義的,也可以是vbscript定義的。如果Webbrowser1中找不到該變量,調用會(huì )觸發(fā)一個(gè)異常事件,即變量userID不存在
sRun := ‘userID = getNextID(userID)’+#13#10;
Form1.WebBrowser1.OleObject.Document.parentWindow.execScript(sRun,’JavaScript’);
調用函數的方法就是execScript接口。如果函數不存在,或者運行錯誤會(huì )觸發(fā)腳本錯誤異常
//獲得frame對象數組frames
frames:=wb.OleObject.document.frames;
for i:=0 to frames.length do
memo1.lines.Add(frames[i].document.body.innerHTML);
注意: 每個(gè)iframe下載完畢都會(huì )觸發(fā)DocumentComplete事件,所以一個(gè)頁(yè)面在真正下載完畢前可能被觸發(fā)多次!
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
if WebBrowser1.Application = pDisp then showmessage(’頁(yè)面已全部下載完畢’)
end;
GoBack:方法,后退到上一個(gè)頁(yè)面。
GoForward:方法,前進(jìn)到下一個(gè)頁(yè)面。
GoHome:方法,調用默認的主頁(yè)頁(yè)面,該頁(yè)面在IE的選項中設定。
GoSearch:方法,調用默認的搜索頁(yè)面,該頁(yè)面在IE的選項中設定。
Navigate(const URL: WideString; var Flags, TargetFrameName, PostData,
Headers: OleVariant):方法,調用指定頁(yè)面,具體參數如下:
URL:指定頁(yè)面的URL。 Flags:Word類(lèi)型,作用還不清楚,可設為0。
TargetFrameName:WideString,打開(kāi)頁(yè)面所在的Frame,為空字符串時(shí)在當前的
Frame中打開(kāi);TargetFrameName指定的Frame存在時(shí)在Frame中打開(kāi);
TargetFrameName指定的Frame不存在時(shí)則新建一個(gè)窗口打開(kāi),此時(shí)就相當
于調用外部的IE瀏覽器了。
PostData:boolean,是否允許發(fā)送數據。
Headers:WideString,要發(fā)送的URL請求的頭部數據。
Refresh:方法,刷新當前頁(yè)面。
Stop:方法,停止調用或打開(kāi)當前頁(yè)面。
LocationName:屬性(WideString),當前位置的名稱(chēng)。
LocationURL:屬性(WideString),當前位置的URL。
Busy: 屬性(Boolean),是否正忙。
Visible: 屬性(Boolean),瀏覽器窗口是否可見(jiàn)。
(以下屬性為在TWebBrowser新增,TWebBrowser_V1中沒(méi)有,其作用有待探索)
StatusBar: 屬性(Boolean),是否顯示狀態(tài)欄。
StatusText: 屬性(WideString),狀態(tài)欄內容。
ToolBar: 屬性(SYSINT),工具欄中的內容。
MenuBar: 屬性(Boolean),是否顯示菜單條。
FullScreen: 屬性(Boolean),是否全屏顯示。
Offline: 屬性(Boolean),是否脫機瀏覽。
AddressBar: 屬性(Boolean),是否顯示地址欄。
TWebBrowser的常見(jiàn)事件主要有:
OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object;
在狀態(tài)欄提示信息變化時(shí)發(fā)生,參數Text為當前狀態(tài)欄提示信息,我們可以根據該信息
來(lái)更新我們自己的狀態(tài)欄提示信息或處理其它的事務(wù).
OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object;
在打開(kāi)頁(yè)面的進(jìn)度變化時(shí)發(fā)生,參數Progress為當前進(jìn)度,ProgressMax為總進(jìn)度,我們
可以根據這兩個(gè)參數來(lái)更新我們自己的狀態(tài)欄提示信息或處理其它的事務(wù).
OnCommandStateChange = procedure(Sender: TObject; Command: Integer; Enable: WordBool) of object;
當執行新的命令時(shí)發(fā)生,Command為命令標識,Enable為是否允許執行該命令.
OnTitleChange = procedure(Sender: TObject; const Text: WideString) of object;
在頁(yè)面的標題發(fā)生變化時(shí)發(fā)生,Text為當前標題.
OnPropertyChange = procedure(Sender: TObject; const Property_: WideString) of object;
在頁(yè)面的屬性發(fā)生變化時(shí)發(fā)生,Property_為屬性名稱(chēng)
OnDownloadComplete: TNotifyEvent
在下載頁(yè)面完成后發(fā)生.
OnDownloadBegin: TNotifyEvent
在下載頁(yè)面開(kāi)始前發(fā)生.
在uses中添加ActiveX
var
StrStream:TStringStream;
SetNoteStr: string;
begin
SetNoteStr :=’<body bgcolor=222222 align=center><br><p align=center><font size=+2 color=#FFFFFF>谷歌 http://www.google.com</font></p>’ ;
SetNoteStr :=SetNoteStr+’<br><p align=center><font size=+2 color=#FFFFFF>實(shí)現webbrowser控件中顯示動(dòng)態(tài)html的程序代碼</font></p>’;
StrStream:=TStringStream.Create(SetNoteStr);
WebBrowser1.Navigate(’about:blank’);
try
StrStream.Position:=0;
( WebBrowser1.Document as IPersistStreamInit).Load(TStreamadapter.Create(StrStream));
finally
StrStream.Free;
end;
end;
初始化和終止化(Initialization & Finalization)
大家在執行TWebBrowser的某個(gè)方法以進(jìn)行期望的操作,如ExecWB等的時(shí)候可能都碰到過(guò)“試圖激活未注冊的丟失目標”或“OLE對象未注冊”等錯誤,或者并沒(méi)有出錯但是得不到希望的結果,比如不能將選中的網(wǎng)頁(yè)內容復制到剪貼板等。以前用它編程的時(shí)候,我發(fā)現ExecWB有時(shí)侯起作用但有時(shí)侯又不行,在Delphi生成的缺省工程主窗口上加入TWebBrowser,運行時(shí)并不會(huì )出現“OLE對象未注冊”的錯誤。同樣是一個(gè)偶然的機會(huì ),我才知道OLE對象需要初始化和終止化(懂得的東東實(shí)在太少了)?!?/p>
Initialization OleInitialize(nil);
finalization
try
OleUninitialize;
except
end;
去掉滾動(dòng)條的方法:核心代碼:WebBrowser1.oleobject.Document.body.Scroll:= ‘no’; 利用這個(gè)代碼去掉滾動(dòng)條的前提是webbrowser中必須有打開(kāi)的網(wǎng)頁(yè),也就是在網(wǎng)頁(yè)加載完完畢后再去掉滾動(dòng)條。所以首先要判斷頁(yè)面是否加載完畢,如果加載完畢,就執行上面的語(yǔ)句去掉滾動(dòng)條。
第一步:在WebBrowser1DocumentComplete事件中置一個(gè)標志tag:=1(代表加載完畢) 代碼如下:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch;
var URL: OleVariant);
begin
tag:=1; //去掉Webbrowser1滾動(dòng)條的標志
end;
第二步:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var Doc: IHTMLDocument2;
begin
tag := 0; //去掉Webbrowser1滾動(dòng)條的標志
WebBrowser1.Navigate2(’http://www.163.com’);
while(tag=0)
do Application.ProcessMessages;
WebBrowser1.oleobject.Document.body.Scroll := ‘no’;
end;
注意:使用前必須在uses中加入mshtml;
==========================題外話(huà) //去掉滾動(dòng)條后如何翻頁(yè)呢?用如下代碼
var Doc: IHTMLDocument2;
begin
Doc :=WebBrowser1.Document as IHTMLDocument2;
Doc.Get_ParentWindow.Scroll(x,y);
end; ^^^你要滾動(dòng)的位置
webbrowser不彈出錯誤提示框
設置一下這個(gè)屬性:webbrowser1.silent :=true
讓W(xué)ebbrowser中的鏈接點(diǎn)擊時(shí)在自身窗口打開(kāi)
在WebBrowser的NewWindow2事件中設置代碼:
procedure TForm1.WebBrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
begin // 將新視窗在自身開(kāi)啟
ppdisp := webBrowser.Application;
end;
屏蔽WebBrower的右鍵菜單
放一個(gè)ApplicationEvents控件,在A(yíng)pplicationEvents的事件OnMessage中設置如下代碼: (ApplicationEvents控件在delphi中的additional選項卡上找)
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin //屏敝網(wǎng)頁(yè)右鍵
if Msg.message = WM_RBUTTONDOWN then
begin
//如果去掉下面這行就是屏蔽右鍵菜單,現在為自定義右鍵菜單 //
popupmenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
Handled := True;
end;
end;
聯(lián)系客服