http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 16498|回复: 8

[Winform] C# webBrowser强制在本窗口打开,禁止在新窗口打开的解决方案

[复制链接]
发表于 2013-5-5 22:30:37 | 显示全部楼层 |阅读模式
有时需要用WebBrowser加载URL,来实现某些功能。而这时,我们就不希望所打开的页面中的链接,在新窗口中打开,因为这样的话,实际上是用系统默认的浏览器打开了,从而脱离了你的WebBrowser,也就不能被你所控制了。
要解决这个问题,可以使用下面的方法:
第一种解决该当推荐使用


[code=csharp]  private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
        {
            string url = ((WebBrowser)sender).StatusText;
            webBrowser1.Navigate(url);
            e.Cancel = true;
        }[/code]
StatusText就是要跳转到的Url
e.Cancel = true;是取消新窗口打开,
第二种方法


假设WebBrowser的Name是 webBrowser1
简单方法-利用加载完成事件将所有的链接和form的target值改为"_seft":
[code=csharp]private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    //将所有的链接的目标,指向本窗体
    foreach (HtmlElement archor in this.webBrowser1.Document.Links)
    {
        archor.SetAttribute("target", "_self");
    }

    //将所有的FORM的提交目标,指向本窗体
    foreach (HtmlElement form in this.webBrowser1.Document.Forms)
    {
        form.SetAttribute("target", "_self");
    }
}

取消新窗口事件
?
private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
{
     e.Cancel = true;
}[/code]

将 WebBrowser 的 AllowWebBrowserDrop 设为 false(禁止拖放)
将 WebBrowser 的 WebBrowserShortcutsEnabled 设为 false(禁止使用快捷键)将 WebBrowser 的 IsWebBrowserContextMenuEnabled 设为 false(禁止右键上下文菜单)





1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-5-21 17:44:25 | 显示全部楼层
如果有弹出对话框时可能会出错
发表于 2013-5-21 17:48:12 | 显示全部楼层
sxycgxj 发表于 2013-5-21 17:44
如果有弹出对话框时可能会出错

你测试过吗?比如那个网站,这个应该和弹出对话框无关吧。除非你使用Open进行弹出。
发表于 2013-5-21 17:51:36 | 显示全部楼层
站长苏飞 发表于 2013-5-21 17:48
你测试过吗?比如那个网站,这个应该和弹出对话框无关吧。除非你使用Open进行弹出。

我使用的open来进行弹出,请问有办法解决吗
发表于 2013-5-21 17:54:51 | 显示全部楼层
sxycgxj 发表于 2013-5-21 17:51
我使用的open来进行弹出,请问有办法解决吗

那只能建议你使用别的方法了,你那不是弹出对话框, 是新建的页面,看着差不多,原理是不一样的,建议使用层,或者是其它方法
或者是加上个参数,在 string url = ((WebBrowser)sender).StatusText;执行完这句之后,判断下有没有这个参数,如果有的话就不执行下在面的取消事件
发表于 2013-5-21 18:02:43 | 显示全部楼层
站长苏飞 发表于 2013-5-21 17:54
那只能建议你使用别的方法了,你那不是弹出对话框, 是新建的页面,看着差不多,原理是不一样的,建议使用 ...

BS代码是别人的,我只是在他的基本上做一个类似外挂式的程序,而且网页中存在很多的Form
 楼主| 发表于 2013-5-21 18:04:02 | 显示全部楼层
在 string url = ((WebBrowser)sender).StatusText;执行完这句之后,判断下有没有这个参数,如果有的话就不执行下在面的取消事件
这个方法就行了,
正好适用于你的情况。
发表于 2013-8-14 11:53:06 | 显示全部楼层
yangying 发表于 2013-5-21 18:04
在 string url = ((WebBrowser)sender).StatusText;执行完这句之后,判断下有没有这个参数,如果有的话就不 ...

是否是判断url这个参数是否是http开头,如果是,则执行取消事件e.Cancle=true;如果flase,则不做任何处理

发表于 2013-8-14 12:25:31 | 显示全部楼层
天山明月 发表于 2013-8-14 11:53
是否是判断url这个参数是否是http开头,如果是,则执行取消事件e.Cancle=true;如果flase,则不做任何处理
...

这不用吧,这是禁止在新窗口打开,不是禁止打开本站以外的网站,


您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-6-13 15:51

© 2014-2021

快速回复 返回顶部 返回列表