请选择 进入手机版 | 继续访问电脑版

无忧编程_ASP.NET  / C# / PHP 程序员的软件世界

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 799|回复: 0

CefSharp 在同一窗口打开链接的方法(亲测有效)

[复制链接]

350

主题

380

帖子

1570

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1570
发表于 2018-3-14 15:37:26 | 显示全部楼层 |阅读模式
CefSharp 在同一窗口打开链接的方法(亲测有效)
摘要
在winform中使用cefsharp的时候,我们在浏览网页的时候,想在同一个窗口打开链接,而不是创建新的窗口。可以通过下面的方法实现。
解决方案
CefSharp 中控制弹窗的接口是 ILifeSpanHandler ,可以对 OnBeforePopup 进行重写,即可控制是否弹出新窗体。接口定义如下:
bool ILifeSpanHandler.OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
要实现禁止弹出新窗体-在同一窗口打开,需要在原窗体加载目标Url,即参数targetUrl,并返回结果true,此时将会取消新窗口的创建,并在原窗口加载链接。具体实现方法体的代码如下:
[C#] 纯文本查看 复制代码
/// <summary>
    /// 在自己窗口打开链接
    /// </summary>
    internal class OpenPageSelf : ILifeSpanHandler
    {
        public bool DoClose(IWebBrowser browserControl, IBrowser browser)
        {
            return false;
        }

        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, IPopupFeatures popupFeatures, 
IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
        {
            newBrowser = null;
            var chromiumWebBrowser = (ChromiumWebBrowser)browserControl;
            chromiumWebBrowser.Load(targetUrl);
            return true; //Return true to cancel the popup creation copyright by codebye.com.
        }
    }
在实例化浏览器的时候,指定处理程序
[C#] 纯文本查看 复制代码
private void MainFrm_Load(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
            CefSharp.CefSettings settings = new CefSharp.CefSettings();

            CefSharp.Cef.Initialize(settings);
            CefSharp.WinForms.ChromiumWebBrowser webView = new CefSharp.WinForms.ChromiumWebBrowser("https://www.baidu.com");
            webView.Dock = DockStyle.Fill;
            webView.LifeSpanHandler = new OpenPageSelf();
            this.Controls.Add(webView);
        }
上面红色部分的代码,是应用我们实现的窗口的打开方式。
参考资料
http://www.codebye.com/cefsharp-open-in-same-browser.html


windows .net(C#+MSSQL) linux(php+mysql)  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|软件编程 ( 鄂ICP备11006601号鄂公网安备 42011102001337号 |

GMT+8, 2018-8-15 09:06 , Processed in 0.098861 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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