c# - 使用 CefSharp C# 将邮件重定向到链接
问题描述
我有一个简单的 C# 应用程序,使用我正在加载网页的 cefSharp 铬浏览器。问题是 mailto 链接没有重定向到默认邮件客户端。我一直在阅读,看来我需要添加一个处理程序。文档说要使用 OnBeforeResourceLoad。我已经尝试了所有我能想到的方法,但无法让它发挥作用。我希望有人可以添加到我在这里的代码中,其中包括类(在正确的位置和其他任何东西让它工作。这是我试图使用信息的链接,但不知道如何实现它。
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;
}
}
}
解决方案
推荐阅读
- python - ValueError:x和y在python的线性回归中必须具有相同的第一维
- swift - 使用 Siri 处理意图参数和动态选项的错误
- vim - vim 中的 ripgrep :term
- email - Dell Boomi - 如何将电子邮件从收件箱移动到收件箱子文件夹?
- r - 每个循环添加日期列
- windows - 从开始菜单外壳链接启动的电子应用程序会改变 process.execPath?
- maven - 如何通过删除核心 jar 来使用由 maven 依赖项覆盖的战争中的自定义 .jar 文件
- javascript - 使用 .mockImplementation 来实现 Jest 模拟模块
- swiftui - VStack 中的 SwiftUI 视图相互重叠
- python - 在数字正则表达式python之后获取最后一部分