关于WebBrowser控制新窗口[_blanck]问题解决总结

当页面为新窗口弹出时,下面代码分别演示如何在新建form中加载页面以及当前form的web控件加载form。
SHDocVw微软的一个系统文件,文件路径:C:\WINDOWS\system32\shdocvw.dll。
使用要引用这个dll


1、新建form,这个大多数人都应该知道。用newwindow2就可以了,不过vs2005的web控件是ms封装过的,需要注意一下。 


using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.Reflection; 
namespace WindowsApplication24 
 
 
    public partial class Form1 : Form 
    { 
         
        public Form1() 
        { 
            InitializeComponent(); 
            this.webBrowser1.Navigate("about:blank"); 
            (this.webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).NewWindow2 += new SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(Form1_NewWindow2); 
 
 
        } 
        private void button1_Click(object sender, EventArgs e) 
        { 
            this.webBrowser1.Navigate("www.google.cn"); 
        } 
 
 
        void Form1_NewWindow2(ref object ppDisp, ref bool Cancel) 
        { 
            Form1 frm = new Form1(); 
            ppDisp = frm.webBrowser1.ActiveXInstance; 
            frm.Show(); 
        }        
    } 


2、在当前窗体的web控件中直接加载,这个需要用到NewWindow3 事件。 


using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.Reflection; 
namespace WindowsApplication24 

    public partial class Form1 : Form 
    {          
        public Form1() 
        { 
            InitializeComponent(); 
            this.webBrowser1.Navigate("about:blank"); 
            (this.webBrowser1.ActiveXInstance as SHDocVw.WebBrowser).NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(Form1_NewWindow3); 
 
 
        } 
        void Form1_NewWindow3(ref object ppDisp, ref bool Cancel, uint dwFlags, string bstrUrlContext, string bstrUrl) 
        { 
            Cancel = true; 
            this.webBrowser1.Navigate(bstrUrl); 
        } 
        private void button1_Click(object sender, EventArgs e) 
        { 
            this.webBrowser1.Navigate("www.google.cn"); 
        }   
    } 

3、用 codeproject. com的WebBrowser: www.codeproject.com/csharp/ExtendedWebBrowser.asp
找找看,不要直接使用WebBrowser,得使用比WebBrowser低级一点的:COM组件 Microsoft Web 浏览器

4、新窗口打开的连接用自己定义的窗体打开

private void webBrowserContent_NewWindow(object sender, CancelEventArgs e)
  {
  ContentPage cp = new ContentPage();//新建一个窗体来打开
  cp.Show();
  cp.ActiveUrl = this.webBrowserContent.StatusText;//新建窗体的一个自定义属性值,来设置url,具体该怎么设置LZ自己灵活处理,这只是我的用法
  e.Cancel = true;
  }

5、解决点击webbrowser里面的链接会在本地IE中显示新网页的NewWindow事件代码(站内连接)
private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
        {
            e.Cancel = true;
            if (webBrowser1.Document.ActiveElement != null)
            {
                webBrowser1.Navigate(webBrowser1.Document.ActiveElement.GetAttribute("href"));
                comboBox1.Text = webBrowser1.Document.ActiveElement.GetAttribute("href");
            }
        }

————————————————
版权声明:本文为CSDN博主「limfungsuen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/limfungsuen/article/details/6713817

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值