天天看點

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

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

=============================================================

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

==========================================================================

5、用IE來下載下傳檔案

Private Declare Function DoFileDownload Lib "shdocvw.dll" (ByVal lpszFile As String) As Long

    Dim sDownload As String

    sDownload = StrConv(Text1.Text, vbUnicode)

    Call DoFileDownload(sDownload)

Private Sub Form_Load()

Form1.Caption = "Audiograbber 1.62 Full"

=======================================================================

6、我要動态加載和删除WebBrowser控件應該怎麼做?

    Form1.Controls.Add "shell.explorer.2", "NewWeb", Form1

     With Form1!NewWeb

         .Visible = True

         .Width = 10000

         .Height = 10000

         .Left = 0

         .Top = 0

     End With

Private Sub Command2_Click()

      Controls.Remove Form1!newweb

Form1.Controls.Add "shell.explorer.2", newweb(newweb.Count), Form1

     With Form1!newweb(newweb.Count)

         .Width = 1000

         .Height = 1000

         .Left = newweb(newweb.Count - 1).Left + newweb(newweb.Count - 1).Width

為什麼他說我

這一行錯誤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

Private Sub DelWeb_Click()

         Unload NewWeb(i)

=======================================================

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中要怎麼使用還沒試過,感興趣的朋友可以試試并跟帖,以豐富完善其内容:)

' 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

"domain\username", _

"password"

Set objStream = .GetStream

Call objStream.SaveToFile("f:\test.mht", adSaveCreateOverWrite)

End With

2、

'首先加入對ADODB和CDO(Microsoft CDO for Windows 2000 Library,對應檔案名為CDOSYS.dll)的引用

     Dim message As New CDO.message

     Dim Outstream As ADODB.Stream

     On Error GoTo myerr1

     Set Outstream = message.GetStream

     Call Outstream.SaveToFile("c:\test.mht", ADODB.SaveOptionsEnum.adSaveCreateOverWrite)

     MsgBox "完成"

     Exit Sub

myerr1:

     Set message = Nothing

     Set Outstream = Nothing

8、在WebBrowser控件調用收藏夾和在收藏夾裡添加收藏

Option Explicit

     Dim ObjSUH As New ShellUIHelper

     Set ObjSUH = Nothing

=========================================================

9、如何使網頁不出現滾動條:

Private Sub mnuScroll1_Click()

'注意:必須在網頁完全顯示之後才可以運作

     WebBrowser1.Document.body.Scroll = "no" '不顯示滾動條的辦法

Private Sub mnuScroll2_Click()

     WebBrowser1.Document.body.Scroll = "Auto" '顯示滾動條的辦法

==============================================================

10、如何獲得網頁中被選中部分的HTML:

     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

         Set objSelection = Nothing

11、頁面滾動:

     WebBrowser1.Document.parentwindow.scrollby 0, 30

      WebBrowser1.Navigate "http://www.applevb.com"

點選Command2就可以使目前頁面向下滾動30像素

12、判斷頁面是否可以前進後退

     WebBrowser1.GoForward

     WebBrowser1.GoBack

     WebBrowser1.Navigate "http://www.applevb.com"

Private Sub WebBrowser1_CommandStateChange(ByVal Command As Long, ByVal Enable As Boolean)

     If (Command = CSC_NAVIGATEBACK) Then

         Command2.Enabled = Enable

     If (Command = CSC_NAVIGATEFORWARD) Then

         Command1.Enabled = Enable

上面的command1是前進按鈕,command2是後退按鈕

繼續閱讀