【编者按】网学网ASP.net频道为大家收集整理了“WebBrowser控件捕捉DHTML事件“提供大家参考,希望对大家有所帮助!
和其他控件一样,我们可以用WebBrowser控件来构筑Windows form应用程序。从工具箱中选择Windows 窗体控件组,单击“Microsoft Web 浏览器”,Visual Studio .NET 在后台使用AxImp.exe工具创建ActiveX 控件,控件名字为“AxWebBrowser”。在VB.NET中,不能直接使用COM组件,COM都是Unmanaged Code,在VB.NET中使用这些组件,必须完成从Unmanaged Code到Managed Code的转换。
一般地,你可以像使用原来的WebBrowser控件一样,如call 方法,指定属性,捕捉事件等。
有些事情并不是那么简单的。我们要捕捉页面事件,如当用户点击页面元素(如背景)时,引发页面元素的onclick事件。发果没有捕捉到事件,就要提升DHTML的等级,直到Document对象的最高层次。这样,我们就能捕捉到任何事件了。在VB6中,我们可以简单地用WithEvents关键词指定WebBrowser.Document到MSHTML.HTMLDocument。
在VB.NET中,这个简单方法不再有效。因为ActiveX控件创建了两个接口,两个接口中使用了同样的方法名,导致出现运行时错误。所以,你必须明确指定Document对象使用的接口,并创建事件处理句柄(呵呵,tuenhai翻译得还不错吧)。
以下是示例代码:
'' IMPORTANT: this code assumes that you''ve added a reference to the
'' Microsoft HTML Object Library type library
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
AxWebBrowser1.Navigate("http://localhost/default.asp")
End Sub
Private Sub AxWebBrowser1_NavigateComplete2(ByVal sender As Object, _
ByVal e As AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event) Handles _
AxWebBrowser1.NavigateComplete2
'' must wait for this event to grab a valid refernece to the Document
'' property
Dim doc As mshtml.HTMLDocument = DirectCast(AxWebBrowser1.Document, _
mshtml.HTMLDocument)
'' Cast to the interface that defines the event you''re interested in
Dim docevents As mshtml.HTMLDocumentEvents2_Event = DirectCast(doc, _
mshtml.HTMLDocumentEvents2_Event)
'' Define a handler to the onclick event
AddHandler docevents.onclick, AddressOf onclickproc
End Sub
'' Notice that the signature of this event is different from usual, as it
'' is expected to return a Boolean - if false the default effect associated
'' with the event (for example, jumping to another page if the click is on
'' an hyperlink) is canceled.
Private Function onclickproc(ByVal obj As mshtml.IHTMLEventObj) As Boolean
'' an object on the page has been clicked - you can learn more about
'' type and position of this object by querying the obj''s properties
'' ...
End Function