本文共 2758 字,大约阅读时间需要 9 分钟。
VB6代码可能大家都很熟悉了,不过为了便于对照,还是贴上来,这部分是转帖,转自
Option Explicit
Dim WithEvents Web_V1 As SHDocVwCtl.WebBrowser_V1
Private Sub Form_Load()
Set Web_V1 = WebBrowser1.Object
WebBrowser1.Navigate2
End Sub
Private Sub Web_V1_NewWindow(ByVal URL As String, _
ByVal Flags As Long, _
ByVal TargetFrameName As String, _
PostData As Variant, _
ByVal Headers As String, _
Processed As Boolean)
Processed = True
WebBrowser1.Navigate URL
End Sub
天呢,怎么粘贴之后的代码自动去掉换行了。。。。。。。。
【注意】不论使用一下哪个代码,都不要添加system32/shdocvw.dll引用(COM)。
根据这个代码,在VB.NET中以前采取了这样的做法:
'方法1,使用AxWebBroeser
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AxWebBrowser1.Size = New Size(306, 344) End SubDim WithEvents V1_Test1 As SHDocVw.WebBrowser_V1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
V1_Test1 = AxWebBrowser1.GetOcx AxWebBrowser1.Navigate2("") End Sub Private Sub V1_Test_NewWindow(ByVal URL As String, ByVal Flags As Integer, ByVal TargetFrameName As String, ByRef PostData As Object, ByVal Headers As String, ByRef Processed As Boolean) Handles V1_Test1.NewWindow If MsgBox("正在打开新窗口: " & URL & " 是否继续?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then If MsgBox("是否在本程序窗口中打开新页面而不在IE中打开?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Processed = True AxWebBrowser1.Navigate2(URL) Else Processed = True End If End Sub这种方法你可以测试一下,从而理解Processed 参数的意义:取消新窗口打开——同时也取消了导航,利用这一点,上面代码实现了允许/禁止打开弹出页,控制弹出页在本程序打开还是其他程序打开,下面的方法2是一样的思路。
这种方法完全是VB6代码的“忠实”升级,效果还是不错的,但是,需要用AxWebBrowser可现在大家都用.NET自带的WebBrowser写程序了,总不能为了这一功能就“倒退”回去吧。中午研究了一下,实际上,我们可以非常简单的实现:
我们想个办法获取WebBrowser_V1接口就可以了,什么办法呢?使用ActiveXInstance方法:
'方法2,使用WebBrowser
Dim V1_Test2 As SHDocVw.WebBrowser_V1Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
WebBrowser1.Navigate("") V1_Test2 = TryCast(Me.WebBrowser1.ActiveXInstance, SHDocVw.WebBrowser_V1) AddHandler V1_Test2.NewWindow, AddressOf V1_Test2_NewWindow End SubPrivate Sub V1_Test2_NewWindow(ByVal URL As String, ByVal Flags As Integer, ByVal TargetFrameName As String, ByRef PostData As Object, ByVal Headers As String, ByRef Processed As Boolean)
If MsgBox("正在打开新窗口: " & URL & " 是否继续?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then If MsgBox("是否在本程序窗口中打开新页面而不在IE中打开?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Processed = True WebBrowser1.Navigate(URL) Else Processed = True End If End Sub这里的代码和上面的形式是完全一样的,仅仅是获取接口的形式不一样,至于AddHandler,大家一看就明白了,呵呵,只是用来代替声明时WithEvents语句而已,实际上没什么区别。
最后一个需要说明的地方,我用的VB2008……AxWebBrowser这个小鬼子在的窗口设计器里面自己改变大小,所以
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AxWebBrowser1.Size = New Size(306, 344) End Sub。。。。。。。。。
行了,写到这里,回家睡觉,晚上还要上班的
转载地址:https://blog.csdn.net/zcsor/article/details/2494030 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!