zoukankan      html  css  js  c++  java
  • CefSharp禁止弹出新窗体,在同一窗口打开链接,并且支持带type="POST" target="_blank"的链接

    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;
            }
    
        }
    }
    View Code

    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);
                }
            }
        }
    }
    View Code

    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;
            }
        }
    }
    View Code

    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, 0, 0, (int)host.ActualWidth, (int)host.ActualHeight);
        };
        browser.FrameLoadStart += (ss, ee) =>
        {
            this.Dispatcher.BeginInvoke(new Action(() =>
            {
                (ss as ExtChromiumBrowser).Focus();
            }));
        };
    }
    View Code
  • 相关阅读:
    怎么样实现打印网页中指定的表格,而不是全页
    加深C# 中字符串前加@符号理解以及使用~~
    CommandArgument 绑定多个参数
    gridview等控件CommandField英文的解决.
    正式发布基于VS2008的AJAX模板包
    给datalist加自动编号
    .net生成文字图片
    重新注册.net
    Android JNI入门第二篇——Java参数类型与本地参数类型对照
    Android推送方式比较
  • 原文地址:https://www.cnblogs.com/s0611163/p/7716692.html
Copyright © 2011-2022 走看看