关于IE弹出窗口的禁止/允许及URL获取小结

VB6代码可能大家都很熟悉了,不过为了便于对照,还是贴上来,这部分是转帖,转自 http://support.microsoft.com/kb/185538/zh-cn

Option Explicit

Dim WithEvents Web_V1 As SHDocVwCtl.WebBrowser_V1

Private Sub Form_Load() 

Set Web_V1 = WebBrowser1.Object     

WebBrowser1.Navigate2 http://www.163.com/

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 Sub

    Dim 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("http://www.163.com/")
    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_V1

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        WebBrowser1.Navigate("http://www.163.com")
        V1_Test2 = TryCast(Me.WebBrowser1.ActiveXInstance, SHDocVw.WebBrowser_V1)
        AddHandler V1_Test2.NewWindow, AddressOf V1_Test2_NewWindow
    End Sub

    Private 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

。。。。。。。。。

行了,写到这里,回家睡觉,晚上还要上班的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清晨曦月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值