解决 winform打开网页 和WebBrowser打开连接360误报拦截的问题

如下方法我已经在本身电脑上验证经过,其余电脑并未测试,请广大读者自行验证并反馈,若是有更好的方法请指教。html

在winform中若是使用这种方法弹出网页,例如这样web

Process.start("http://www.xgjxc.top");

或者另外若是winform中嵌入了一个webbrowser控件,加载了一个网页,例如这样shell

this.webBrowser1.Navigate("http://www.xgjxc.top/home.html“);

网页中有个超连接,例如这样浏览器

<a href="http://www.xgjxc.top/post/15.html" target="_blank">小狗进销存功能模块介绍 (2015-05-10)</a>

那么点击这个超连接会自动打开一个浏览器窗口post

 

若是按照上面的方法来打开网页,十有八九会出现如下的画面: 测试

技术分享

 

不得不说,360愈来愈流氓了,他彻底不看软件有无恶意特征码,也彻底不看要打开的网页有无恶意内容,只要你要打开一个网页,则拦截之。this

另一个就是我把程序用VS自带打包打包了一下,碰到没有安装.Net的客户机,则自动从官方位置下载安装包进行安装,这个时候360照样拦截不误,以下图:code

一共拦截两次,.Net包拦截一下,简体中文语言包拦截一次,打包的时候都是选的”从官方未知下载组件“,不得不说,360就是一个大傻逼。orm

技术分享

 

下面进入正题,说下怎么解决打开网页这件事。htm

winform中点击按钮直接打开网页,采用下面方案:

核心代码:

public partial class Home : Form
    {
        [DllImport("shell32.dll")]
        public extern static IntPtr ShellExecute(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
        public enum ShowWindowCommands : int
        {
            SW_HIDE = 0,
            SW_SHOWNORMAL = 1,
            SW_NORMAL = 1,
            SW_SHOWMINIMIZED = 2,
            SW_SHOWMAXIMIZED = 3,
            SW_MAXIMIZE = 3,
            SW_SHOWNOACTIVATE = 4,
            SW_SHOW = 5,
            SW_MINIMIZE = 6,
            SW_SHOWMINNOACTIVE = 7,
            SW_SHOWNA = 8,
            SW_RESTORE = 9,
            SW_SHOWDEFAULT = 10,
            SW_MAX = 10
        }
        public Home()
        {
            InitializeComponent();
        }
}

  而后点击事件中的代码:

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            ShellExecute(0, @"open", @"http://www.xgjxc.top", null, null, (int)ShowWindowCommands.SW_NORMAL);
        }

这样的话360就不在会拦截了。

同理,若是是点击webbrowser中的链接,思路是这样的,首先拦截这个点击动做,不让他弹出网页,而采用上面的方法进行弹出,则就会跳过拦截了。

代码以下:

加载网页

private void Home_Load(object sender, EventArgs e)
        {
            this.webBrowser1.Navigate("http://www.xgjxc.top/home.html");
        }

 

注册NewWindow事件:  

private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
{
ShellExecute(0, @"open", this.webBrowser1.StatusText.ToString(), null, null, (int)ShowWindowCommands.SW_NORMAL);
e.Cancel = true;
}

首先e.Cancel=true 让点击动做失效,而后this.webBrowser1.StatusText.ToString()获取到刚才点击的链接,StatusText是状态栏文字,咱们知道浏览器若是鼠标移动到链接上,状态栏是会显示链接URL的。

 

但愿能够帮到一样受到360困扰的朋友。

相关文章
相关标签/搜索