我有一个应用程序,在选项卡控件中有两个选项卡,每个选项卡包含一个CefSharp ChromiumWebBrowser . 我们称之为ChromiumWebBrowsers searchBrowserdetailsBrowser .

假设我单击 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;
    }
}