我有一个应用程序,在选项卡控件中有两个选项卡,每个选项卡包含一个CefSharp ChromiumWebBrowser . 我们称之为ChromiumWebBrowsers searchBrowser
和 detailsBrowser
.
假设我单击 searchBrowser
中的链接,如果该链接包含文本"xrep2",我希望链接在 detailsBrowser
中打开,否则应该在 searchBrowser
中打开 .
在此应用程序的先前版本中,我使用了WinForms Web浏览器控件 . 我正在重写WPF中的应用程序并使用CefSharp . 使用WinForms非常简单 . 在 Navigating
事件中,你会做类似的事情
private void browser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
if (browser.StatusText.Contains("xrep2."))
{
e.Cancel = true;
detailsBrowser.Url = new Uri(browser.StatusText);
tabControl1.SelectedIndex = 1;
}
}
但是当使用CefSharp时,似乎我必须在每个this post内的LifeSpanHandler中创建一个事件,并在单击 target="_blank"
链接时触发事件 . 我想要找到一种更简单的方法,但如果没有,我需要弄清楚如何为 public event Action<string> PopupRequest;
创建的事件订阅方法以及放置逻辑的位置(如 if(searchBrowser.Address.Contains("xrep2")) detailsBrowser.Address = X else searchBrowser.Address = X
我有下面的LifeSpanHandler类代码,包括在点击 target="_blank"
链接时应该触发的PopupRequest事件,但我仍然坚持这一点 .
public class LifeSpanHandler : ILifeSpanHandler
{
public event Action<string> PopupRequest;
public virtual bool OnBeforePopup(IWebBrowser browserControl, string sourceUrl, string targetUrl, ref int x, ref int y, ref int width,
ref int height)
{
if (PopupRequest != null)
PopupRequest(targetUrl);
return true;
}
}