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,此时将会取消新窗口的创建,并在原窗口加载链接。具体实现方法体的代码如下:

   /// <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.
        }
    }

在实例化浏览器的时候,指定处理程序

        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

时间: 2024-10-19 20:53:56

CefSharp 在同一窗口打开链接的方法的相关文章

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

说明:在同一窗口打开链接,只要稍加改造就可以实现,这里实现的是在新Tab页打开链接,并且支持带type="POST" target="_blank"的链接 github和bitbucket上相关问题: 1.WPF empty POST data when using custom popup    https://github.com/cefsharp/CefSharp/issues/1267 2.CefLifeSpanHandler, customized OnB

谈新窗口打开链接的合理方式

如果标题换做"用户体验",感觉大了些,自己毕竟不是这方面的专家,在这里只是谈谈自己的感受. 我还记得很早的时候自己学做网页制作,那时不晓得链接如何从新窗口打开,也不关心这些,因为网页 只是起到一个宣传简介的作用,后来多了友情链接这个东东,是的,那时还没有多标签多选项卡的浏览器出现,大家都用着IE6之类的窗口浏览器,于是那时候大 家养成了个习惯,就是打开一个页面,等浏览结束后下意识的去关浏览窗口,岂不知这个页面的上一页自己也需要,或者网站作者并不希望浏览者点了外部链接后就 脱离自己的网站

jquery新窗口打开链接

第一种:下面的代码是针对m35ui这个样式下的a都是在新窗口打开  <script type="text/javascript"> jQuery(document).ready(function($) { $('.m35ui a').attr({target: "_blank"}); }); </script> 第二种:  <script src="http://code.jquery.com/jquery-latest.js

MarkDown在新窗口打开链接

在用MarkDown编辑时,如果打算在新窗口中打开链接,可以使用HTML语法代替MarkDown语法,如下所示: <a href=https://www.python.org target = _blank>Python官方网站</a> 显示效果为:Python官方网站 原文地址:https://www.cnblogs.com/syh6324/p/9482622.html

MFC 打开链接的方法

第一种: system("start explorer http://http://www.baidu.com"); 第二种: ShellExecute(NULL, NULL, _T("http://www.baidu.com"), NULL, NULL, SW_SHOWNORMAL); 以上方法都会用默认浏览器弹出要访问的链接

网页调启用qq对话聊天客服窗口的链接地址方法大全(包含移动端)

z转自:    http://www.wazhuti.com/1781.html 在PC端,腾讯的QQ软件还是应用最为广泛的即时通讯工具了,除了网站自动的一些对话软件外,qq可以有效的将用户留存下来,长线发展,所以在网站添加qq对话聊天窗口的链接尤为重要,尤其是对一些半商业型的网站来讲,所以大挖今天给大家推荐一下多用的qq聊天唤醒链接方法具体链接如下,只需要调整下qq号即可,方便实用. 手机移动端调用QQ客服对话聊天窗口: <a target="_blank" href=&quo

html中&lt;a&gt;标签超链接,在新的浏览器窗口打开链接

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head> <body>      <div>             <a href="http://www.baidu.com"  target ="

WordPress如何简单一键设置全站链接都新窗口打开

WordPress如何简单一键设置全站链接都新窗口打开 文章中需要在新的窗口打开链接大概需要在几个地方 1.网站友情链接 2.文章中的超链接 3.评论链接 4.网站导航链接 5.网站子导航链接 6.网站其他内链 以上加粗的两个是非常重要的,我们为什么要设置WordPress网站全站超链接都要设置新窗口打开方式呢?学过SEO的同学们应该都知道,以新窗口打开超链接,原先点开的网站都会停留在浏览器顶部,紧挨着现在这个页面的旁边,SEO里面有种优化方法就叫做:跳出率,跳出率是什么呢?跳出率就是一个用户在

javascript如何在新窗口打开网页

javascript如何在新窗口打开网页:有时候需要在新的窗口打开网页,方法有很多,当然这个问题也很简单,主要是针对初学者的.下面介绍两种在新窗口打开网页的方法:1.最基本的方式: <a href="http://www.softwhy.com" target="_blank">蚂蚁部落</a> 只要将链接的target属性值设置为_blank即可.2.使用javascript打开: window.open([url=http://www.s