CEF Xilium.CefGlue 在当前窗体中打开全部链接(防止弹窗)
我们在使用Xilium.CefGlue编写浏览器应用程序时。对于嵌入的网页假设有链接会在新窗体打开。这种用户体验会非常差。因此我们须要改动程序,使全部链接都在当前窗体中打开。
首先引用Xilium.CefGlue.dll文件。须要继承Xilium.CefGlue 中的CefLifeSpanHandler类
namespace Xilium.CefGlue
{
// 摘要:
// Implement this interface to handle events related to browser life span. The
// methods of this class will be called on the UI thread unless otherwise indicated.
public abstract class CefLifeSpanHandler
继承CefLifeSpanHandler类。并重写OnBeforePopup方法,实现例如以下:
internal sealed class CwbLifeSpanHandler : CefLifeSpanHandler
{
private ChromeWebBrowser webBrowser;
public CwbLifeSpanHandler(ChromeWebBrowser browser)
{
webBrowser = browser;
} protected override void OnAfterCreated(CefBrowser browser)
{
base.OnAfterCreated(browser);
webBrowser.OnCreated(browser);
} protected override bool DoClose(CefBrowser browser)
{
return false;
} protected override bool OnBeforePopup(CefBrowser browser, CefFrame frame, string targetUrl, string targetFrameName, CefWindowOpenDisposition targetDisposition, bool userGesture, CefPopupFeatures popupFeatures, CefWindowInfo windowInfo, ref CefClient client, CefBrowserSettings settings, ref bool noJavascriptAccess)
{
bool res = false;
if (!string.IsNullOrEmpty(targetUrl))
{
if (webBrowser.selfRequest != null)
{
CefRequest req = CefRequest.Create();
req.FirstPartyForCookies = webBrowser.selfRequest.FirstPartyForCookies;
req.Options = webBrowser.selfRequest.Options;
System.Collections.Specialized.NameValueCollection h = new System.Collections.Specialized.NameValueCollection();
h.Add("Content-Type", "application/x-www-form-urlencoded");
req.Set(targetUrl, webBrowser.selfRequest.Method, null, webBrowser.selfRequest.GetHeaderMap());
webBrowser.selfRequest = req;
}
//在该处实现用当前页面打开全部新开的窗体
webBrowser.OpenUrl(targetUrl);
res = true;
if (res)
return res;
}
return base.OnBeforePopup(browser, frame, targetUrl, targetFrameName, targetDisposition, userGesture, popupFeatures, windowInfo, ref client, settings, ref noJavascriptAccess);
return res; }
}
尽管改动了浏览器的新窗体处理方法,但浏览器并不会自己主动载入到我们的CwbCefLifeSpanHandler类,接下来我们须要在实现CefClient的ClientBrowser类中加上我们的CwbCefLifeSpanHandler实现类:
public sealed class ClientBrowser : CefClient
{
private readonly CwbLifeSpanHandler _lifeSpanHandler; private ChromeWebBrowser webBrowser;
public ClientBrowser(ChromeWebBrowser browser)
{
webBrowser = browser;
_lifeSpanHandler = new CwbLifeSpanHandler(browser);
} public override CefLifeSpanHandler GetLifeSpanHandler()
{
return _lifeSpanHandler;
}
}
ChromeWebBrowser是我自己对Browser的包装,
大家能够去下载实例: CEF Xilium.CefGlue 简单包装 查看
到此我们的工作就已经完毕,能够直接执行程序进行測试了
CEF Xilium.CefGlue 在当前窗体中打开全部链接(防止弹窗)的更多相关文章
- Winforn中怎样在窗体中打开另一个窗体
场景 在Winform的窗体A中打开另一个窗体B. 实现 //打开新的窗体 CurveCompare cc = new CurveCompare(); cc.Show(); 效果 以上代码的实现参照: ...
- 如何用js去判断当前是否在微信中打开的链接页面
function is_weixin() { var ua = navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) = ...
- 浏览器中打开PDF链接
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- winform窗体中webbrowser如何屏蔽脚本错误弹窗
在构造函数中加入: webBrowser.ScriptErrorsSuppressed = true;
- 在WPF程序中打开网页:使用代理服务器并可进行JS交互
本项目环境:使用VS2010(C#)编写的WPF程序,通过CefSharp在程序的窗体中打开网页.需要能够实现网页后台JS代码中调用的方法,从网页接收数据,并能返回数据给网页.运行程序的电脑不允许上网 ...
- Web设计中打开新页面或页面跳转的方法 js跳转页面
Web设计中打开新页面或页面跳转的方法 一.asp.net c# 打开新页面或页面跳转 1. 最常用的页面跳转(原窗口被替代):Response.Redirect("newpage.aspx ...
- Web设计中打开新页面或页面跳转的方法
一.asp.net c# 打开新页面或页面跳转 1. 最常用的页面跳转(原窗口被替代):Response.Redirect("newpage.aspx"); 2. 利用url地址打 ...
- 微信中打开链接,自动打开外部浏览器打开指定URL页面
上半年公司有一个新的APP项目上线,我们在项目首页做个二维码,然后用户用手机扫一扫就能下载了.但是很多用户反映扫一扫之后下载不了,了解之后才知道这些用户都是使用的微信的扫一扫,而我们开发测试人员一般使 ...
- winform打开子窗体后,在子窗体中刷新父窗体,或者关闭子窗体刷新父窗体
winform打开子窗体后,在子窗体中刷新父窗体,或者关闭子窗体刷新父窗体,搜集了几个方法,列举如下: 一 . 所有权法 父窗体,名称为“fuForm”,在父窗体中有个公共刷新方法,也就是窗体数据初始 ...
随机推荐
- .net平台借助第三方推送服务在推送Android消息(极光推送)
最近做的.net项目(Windows Service)需要向Android手机发送推送消息,真是有点困难,没有搞过就不停的搜文档,最后看到了一个开源项目PushSharp,可以在.net平台推送IOS ...
- 线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理
本文为线程本地存储TLS系列之分类和原理. 一.TLS简述和分类 我们知道在一个进程中,所有线程是共享同一个地址空间的.所以,如果一个变量是全局的或者是静态的,那么所有线程访问的是同一份,如果某一个线 ...
- 如何使用JW Player来播放Flash并隐藏控制按钮和自定义播放完成后执行的JS
在一个客户项目中播放的flash需要进行定制如不显示控制按钮,flash播放完成后执行特定的js等,在用过了N多的JQery插件和播放器后最终JW Player插件可以满足我的以上要求 因为JW Pl ...
- apple iMac一体机 装双系统 实战! (Apple +Win 7 64bit)Good
原帖:http://group.zol.com.cn/1/641_485.html 需要准备工具:一个8GU盘X1 (或Win7 安装版系统盘) Windows 7 pro 64bit 位 ISO 文 ...
- shiny安装使用入门
下载最新版R(至少3.2.5版本),在CRAN上下载: 打开R install.packages("shiny")#安装shiny包 library(shiny)#如果出现warn ...
- Android studio中导入第三方类库
常常在github上看到一些好用的框架,但是对于一个新手怎样在android studio上导入去总会遇到各种麻烦,索性来研究下第三方类库怎样在android studio上导入. 以我在github ...
- Java反射机制及Method.invoke详解
JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为ja ...
- iDempiere VS World
怀揣着为中小企业量身定做一整套开源软件解决方案的梦想开始了一个网站的搭建.http://osssme.org/ 第四篇 iDempiere VS World 接下来就接着第一篇,再说一说iDempei ...
- LaTeX去掉默认显示日期时间
LaTeX去掉默认显示日期时间: \date{}
- MVC之Ajax.BeginForm使用详解之更新列表 mvc验证jquery.unobtrusive-ajax
MVC之Ajax.BeginForm使用详解之更新列表 1.首先,请在配置文件设置如下:(该项默认都存在且为true) <add key="UnobtrusiveJavaScrip ...