首页 > 解决方案 > 使用 CefSharp C# 将邮件重定向到链接

问题描述

我有一个简单的 C# 应用程序,使用我正在加载网页的 cefSharp 铬浏览器。问题是 mailto 链接没有重定向到默认邮件客户端。我一直在阅读,看来我需要添加一个处理程序。文档说要使用 OnBeforeResourceLoad。我已经尝试了所有我能想到的方法,但无法让它发挥作用。我希望有人可以添加到我在这里的代码中,其中包括类(在正确的位置和其他任何东西让它工作。这是我试图使用信息的链接,但不知道如何实现它。

如何从 CefSharp 3 在本机浏览器中打开链接

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;    

namespace WindowsFormsApp4
{    
    public partial class Form1 : Form
    {        
        public Form1()
        {
            InitializeComponent();
            InitBrowser();            
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        public ChromiumWebBrowser browser;
        public void InitBrowser()
        {
            Cef.Initialize(new CefSettings());
            browser = new ChromiumWebBrowser("https://google.com");

            this.Controls.Add(browser);
            browser.Dock = DockStyle.Fill;
        }        
    }
}

这是我尝试但无法开始工作的方法之一。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;


namespace WindowsFormsApp4
{
    public class BrowserRequestHandler : IRequestHandler
    {
        public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect)
        {
            // Open in Default browser
            if (!request.Url.StartsWith("mailto:"))
            {
                System.Diagnostics.Process.Start(request.Url);
                return true;
            }
            return false;
        }
    }
    public partial class Form1 : Form
    {        
        public Form1()
        {
            InitializeComponent();
            InitBrowser();            
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        public ChromiumWebBrowser browser;
        public void InitBrowser()
        {
            Cef.Initialize(new CefSettings());
            browser = new ChromiumWebBrowser("https://google.com");
            browser.RequestHandler = new BrowserRequestHandler();
            this.Controls.Add(browser);
            browser.Dock = DockStyle.Fill;
        }        
    }
}

我添加了

using CefSharp.Handler;

现在我没有收到错误,但它甚至没有弹出消息框。这就是我所拥有的:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;

using CefSharp.Handler;

namespace CefSharp
{

}

namespace WindowsFormsApp4
{
    public class CustomResourceRequestHandler : ResourceRequestHandler
    {
        public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect)
        {
            System.Windows.Forms.MessageBox.Show("Test");
            // Open in Default browser
            if (!request.Url.StartsWith("mailto:"))
            {
                System.Diagnostics.Process.Start(request.Url);
                return true;
            }
            return false;
        }

    }

    public class CustomRequestHandler : RequestHandler
    {
        protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
        {
            return new CustomResourceRequestHandler();
        }
    }

    public partial class Form1 : Form
    {        
        public Form1()
        {
            InitializeComponent();
            InitBrowser();            
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        public ChromiumWebBrowser browser;
        public void InitBrowser()
        {
            Cef.Initialize(new CefSettings());
            browser = new ChromiumWebBrowser("https://google.com");
            browser.RequestHandler = new CustomRequestHandler();
            this.Controls.Add(browser);
            browser.Dock = DockStyle.Fill;
        }        
    }
}

我让它工作了,但如果我做得正确,我希望你能提供意见。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;
using CefSharp.Handler;



namespace WindowsFormsApp4
{
    public class CustomResourceRequestHandler : ResourceRequestHandler
    {


        protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
        {
            if (request.Url.StartsWith("mailto:"))
            {
                System.Diagnostics.Process.Start(request.Url);
                return CefReturnValue.Cancel;
            }
            return CefReturnValue.Continue;
        }

    }

    public class CustomRequestHandler : RequestHandler
    {
        protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
        {
            return new CustomResourceRequestHandler();
        }
    }

    public partial class Form1 : Form
    {        
        public Form1()
        {
            InitializeComponent();
            InitBrowser();            
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        public ChromiumWebBrowser browser;
        public void InitBrowser()
        {
            Cef.Initialize(new CefSettings());
            browser = new ChromiumWebBrowser("http://www.google.com");
            browser.RequestHandler = new CustomRequestHandler();
            this.Controls.Add(browser);
            browser.Dock = DockStyle.Fill;
        }        
    }
}

标签: c#chromiumcefsharpmailto

解决方案


推荐阅读