1、实现ILifeSpanHandler接口,代码如下:

using CefSharp;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms; namespace MyBrowser
{
public class CefLifeSpanHandler : CefSharp.ILifeSpanHandler
{
public CefLifeSpanHandler()
{ } public bool DoClose(IWebBrowser browserControl, CefSharp.IBrowser browser)
{
if (browser.IsDisposed || browser.IsPopup)
{
return false;
} return true;
} public void OnAfterCreated(IWebBrowser browserControl, IBrowser browser)
{ } public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser)
{
} public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IWindowInfo windowInfo, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
var chromiumWebBrowser = (ExtChromiumBrowser)browserControl; chromiumWebBrowser.Invoke(new Action(() =>
{
NewWindowEventArgs e = new NewWindowEventArgs(windowInfo);
chromiumWebBrowser.OnNewWindow(e);
})); newBrowser = null;
return false;
} }
}

2、使用ILifeSpanHandler接口:

using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms.Integration; namespace MyBrowser
{
public class ExtChromiumBrowser : ChromiumWebBrowser
{
public ExtChromiumBrowser()
: base(null)
{
this.LifeSpanHandler = new CefLifeSpanHandler();
this.DownloadHandler = new DownloadHandler(this);
} public event EventHandler<NewWindowEventArgs> StartNewWindow; public void OnNewWindow(NewWindowEventArgs e)
{
if (StartNewWindow != null)
{
StartNewWindow(this, e);
}
}
}
}

3、定义NewWindowEventArgs:

using CefSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace MyBrowser
{
public class NewWindowEventArgs : EventArgs
{
private IWindowInfo _windowInfo;
public IWindowInfo WindowInfo
{
get { return _windowInfo; }
set { value = _windowInfo; }
} public NewWindowEventArgs(IWindowInfo windowInfo)
{
_windowInfo = windowInfo;
}
}
}

4、实现StartNewWindow:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
_browser = new ExtChromiumBrowser() { Dock = DockStyle.Fill };
BindBrowser(_browser);
_browser.FrameLoadEnd += FrameLoadEnd;
_browser.Load(_tokenUrl);
host.Child = _browser;
} private void BindBrowser(ExtChromiumBrowser browser)
{
browser.StartNewWindow += (s, e) =>
{
var control = new System.Windows.Forms.Control();
control.Dock = DockStyle.Fill;
control.CreateControl();
host.Child = control;
control.Focus(); e.WindowInfo.SetAsChild(control.Handle, , , (int)host.ActualWidth, (int)host.ActualHeight);
};
browser.FrameLoadStart += (ss, ee) =>
{
this.Dispatcher.BeginInvoke(new Action(() =>
{
(ss as ExtChromiumBrowser).Focus();
}));
};
}

CefSharp禁止弹出新窗体,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接的更多相关文章

  1. CefSharp禁止弹出新窗体,在同一窗口打开链接,或者在新Tab页打开链接,并且支持带type="POST" target="_blank"的链接

    说明:在同一窗口打开链接,只要稍加改造就可以实现,这里实现的是在新Tab页打开链接,并且支持带type="POST" target="_blank"的链接 gi ...

  2. CefSharp.v49.0.1浏览器控件完全WPF版,实现禁止弹出新窗口,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接

    需求场景:在查询页面,填写查询条件,查询条件包括上传的图片,根据图片的特征查询,这就需要在提交的时候,使用POST提交,因为GET提交无法提交图片数据,提交查询条件之后,在新的窗口展示查询结果.(当然 ...

  3. WebBrowser控件应用:弹出新窗体和关闭窗口

    缘起:上次写了一个<WebBrowser控件的简单应用2>,提到了在NewWindow事件中打开新窗口的例子.有网友“队长 ”提出那个事件得到的参数是本页面的,而不是新页面的,经过测试,果 ...

  4. WPF Prism MVVM 中 弹出新窗体. 放入用户控件

    原文:WPF Prism MVVM 中 弹出新窗体. 放入用户控件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_37214567/artic ...

  5. jQuery UI弹出新窗体

    借助jqueryUI 的Dialog 在隐藏的div中嵌入Iframe  改变iframe的路径 如果项目经常用到弹出新窗体,则利用模板,把此代码和html 放入父页面中,实现父级调用, <in ...

  6. FineReport——弹出新窗体选值并回调

    主要实现的功能: 在主页面,通过单击按钮,弹出窗体,在窗体中通过下拉框选择值并查询,如果是多值,可以通过复选框选择,点击确定,将选中的行的字段值传递给主页面的下拉复选框,定义其编辑后事件进行查询.将想 ...

  7. Jquery 弹出新窗体

    开始先用css将这个DIV设好位置,并且隐藏 function winshow() { var winNode = $(".win"); winNode.show("sl ...

  8. 禁止img图片拖动在新窗口打开

    JS function imgdragstart(){return false;} for(i in document.images)document.images[i].ondragstart=im ...

  9. CefSharp 在同一窗口打开链接的方法

    摘要 在winform中使用cefsharp的时候,我们在浏览网页的时候,想在同一个窗口打开链接,而不是创建新的窗口.可以通过下面的方法实现. 解决方案 CefSharp 中控制弹窗的接口是 ILif ...

随机推荐

  1. VS 窗体大小

    锁定窗体大小,就是鼠标停在窗口边框的时候,不能拖动来改变它的大小…… 有两种方法: 1.可以把Form的属性 FormborderStyle 后面选择 FixedDialog 2.或者把Form窗体的 ...

  2. VINS-mono详细解读

    VINS-mono详细解读 极品巧克力 前言 Vins-mono是香港科技大学开源的一个VIO算法,https://github.com/HKUST-Aerial-Robotics/VINS-Mono ...

  3. xp安装vmware10时一直停在installing packages on the system

    我估计的原因是: vm会在网上邻居(LAN或高速internet)下创建两个 vmware network adapter vmnet8 vmware network adapter vmnet1   ...

  4. Windows下Python IDLE设置

    Windows下安装Python 2.7.5,发现IDLE是个不错的IDE,可以编辑.运行, 希望与.py文件关联起来,作为编辑器使用,经过尝试,找到了一个方法.   打开注册表,找到\KEY_CLA ...

  5. MVC仓储类Repository

    接口: using Common; using System; using System.Collections; using System.Collections.Generic; using Sy ...

  6. Python Socket 编程详细介绍(转)

    Python 提供了两个基本的 socket 模块: Socket 它提供了标准的BSD Socket API. SocketServer 它提供了服务器重心,可以简化网络服务器的开发. 下面讲解下 ...

  7. composer install 时,提示:Package yiisoft/yii2-codeception is abandoned, you should avoid using it. Use codeception/codeception instead.的解决

    由 SHUIJINGWAN · 2017/11/24 1.composer install 时,提示:Package yiisoft/yii2-codeception is abandoned, yo ...

  8. IIS 6 备忘

    用IIS7久了, 回到IIS6 总被搞混,所以记录下,以备忘记. 以下是转载和整合了他人的资源,原出处不详.   IIS Web 服务器的权限设置有两个地方,一个是 NTFS 文件系统本身的权限设置, ...

  9. 使用reactjs做一个CRUD功能

    第一步:引入reactjs所依赖的js文件,本案例使用的是bootstrap前端框架,所以引入了相应的js和css文件 第二步:body里面添加两个div 第三步:开始编写reactjs脚本 < ...

  10. 2018.09.25 poj3070 Fibonacci(矩阵快速幂)

    传送门 矩阵快速幂板题,写一道来练练手. 这一次在poj做题总算没忘了改万能库. 代码: #include<iostream> #include<cstdio> #define ...