標籤:des blog http color io os 使用 ar java
1>調用網頁中已知對象
src := WebBrowser1.OleObject.document.getElementByIdx(’id1′).src 其實就是javascript中的 getElementByID 的函數
2>獲得網頁中的某個變數值
Html中的代碼 : <script> var userID=123</script> 在delphi程式中這麼調用 id := Form1.WebBrowser1.OleObject.Document.script.userID userID變數可以是javascript定義的,也可以是vbscript定義的。如果Webbrowser1中找不到該變數,調用會觸發一個例外狀況事件,即變數userID不存在
3>調用網頁中的函數
sRun := ‘userID = getNextID(userID)’+#13#10; Form1.WebBrowser1.OleObject.Document.parentWindow.execScript(sRun,’JavaScript’); 調用函數的方法就是execScript介面。如果函數不存在,或者運行錯誤會觸發指令碼錯誤異常
4>擷取頁面中所有的frame
//獲得frame對象數組frames frames:=wb.OleObject.document.frames; for i:=0 to frames.length do memo1.lines.Add(frames[i].document.body.innerHTML);
5>如果頁面中存在iframe,如何判斷頁面是否完全下載結束
注意: 每個iframe下載完畢都會觸發DocumentComplete事件,所以一個頁面在真正下載完畢前可能被觸發多次! procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin if WebBrowser1.Application = pDisp then showmessage(’頁面已全部下載完畢’) end;
6>WebBrowser的常見屬性和方法主要有
GoBack:方法,後退到上一個頁面。 GoForward:方法,前進到下一個頁面。 GoHome:方法,調用預設的首頁頁面,該頁面在IE的選項中設定。 GoSearch:方法,調用預設的搜尋網頁面,該頁面在IE的選項中設定。 Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方法,調用指定頁面,具體參數如下: URL:指定頁面的URL。 Flags:Word類型,作用還不清楚,可設為0。 TargetFrameName:WideString,開啟頁面所在的Frame,為空白字串時在當前的 Frame中開啟;TargetFrameName指定的Frame存在時在Frame中開啟; TargetFrameName指定的Frame不存在時則建立一個視窗開啟,此時就相當 於調用外部的IE瀏覽器了。 PostData:boolean,是否允許發送資料。 Headers:WideString,要發送的URL請求的頭部資料。 Refresh:方法,重新整理當前頁面。 Stop:方法,停止調用或開啟當前頁面。 LocationName:屬性(WideString),當前位置的名稱。 LocationURL:屬性(WideString),當前位置的URL。 Busy: 屬性(Boolean),是否正忙。 Visible: 屬性(Boolean),瀏覽器視窗是否可見。 (以下屬性為在TWebBrowser新增,TWebBrowser_V1中沒有,其作用有待探索) StatusBar: 屬性(Boolean),是否顯示狀態列。 StatusText: 屬性(WideString),狀態列內容。 ToolBar: 屬性(SYSINT),工具列中的內容。 MenuBar: 屬性(Boolean),是否顯示菜單條。 FullScreen: 屬性(Boolean),是否全螢幕顯示。 Offline: 屬性(Boolean),是否離線瀏覽。 AddressBar: 屬性(Boolean),是否顯示地址欄。 TWebBrowser的常見事件主要有: OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object; 在狀態列提示資訊變化時發生,參數Text為目前狀態欄提示資訊,我們可以根據該資訊 來更新我們自己的狀態列提示資訊或處理其它的事務. OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object; 在開啟頁面的進度變化時發生,參數Progress為當前進度,ProgressMax為總進度,我們 可以根據這兩個參數來更新我們自己的狀態列提示資訊或處理其它的事務. OnCommandStateChange = procedure(Sender: TObject; Command: Integer; Enable: WordBool) of object; 當執行新的命令時發生,Command為命令標識,Enable為是否允許執行該命令. OnTitleChange = procedure(Sender: TObject; const Text: WideString) of object; 在頁面的標題發生變化時發生,Text為當前標題. OnPropertyChange = procedure(Sender: TObject; const Property_: WideString) of object; 在頁面的屬性發生變化時發生,Property_為屬性名稱 OnDownloadComplete: TNotifyEvent 在下載頁面完成後發生. OnDownloadBegin: TNotifyEvent 在下載頁面開始前發生.
7>在webbrowser控制項中顯示動態html代碼
在uses中添加ActiveX var StrStream:TStringStream; SetNoteStr: string; begin SetNoteStr :=’<body bgcolor=222222 align=center><br><p align=center><font size=+2 color=#FFFFFF>Google http://www.google.com</font></p>’; SetNoteStr :=SetNoteStr+’<br><p align=center><font size=+2 color=#FFFFFF>實現webbrowser控制項中顯示動態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;
8>其它
初始化和終止化(Initialization & Finalization)
大家在執行TWebBrowser的某個方法以進行期望的操作,如ExecWB等的時候可能都碰到過“試圖啟用未註冊的丟失目標”或“OLE對象未注 冊”等錯誤,或者並沒有出錯但是得不到希望的結果,比如不能將選中的網頁內容複寫到剪貼簿等。以前用它編程的時候,我發現ExecWB有時侯起作用但有時 侯又不行,在Delphi產生的預設工程主視窗上加入TWebBrowser,運行時並不會出現“OLE對象未註冊”的錯誤。同樣是一個偶然的機會,我才 知道OLE對象需要初始化和終止化(懂得的東東實在太少了)。
Initialization OleInitialize(nil);
finalization
try
OleUninitialize;
except
end;
去 掉捲軸的方法:核心代碼:WebBrowser1.oleobject.Document.body.Scroll:= ‘no’; 利用這個代碼去掉捲軸的前提是webbrowser中必須有開啟的網頁,也就是在網頁載入完完畢後再去掉捲軸。所以首先要判斷頁面是否載入完畢,如果 載入完畢,就執行上面的語句去掉捲軸。
第一步:在WebBrowser1DocumentComplete事件中置一個標誌tag:=1(代表載入完畢) 代碼如下:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch;
var URL: OleVariant);
begin
tag:=1; //去掉Webbrowser1捲軸的標誌
end;
第二步:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var Doc: IHTMLDocument2;
begin
tag := 0; //去掉Webbrowser1捲軸的標誌
WebBrowser1.Navigate2(’http://www.163.com’);
while(tag=0)
do Application.ProcessMessages;
WebBrowser1.oleobject.Document.body.Scroll := ‘no’;
end;
注意:使用前必須在uses中加入mshtml;
==========================題外話 //去掉捲軸後如何翻頁呢?用如下代碼
var Doc: IHTMLDocument2;
begin
Doc :=WebBrowser1.Document as IHTMLDocument2;
Doc.Get_ParentWindow.Scroll(x,y);
end; ^^^你要滾動的位置
webbrowser不彈出錯誤提示框
設定一下這個屬性:webbrowser1.silent :=true
讓Webbrowser中的連結點擊時在自身視窗開啟
在WebBrowser的NewWindow2事件中設定代碼:
procedure TForm1.WebBrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
begin // 將新視窗在自身開啟
ppdisp := webBrowser.Application;
end;
屏蔽WebBrower的右鍵菜單
放一個ApplicationEvents控制項,在ApplicationEvents的事件OnMessage中設定如下代碼: (ApplicationEvents控制項在delphi中的additional選項卡上找)
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin //屏敝網頁右鍵
if Msg.message = WM_RBUTTONDOWN then
begin
//如果去掉下面這行就是屏蔽右鍵菜單,現在為自訂右鍵菜單 //
popupmenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
Handled := True;
end;
end;
轉自:http://julyzergcn.iteye.com/blog/1462417
Delphi中WebBrowser的提示匯總