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 简单包装  查看(免费下载地址:http://ocr.qcdest.com/wx/Download.aspx?fileId=1

 

到此我们的工作就已经完成,可以直接运行程序进行测试了

 

### 回答1: xilium.cefglue是一个开源的跨平台的.NET集成Chromium浏览器的解决方案。它基于CefGlue项目,并提供了一个C#包装器,使开发者能够在.NET应用程序使用Chromium浏览器的功能。 xilium.cefglue提供了一个高性能、可扩展的浏览器引擎,使开发者能够在自己的应用程序嵌入一个完整的浏览器。它支持HTML5、CSS3和JavaScript,使开发者能够创建具有现代Web功能的应用程序。开发者可以通过使用xilium.cefglue,将浏览器功能无缝地集成到他们的应用程序,实现Web浏览、数据交互和多媒体播放等功能。 xilium.cefglue提供了丰富的功能和API,开发者可以使用它来控制浏览器的行为,如加载网页、处理鼠标和键盘事件、获取网页内容等。它还提供了与JavaScript交互的能力,使开发者能够在.NET应用程序和浏览器之间传递数据和调用JavaScript函数。 xilium.cefglue还支持在不同平台上使用,包括Windows、Linux和MacOS。这意味着开发者可以使用相同的代码基础,在不同的操作系统上构建和部署他们的应用程序。 总之,xilium.cefglue是一个强大的.NET集成Chromium浏览器的解决方案,为开发者提供了丰富的功能和API,使他们能够轻松地将现代Web浏览器集成到他们的应用程序。无论是开发桌面应用程序还是Web应用程序,xilium.cefglue都是一个不错的选择。 ### 回答2: xilium.cefglue是一个开源的.NET封装库,用于将CEF(Chromium Embedded Framework)集成到.NET应用程序CEF是一个使用Chromium作为核心的开源项目,它提供了一个功能强大的浏览器引擎,可以用于构建跨平台的桌面应用程序。 通过使用xilium.cefglue,开发人员可以利用CEF的强大功能和性能优势来开发.NET桌面应用程序。xilium.cefglue提供了一组易于使用的接口和类,使开发人员能够轻松地在.NET应用程序嵌入和控制浏览器窗口xilium.cefglue支持多种功能,包括加载和显示网页、执行JavaScript脚本、处理用户输入事件、访问浏览器的DOM结构等。开发人员可以根据自己的需求,使用xilium.cefglue提供的接口和事件来实现自定义的浏览器行为。 另外,xilium.cefglue还提供了一些扩展的功能,例如支持拦截和修改浏览器请求、处理弹出窗口和对话框、管理Cookie等。这些功能使得开发人员能够更加灵活地控制浏览器的行为,以实现更好的用户体验。 总的来说,xilium.cefglue是一个很有用的.NET库,它为开发人员提供了在.NET应用程序嵌入和控制浏览器窗口的能力,使他们能够构建出功能强大、功能丰富的桌面应用程序。 ### 回答3: xilium.cefglue 是一个用于开发基于 Chromium Embedded Framework (CEF) 的.NET 程序的开源项目。CEF 是一个强大的开源项目,它提供了使用 Chromium 浏览器内核渲染网页的能力,并可以作为嵌入式浏览器在应用程序使用。 xilium.cefglue 项目旨在使开发者能够使用 CEF 在 .NET 平台上创建强大的浏览器应用程序。它提供了.NET 的绑定,使开发者可以使用 CEF 的各种功能和特性。借助 xilium.cefglue,开发者能够创建具有 WebView 功能的应用程序,在应用展示网页内容、执行 JavaScript 代码以及与 web 页面进行交互。 xilium.cefglue 提供了一个友好简洁的 API,使开发者能够方便地使用 CEF 的能力。它支持各种平台,包括Windows、Linux 和 macOS。开发者可以使用 C# 或其他 .NET 支持的语言来编写应用程序,利用 xilium.cefglue 进行页面渲染和交互。 xilium.cefglue 还提供了一些附加功能,例如嵌入式模式和单进程模式。开发者可以根据自己的需要选择不同的模式,以便更好地控制和管理应用程序的行为。 总之,xilium.cefglue 是一个优秀的开源项目,为开发者提供了在 .NET 平台上使用 CEF 创建浏览器应用程序的能力。它简化了与 CEF 的集成,并为开发者提供了丰富的功能和灵活性。无论是需要创建一个嵌入式浏览器应用还是进行网页渲染和交互,xilium.cefglue 都是一个值得考虑的选择。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值