WebBrowser控件使用詳解
WebBrowser控件使用詳解
方法 說明
GoBack 相當于IE的“后退”按鈕,使你在當前歷史列表中后退一項
GoForward 相當于IE的“前進”按鈕,使你在當前歷史列表中前進一項
GoHome 相當于IE的“主頁”按鈕,連接用戶默認的主頁
GoSearch 相當于IE的“搜索”按鈕,連接用戶默認的搜索頁面
Navigate 連接到指定的URL
Refresh 刷新當前頁面
Refresh2 同上,只是可以指定刷新級別,所指定的刷新級別的值來自RefreshConstants枚舉表,
該表定義在ExDisp.h中,可以指定的不同值如下:
REFRESH_NORMAL 執行簡單的刷新,不將HTTP pragma: no-cache頭發送給服務器
REFRESH_IFEXPIRED 只有在網頁過期后才進行簡單的刷新
REFRESH_CONTINUE 僅作內部使用。在MSDN里寫著DO NOT USE! 請勿使用
REFRESH_COMPLETELY 將包含pragma: no-cache頭的請求發送到服務器
Stop 相當于IE的“停止”按鈕,停止當前頁面及其內容的載入
屬性 說明
Application 如果該對象有效,則返回掌管WebBrowser控件的應用程序實現的自動化對象(IDispatch)。如果在宿主對象中自動化對象無效,這個程序將返回WebBrowser
控件的自動化對象
Parent 返回WebBrowser控件的父自動化對象,通常是一個容器,例如是宿主或IE窗口
Container 返回WebBrowser控件容器的自動化對象。通常該值與Parent屬性返回的值相同
Document 為活動的文檔返回自動化對象。如果HTML當前正被顯示在WebBrowser中,則
Document屬性提供對DHTML Object Model的訪問途徑
TopLevelContainer 返回一個Boolean值,表明IE是否是WebBrowser控件頂層容器,是就返回true
Type 返回已被WebBrowser控件加載的對象的類型。例如:如果加載.doc文件,就會返
回Microsoft Word Document
Left 返回或設置WebBrowser控件窗口的內部左邊與容器窗口左邊的距離
Top 返回或設置WebBrowser控件窗口的內部左邊與容器窗口頂邊的距離
Width 返回或設置WebBrowser窗口的寬度,以像素為單位
Height 返回或設置WebBrowser窗口的高度,以像素為單位
LocationName 返回一個字符串,該字符串包含著WebBrowser當前顯示的資源的名稱,如果資源
是網頁就是網頁的標題;如果是文件或文件夾,就是文件或文件夾的名稱
LocationURL 返回WebBrowser當前正在顯示的資源的URL
Busy 返回一個Boolean值,說明WebBrowser當前是否正在加載URL,如果返回true
就可以使用stop方法來撤銷正在執行的訪問操作
WebBrowser 的事件
Private Events Description
BeforeNavigate2 導航發生前激發,刷新時不激發
CommandStateChange 當命令的激活狀態改變時激發。它表明何時激活或關閉Back和Forward
菜單項或按鈕
DocumentComplete 當整個文檔完成是激發,刷新頁面不激發
DownloadBegin 當某項下載操作已經開始后激發,刷新也可激發此事件
DownloadComplete 當某項下載操作已經完成后激發,刷新也可激發此事件
NavigateComplete2 導航完成后激發,刷新時不激發
NewWindow2 在創建新窗口以前激發
OnFullScreen 當FullScreen屬性改變時激發。該事件采用VARIENT_BOOL的一個輸
入參數來指示IE是全屏顯示方式(VARIENT_TRUE)還是普通顯示方式(VARIENT_FALSE)
OnMenuBar 改變MenuBar的屬性時激發,標示參數是VARIENT_BOOL類型的。
VARIANT_TRUE是可見,VARIANT_ FALSE是隱藏
OnQuit 無論是用戶關閉瀏覽器還是開發者調用Quit方法,當IE退出時就會激發
OnStatusBar 與OnMenuBar調用方法相同,標示狀態欄是否可見。
OnToolBar 調用方法同上,標示工具欄是否可見。
OnVisible 控制窗口的可見或隱藏,也使用一個VARIENT_BOOL類型的參數
StatusTextChange 如果要改變狀態欄中的文字,這個事件就會被激發,但它并不理會程序是否有狀態欄
TitleChange Title有效或改變時激發
一些使用技巧
1.禁止右鍵
看到很多關于WebBrowser控件禁止右鍵的提問,回復的方法很多,其中有提到使用微軟提供的Webbrowser擴展COM服務器對象(WBCustomizer.dll),但是該方法在我們想使用Webbrowser編輯網頁(Webbrowser1.Document.execCommand "editMode")的時候有很多弊端,比如不能顯示選中的文本等。另有些方法也就不用一一列舉了。
這兒我想提到的是關于MSHTML.HTMLDocument
引用Microsoft HTML OBject Library
Rem #窗體代碼#
Dim WithEvents M_Dom As MSHTML.HTMLDocument
Private Function M_Dom_oncontextmenu() As Boolean
M_Dom_oncontextmenu = False
End Function
Private Sub Webbrowser1_DownloadComplete()
Set M_Dom = Webbrowser1.Document
End Sub
Rem 好了,右鍵菜單沒有了
=========================================================================
2、控件調用和獲得收藏夾里面
基本上用 specialfolder(6 ) 就可以得到收藏夾的路徑, 然后你可以用dir去循環讀入每個目錄,然后dir里面的file, file的名字就是你要的收藏的名字, 路徑可以自己根據從上面得到的路徑去得到.
如果你不用dir也可以用vb的dir控件.
Private Type SHITEMID
cb As Long
abID As Byte
End Type
Public Type ITEMIDLIST
mkid As SHITEMID
End Type
Public Function SpecialFolder(ByRef CSIDL As Long) As String
'locate the favorites folder
Dim R As Long
Dim sPath As String
Dim IDL As ITEMIDLIST
Const NOERROR = 0
Const MAX_LENGTH = 260
R = SHGetSpecialFolderLocation(MDIMain.hwnd, CSIDL, IDL)
If R = NOERROR Then
sPath = Space$(MAX_LENGTH)
R = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath)
If R Then
SpecialFolder = Left$(sPath, InStr(sPath, vbNullChar) - 1)
End If
End If
End Function
=============================================================
3、全屏
是的,webbrowser本生是一個控件, 你要它全屏,就是要它所在的窗體全屏, 可以用setwindowlong取消窗體的 title, 用Call ShowWindow(FindWindow("Shell_traywnd", ""), 0) 隱藏tray,就是下邊那個包含開始那一行. 用Call ShowWindow(FindWindow("Shell_traywnd", ""), 9) 恢復. 夠詳細了吧.
然后在form1.windowstate = 2 就可以了.
================================================================================
4、選擇網頁上的內容。
Private Sub Command1_Click()
'請先選中一些內容
Me.WebBrowser1.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT
MsgBox Clipboard.GetText
End Sub
==========================================================================
5、用IE來下載文件
Private Declare Function DoFileDownload Lib "shdocvw.dll" (ByVal lpszFile As String) As Long
Private Sub Command1_Click()
Dim sDownload As String
sDownload = StrConv(Text1.Text, vbUnicode)
Call DoFileDownload(sDownload)
End Sub
Private Sub Form_Load()
Text1.Text = "http://www.chat.ru/~softdaily/fo-ag162.zip"
Form1.Caption = "Audiograbber 1.62 Full"
Text2.Text = "http://www6.50megs.com/audiograbber/demos/cr-ag161.zip"
End Sub
=======================================================================
6、我要動態加載和刪除WebBrowser控件應該怎么做?
Private Sub Command1_Click()
Form1.Controls.Add "shell.explorer.2", "NewWeb", Form1
With Form1!NewWeb
.Visible = True
.Width = 10000
.Height = 10000
.Left = 0
.Top = 0
.Navigate2 "www.csdn.net"
End With
End Sub
Private Sub Command2_Click()
Controls.Remove Form1!newweb
End Sub
Form1.Controls.Add "shell.explorer.2", newweb(newweb.Count), Form1
With Form1!newweb(newweb.Count)
.Visible = True
.Width = 1000
.Height = 1000
.Left = newweb(newweb.Count - 1).Left + newweb(newweb.Count - 1).Width
.Top = 0
'.Navigate2 "www.csdn.net"
End With
為什么他說我
Form1.Controls.Add "shell.explorer.2", newweb(newweb.Count), Form1
這一行錯誤13 類型不匹配?
ps:我在form中已經有了一個newweb(0)控件
先為一個WebBrowser
Dim i As Integer
Private Sub AddWeb_Click()
For i = 1 To 10
Load NewWeb(i)
NewWeb(i).Top = i * 100
NewWeb(i).Left = i * 100
NewWeb(i).Visible = True
Next i
End Sub
Private Sub DelWeb_Click()
For i = 1 To 10
Unload NewWeb(i)
Next i
End Sub
=======================================================
7、一個把頁面保存為MHT(即MHTML)文件
將 pcwak(書劍狂生[MS MVP]) 大俠提供的資料貼出來,以供大家參考:
我終于找到一個把頁面保存為MHT(即MHTML)文件的方法了!
首先,在工程中必須要引用一個庫:
Library CDO
D:/WINNT/System32/cdosys.dll
Microsoft CDO for Windows 2000 Library
其次,需要Stream對應的接口的支持,如果你一時找不到就使用支持這個的較新的ADO就行了,如
Library ADODB
D:/Program Files/Common Files/system/ado/msado15.dll
Microsoft ActiveX Data Objects 2.5 Library
代碼如下,十分簡單(同時由于流的特點,顯示在實際應用中沒必要象本例中那樣把文件保存到磁盤上就可直接轉換為字符串或字節數組什么的處理的。
另,對于Microsoft CDO for Windows 2000 Library這個庫,在WIN98中要怎么使用還沒試過,感興趣的朋友可以試試并跟帖,以豐富完善其內容:)
Private Sub Command1_Click()
' Reference to Microsoft ActiveX Data Objects 2.5 Library
' Reference to Microsoft CDO for Windows 2000 Library
Dim iMsg As New CDO.Message
Dim iConf As New CDO.Configuration
Dim objStream As ADODB.Stream
With iMsg
.CreateMHTMLBody "http://www.163.com/";, , _
"domain/username", _
"password"
Set objStream = .GetStream
Call objStream.SaveToFile("f:/test.mht", adSaveCreateOverWrite)
End With
End Sub
2、
'首先加入對ADODB和CDO(Microsoft CDO for Windows 2000 Library,對應文件名為CDOSYS.dll)的引用
Private Sub Command1_Click()
Dim message As New CDO.message
Dim Outstream As ADODB.Stream
On Error GoTo myerr1
Call message.CreateMHTMLBody("http://www.csdn.net", CDO.CdoMHTMLFlags.cdoSuppressNone, "", "")
Set Outstream = message.GetStream
Call Outstream.SaveToFile("c:/test.mht", ADODB.SaveOptionsEnum.adSaveCreateOverWrite)
MsgBox "完成"
Exit Sub
myerr1:
Set message = Nothing
Set Outstream = Nothing
End Sub
=======================================================
8、在WebBrowser控件調用收藏夾和在收藏夾里添加收藏
Option Explicit
Private Sub Command1_Click()
Dim ObjSUH As New ShellUIHelper
ObjSUH.AddFavorite "http://www.csdn.net", "CSDN"
Set ObjSUH = Nothing
End Sub
=========================================================
9、如何使網頁不出現滾動條:
Private Sub mnuScroll1_Click()
'注意:必須在網頁完全顯示之后才可以運行
WebBrowser1.Document.body.Scroll = "no" '不顯示滾動條的辦法
End Sub
Private Sub mnuScroll2_Click()
'注意:必須在網頁完全顯示之后才可以運行
WebBrowser1.Document.body.Scroll = "Auto" '顯示滾動條的辦法
End Sub
==============================================================
10、如何獲得網頁中被選中部分的HTML:
Private Sub Command1_Click()
Dim objSelection
Dim objTxtRange
Set objSelection = WebBrowser1.Document.selection
If Not (objSelection Is Nothing) Then
Set objTxtRange = objSelection.createRange
If Not (objTxtRange Is Nothing) Then
Debug.Print objTxtRange.htmlText
Set objTxtRange = Nothing
End If
Set objSelection = Nothing
End If
End Sub
Private Sub Form_Load()
WebBrowser1.Navigate "http://www.applevb.com"
End Sub
11、頁面滾動:
Private Sub Command2_Click()
WebBrowser1.Document.parentwindow.scrollby 0, 30
End Sub
Private Sub Form_Load()
WebBrowser1.Navigate "http://www.applevb.com"
End Sub
點擊Command2就可以使當前頁面向下滾動30像素
12、判斷頁面是否可以前進后退
Private Sub Command1_Click()
WebBrowser1.GoForward
End Sub
Private Sub Command2_Click()
WebBrowser1.GoBack
End Sub
Private Sub Form_Load()
WebBrowser1.Navigate "http://www.applevb.com"
End Sub
Private Sub WebBrowser1_CommandStateChange(ByVal Command As Long, ByVal Enable As Boolean)
If (Command = CSC_NAVIGATEBACK) Then
Command2.Enabled = Enable
End If
If (Command = CSC_NAVIGATEFORWARD) Then
Command1.Enabled = Enable
End If
End Sub
上面的command1是前進按鈕,command2是后退按鈕。
作者:
RDIF
出處:
http://www.rzrgm.cn/huyong/
Email:
406590790@qq.com
QQ:
406590790
微信:
13005007127(同手機號)
框架官網:
http://www.guosisoft.com/
http://www.rdiframework.net/
框架其他博客:
http://blog.csdn.net/chinahuyong
http://www.rzrgm.cn/huyong
國思RDIF開發框架
,
給用戶和開發者最佳的.Net框架平臺方案,為企業快速構建跨平臺、企業級的應用提供強大支持。
關于作者:系統架構師、信息系統項目管理師、DBA。專注于微軟平臺項目架構、管理和企業解決方案,多年項目開發與管理經驗,曾多次組織并開發多個大型項目,在面向對象、面向服務以及數據庫領域有一定的造詣。現主要從事基于
RDIF
框架的技術開發、咨詢工作,主要服務于金融、醫療衛生、鐵路、電信、物流、物聯網、制造、零售等行業。
如有問題或建議,請多多賜教!
本文版權歸作者和CNBLOGS博客共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,可以通過微信、郵箱、QQ等聯系我,非常感謝。

浙公網安備 33010602011771號