天天看點

WebBrowser控件使用詳解

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chinahuyong/article/details/4022770

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

End Sub

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

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()

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

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

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

   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

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

        '.Navigate2 "

為什麼他說我

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

.CreateMHTMLBody "

http://www.163.com/

";, , _

"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

    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

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

Option Explicit

    Dim ObjSUH As New ShellUIHelper

    ObjSUH.AddFavorite "

", "CSDN"

    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

    WebBrowser1.Navigate "

http://www.applevb.com

11、頁面滾動:

    WebBrowser1.Document.parentwindow.scrollby 0, 30

     WebBrowser1.Navigate "

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

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

    WebBrowser1.GoForward

    WebBrowser1.GoBack

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是後退按鈕。

繼續閱讀