大家都知道利用webbrowser控件可以开发出类似网页浏览功能的应用程序,而且由于webbrowser控件优秀的属性、方法和事件,开发此类应用程序极其方便。同样VB开发activex也非常便捷,但是两者结合开发基于WEB的activex控件的时候就出现了奇怪的现象,简单描述如下:开发工具:vb,webbrowser activex
开发目的:生成一个activex control,类似IE6
开发内容:地址栏(可用combo控件实现),HTML浏览器(用webbrowser控件实现)
基本功能:1. 当地址栏内容变化后,webbrowser自动跳转到相应网页
          2. 当在webbrowser浏览的网页点击超链接的时候,将该链接地址自动添加到combo控件的list当中。
应用目的:将生成的activex control通过IE6发布。现在开始作手实现:
假设建立了combo1,和webbrowser1,command1
系统初始化:
Private Sub UserControl_Initialize()
WebBrowser1.Navigate2 "http://www.csdn.net"
End Sub功能1容易实现,只需要调用如下语句就可以了:
WebBrowser1.Navigate2 Combo1.Text功能2似乎也很容易实现:Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
On Error Resume Next
Dim i As Integer
If (URL <> "" And URL <> "http:///") Then
For i = 0 To Combo1.ListCount - 1
If Combo1.List(i) = URL Then Exit Sub
Next i
Combo1.AddItem URL
Combo1.Text = URL
End If
End SubPrivate Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim i As Integer
If (URL <> "" And URL <> "http:///") Then
For i = 0 To Combo1.ListCount - 1
If Combo1.List(i) = URL Then Exit Sub
Next i
Combo1.AddItem URL
Combo1.Text = URL
End If
End SubPrivate Sub WebBrowser1_StatusTextChange(ByVal Text As String)
Dim i As Integer
If (WebBrowser1.LocationURL <> "" And WebBrowser1.LocationURL <> "http:///") Then
For i = 0 To Combo1.ListCount - 1
If Combo1.List(i) = WebBrowser1.LocationURL Then Exit Sub
Next i
Combo1.AddItem WebBrowser1.LocationURL
Combo1.Text = WebBrowser1.LocationURL
End If
End SubPrivate Sub Command1_Click()
msgbox WebBrowser1.LocationURL
End Sub运行结果:
1..调试运行时一切正常。
2.打包发布后,用IE6浏览该activex control时,当页面打开后,触发WebBrowser1_BeforeNavigate2事件,结果在combo1的list中自动加入了“http://www.csdn.net"现在问题出现了:
3.在webbrowser1打开的页面中点击链接,此时没有任何事件被触发。
4.等待链接全部下载完成后,点击command1,结果返回对话框内容:“http://www.csdn.net",似乎此时webbrowser1.locationURL还是保持着系统初始化时第一次的结果。
5.奇怪的是用WIN98+IE5测试,没有任何问题。
6.如果生成的是WIN应用程序,一切又正常了。那么,如何解决上述问题呢?