16,553
社区成员
发帖
与我相关
我的任务
分享
Public Sub NavigateComplete2(ByRef pDisp As Object, ByRef URL As Object) Implements DWebBrowserEvents2.NavigateComplete2
' Raise the NavigateComplete2 event
Me.parent.OnNavigateComplete2( _
New WebBrowserNavigateComplete2EventArgs( _
CStr(URL)))
End Sub
Imports System
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Imports System.Security.Permissions
<Microsoft.VisualBasic.ComClass()> _
<System.Runtime.InteropServices.ComVisible(True)> _
<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
Public Class ExtendedWebBrowser
Inherits WebBrowser
Private cookie As AxHost.ConnectionPointCookie
Private helper As WebBrowser2EventHelper
<PermissionSetAttribute(SecurityAction.LinkDemand, _
Name:="FullTrust")> Protected Overrides Sub CreateSink()
MyBase.CreateSink()
' Create an instance of the client that will handle the event
' and associate it with the underlying ActiveX control.
helper = New WebBrowser2EventHelper(Me)
cookie = New AxHost.ConnectionPointCookie( _
Me.ActiveXInstance, helper, GetType(DWebBrowserEvents2))
End Sub
<PermissionSetAttribute(SecurityAction.LinkDemand, _
Name:="FullTrust")> Protected Overrides Sub DetachSink()
' Disconnect the client that handles the event
' from the underlying ActiveX control.
If cookie IsNot Nothing Then
cookie.Disconnect()
cookie = Nothing
End If
MyBase.DetachSink()
End Sub
Public Event NavigateError As WebBrowserNavigateErrorEventHandler
Public Event BeforeNavigate2 As WebBrowserBeforeNavigate2EventHandler
Public Event NewWindow2 As WebBrowserNewWindow2EventHandler
Public Event NavigateComplete2 As WebBrowserNavigateComplete2EventHandler
Protected Overridable Sub OnNavigateError( _
ByVal e As WebBrowserNavigateErrorEventArgs)
RaiseEvent NavigateError(Me, e)
End Sub
Protected Overridable Sub OnBeforeNavigate2( _
ByVal e As WebBrowserBeforeNavigate2EventArgs)
RaiseEvent BeforeNavigate2(Me, e)
End Sub
Protected Overridable Sub OnNewWindow2( _
ByVal e As WebBrowserNewWindow2EventArgs)
RaiseEvent NewWindow2(Me, e)
End Sub
Protected Overridable Sub OnNavigateComplete2( _
ByVal e As WebBrowserNavigateComplete2EventArgs)
RaiseEvent NavigateComplete2(Me, e)
End Sub
' Handles the NavigateError event from the underlying ActiveX
' control by raising the NavigateError event defined in this class.
Private Class WebBrowser2EventHelper
Inherits StandardOleMarshalObject
Implements DWebBrowserEvents2
Private parent As ExtendedWebBrowser
Public Sub New(ByVal parent As ExtendedWebBrowser)
Me.parent = parent
End Sub
Public Sub NavigateError(ByVal pDisp As Object, _
ByRef URL As Object, ByRef frame As Object, _
ByRef statusCode As Object, ByRef cancel As Boolean) _
Implements DWebBrowserEvents2.NavigateError
' Raise the NavigateError event.
Me.parent.OnNavigateError( _
New WebBrowserNavigateErrorEventArgs( _
CStr(URL), CStr(frame), CInt(statusCode), cancel))
End Sub
Public Sub BeforeNavigate2(ByVal pDisp As Object, _
ByRef URL As Object, ByRef flags As Object, _
ByRef frame As Object, ByRef postData As Object, _
ByRef headers As Object, ByRef cancel As Boolean) _
Implements DWebBrowserEvents2.BeforeNavigate2
' Raise the BeforeNavigate2 event
Me.parent.OnBeforeNavigate2( _
New WebBrowserBeforeNavigate2EventArgs( _
CStr(URL), CStr(flags), CStr(frame), CStr(postData), CStr(headers), cancel))
End Sub
Public Sub NewWindow2(ByRef ppDisp As Object, _
ByRef cancel As Boolean) _
Implements DWebBrowserEvents2.NewWindow2
Dim e As New WebBrowserNewWindow2EventArgs(ppDisp)
Me.parent.OnNewWindow2(e)
ppDisp = e.ppDisp
cancel = e.Cancel
End Sub
Public Sub NavigateComplete2(ByVal pDisp As Object, ByRef URL As Object) Implements DWebBrowserEvents2.NavigateComplete2
' Raise the NavigateComplete2 event
Me.parent.OnNavigateComplete2( _
New WebBrowserNavigateComplete2EventArgs( _
CStr(URL)))
End Sub
End Class
End Class
' Represents the method that will handle the WebBrowser2.NavigateError event.
Public Delegate Sub WebBrowserNavigateErrorEventHandler(ByVal sender As Object, _
ByVal e As WebBrowserNavigateErrorEventArgs)
Public Delegate Sub WebBrowserBeforeNavigate2EventHandler(ByVal sender As Object, _
ByVal e As WebBrowserBeforeNavigate2EventArgs)
Public Delegate Sub WebBrowserNewWindow2EventHandler(ByVal sender As Object, _
ByVal e As WebBrowserNewWindow2EventArgs)
Public Delegate Sub WebBrowserNavigateComplete2EventHandler(ByVal sender As Object, _
ByVal e As WebBrowserNavigateComplete2EventArgs)
''' <summary>
''' BeforeNavigate2事件参数
''' </summary>
''' <remarks></remarks>
Public Class WebBrowserBeforeNavigate2EventArgs
Inherits EventArgs
Private urlValue As String
Private frameValue As String
Private flagsValue As String
Private postDataValue As String
Private headersValue As String
Private cancelValue As Boolean
Public Sub New( _
ByVal uRL As Object, ByVal flags As Object, _
ByVal targetFrameName As Object, ByVal postData As Object, _
ByVal headers As Object, ByVal cancel As Boolean)
Me.urlValue = uRL
Me.flagsValue = flags
Me.frameValue = targetFrameName
Me.postDataValue = postData
Me.headersValue = headers
Me.cancelValue = cancel
End Sub
Public Property Url() As String
Get
Return Me.urlValue
End Get
Set(ByVal value As String)
Me.urlValue = value
End Set
End Property
Public Property Flags() As String
Get
Return Me.flagsValue
End Get
Set(ByVal value As String)
Me.flagsValue = value
End Set
End Property
Public Property Frame() As String
Get
Return Me.frameValue
End Get
Set(ByVal value As String)
Me.frameValue = value
End Set
End Property
Public Property PostData() As String
Get
Return Me.postDataValue
End Get
Set(ByVal value As String)
Me.postDataValue = value
End Set
End Property
Public Property Headers() As String
Get
Return Me.headersValue
End Get
Set(ByVal value As String)
Me.headersValue = value
End Set
End Property
Public Property Cancel() As Boolean
Get
Return Me.cancelValue
End Get
Set(ByVal value As Boolean)
Me.cancelValue = value
End Set
End Property
End Class
Public Class WebBrowserNewWindow2EventArgs
Inherits System.ComponentModel.CancelEventArgs
Private ppDispValue As Object
Public Sub New(ByVal ppDisp As Object)
Me.ppDispValue = ppDisp
End Sub
Public Property ppDisp() As Object
Get
Return ppDispValue
End Get
Set(ByVal value As Object)
ppDispValue = value
End Set
End Property
End Class
' Provides data for the WebBrowser2.NavigateError event.
Public Class WebBrowserNavigateErrorEventArgs
Inherits EventArgs
Private urlValue As String
Private frameValue As String
Private statusCodeValue As Int32
Private cancelValue As Boolean
Public Sub New( _
ByVal url As String, ByVal frame As String, _
ByVal statusCode As Int32, ByVal cancel As Boolean)
Me.urlValue = url
Me.frameValue = frame
Me.statusCodeValue = statusCode
Me.cancelValue = cancel
End Sub
Public Property Url() As String
Get
Return urlValue
End Get
Set(ByVal value As String)
urlValue = value
End Set
End Property
Public Property Frame() As String
Get
Return frameValue
End Get
Set(ByVal value As String)
frameValue = value
End Set
End Property
Public Property StatusCode() As Int32
Get
Return statusCodeValue
End Get
Set(ByVal value As Int32)
statusCodeValue = value
End Set
End Property
Public Property Cancel() As Boolean
Get
Return cancelValue
End Get
Set(ByVal value As Boolean)
cancelValue = value
End Set
End Property
End Class
Public Class WebBrowserNavigateComplete2EventArgs
Inherits EventArgs
Private urlValue As String
Public Sub New(ByVal url As String)
Me.urlValue = url
End Sub
Public Property Url() As String
Get
Return urlValue
End Get
Set(ByVal value As String)
urlValue = value
End Set
End Property
End Class
<ComImport(), Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"), _
InterfaceType(ComInterfaceType.InterfaceIsIDispatch), _
TypeLibType(TypeLibTypeFlags.FHidden)> _
Public Interface DWebBrowserEvents2
<DispId(271)> Sub NavigateError( _
<InAttribute(), MarshalAs(UnmanagedType.IDispatch)> ByVal pDisp As Object, _
<InAttribute()> ByRef uRL As Object, _
<InAttribute()> ByRef frame As Object, _
<InAttribute()> ByRef statusCode As Object, _
<InAttribute(), OutAttribute()> ByRef cancel As Boolean)
<DispId(250)> Sub BeforeNavigate2( _
<InAttribute(), MarshalAs(UnmanagedType.IDispatch)> ByVal pDisp As Object, _
<InAttribute()> ByRef uRL As Object, _
<InAttribute()> ByRef flags As Object, _
<InAttribute()> ByRef targetFrameName As Object, _
<InAttribute()> ByRef postData As Object, _
<InAttribute()> ByRef headers As Object, _
<InAttribute(), OutAttribute()> ByRef cancel As Boolean)
<DispId(251)> Sub NewWindow2( _
<InAttribute(), OutAttribute(), MarshalAs(UnmanagedType.IDispatch)> ByRef ppDisp As Object, _
<InAttribute(), OutAttribute()> ByRef cancel As Boolean)
<DispId(252)> Sub NavigateComplete2( _
<InAttribute(), OutAttribute(), MarshalAs(UnmanagedType.IDispatch)> ByRef ppDisp As Object, _
<InAttribute()> ByRef uRL As Object)
End Interface
Imports System
Imports System.ComponentModel
Imports System.Collections.Generic
Imports System.Diagnostics
Imports System.Text
Namespace ExtendWebBrowserSample
Partial Public Class ExtendWebBrowser
Inherits System.Windows.Forms.WebBrowser
Private cookie As System.Windows.Forms.AxHost.ConnectionPointCookie
''vb.net不区分大小写,与系统提供的相同需改名
Private events1 As WebBrowserExtendedEvents
Public Sub New()
''不需要
'InitializeComponent()
End Sub
Public Sub New(ByVal container As IContainer)
container.Add(Me)
''不需要
'InitializeComponent()
End Sub
'This method will be called to give you a chance to create your own event sink
Protected Overloads Overrides Sub CreateSink()
'MAKE SURE TO CALL THE BASE or the normal events won't fire
MyBase.CreateSink()
events1 = New WebBrowserExtendedEvents(Me)
cookie = New System.Windows.Forms.AxHost.ConnectionPointCookie(Me.ActiveXInstance, events1, GetType(DWebBrowserEvents2))
End Sub
Protected Overloads Overrides Sub DetachSink()
If cookie IsNot Nothing Then
cookie.Disconnect()
cookie = Nothing
End If
MyBase.DetachSink()
End Sub
'This new event will fire when the page is navigating
Public Event BeforeNavigate As EventHandler
Public Event BeforeNewWindow As EventHandler
Protected Sub OnBeforeNewWindow(ByVal url As String, ByRef cancel As Boolean)
Dim args As New WebBrowserExtendedNavigatingEventArgs(url, Nothing)
''直接触发事件就可以了,不能赋值的
RaiseEvent BeforeNewWindow(Me, args)
cancel = args.Cancel
End Sub
Protected Sub OnBeforeNavigate(ByVal url As String, ByVal frame As String, ByRef cancel As Boolean)
Dim args As New WebBrowserExtendedNavigatingEventArgs(url, frame)
''直接触发事件就可以了,不能赋值的
RaiseEvent BeforeNavigate(Me, args)
'Pass the cancellation chosen back out to the events
cancel = args.Cancel
End Sub
'This class will capture events from the WebBrowser
Private Class WebBrowserExtendedEvents
Inherits System.Runtime.InteropServices.StandardOleMarshalObject
Implements DWebBrowserEvents2
''因为DWebBrowserEvents2是接口,所以用Implements
Private _Browser As ExtendWebBrowser
Public Sub New(ByVal browser As ExtendWebBrowser)
_Browser = browser
End Sub
'Implement whichever events you wish
Public Sub BeforeNavigate2(ByVal pDisp As Object, ByRef URL As Object, ByRef flags As Object, ByRef targetFrameName As Object, ByRef postData As Object, ByRef headers As Object, _
ByRef cancel As Boolean) Implements DWebBrowserEvents2.BeforeNavigate2
_Browser.OnBeforeNavigate(DirectCast(URL, String), DirectCast(targetFrameName, String), cancel)
End Sub
Public Sub NewWindow3(ByVal pDisp As Object, ByRef cancel As Boolean, ByRef flags As Object, ByRef URLContext As Object, ByRef URL As Object) Implements DWebBrowserEvents2.NewWindow3
_Browser.OnBeforeNewWindow(DirectCast(URL, String), cancel)
End Sub
End Class
<System.Runtime.InteropServices.ComImport(), System.Runtime.InteropServices.Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"), System.Runtime.InteropServices.InterfaceTypeAttribute(System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIDispatch), System.Runtime.InteropServices.TypeLibType(System.Runtime.InteropServices.TypeLibTypeFlags.FHidden)> _
Public Interface DWebBrowserEvents2
<System.Runtime.InteropServices.DispId(250)> _
Sub BeforeNavigate2(<System.Runtime.InteropServices.In(), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.IDispatch)> ByVal pDisp As Object, <System.Runtime.InteropServices.In()> ByRef URL As Object, <System.Runtime.InteropServices.In()> ByRef flags As Object, <System.Runtime.InteropServices.In()> ByRef targetFrameName As Object, <System.Runtime.InteropServices.In()> ByRef postData As Object, <System.Runtime.InteropServices.In()> ByRef headers As Object, _
<System.Runtime.InteropServices.In(), System.Runtime.InteropServices.Out()> ByRef cancel As Boolean)
<System.Runtime.InteropServices.DispId(273)> _
Sub NewWindow3(<System.Runtime.InteropServices.In(), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.IDispatch)> ByVal pDisp As Object, <System.Runtime.InteropServices.In(), System.Runtime.InteropServices.Out()> ByRef cancel As Boolean, <System.Runtime.InteropServices.In()> ByRef flags As Object, <System.Runtime.InteropServices.In()> ByRef URLContext As Object, <System.Runtime.InteropServices.In()> ByRef URL As Object)
End Interface
End Class
Public Class WebBrowserExtendedNavigatingEventArgs
Inherits CancelEventArgs
Private _Url As String
Public ReadOnly Property Url() As String
Get
Return _Url
End Get
End Property
Private _Frame As String
Public ReadOnly Property Frame() As String
Get
Return _Frame
End Get
End Property
Public Sub New(ByVal url As String, ByVal frame As String)
MyBase.New()
_Url = url
_Frame = frame
End Sub
End Class
End Namespace