繁体   English   中英

如何处理 CefSharp 中的弹出链接

[英]How to handle popup links in CefSharp

我正在使用CefSharp 39.0.2创建选项卡式 Web 浏览器。 现在,如果用户单击网站上的链接,它将打开一个没有我原来的 UI 的新窗口。 例如,当您点击 Google 新闻上的文章链接时,它会在一个新窗口中打开,但没有我创建的任何浏览控件。 我还研究了Cef.WinForms.Example程序,它做同样的事情。

是否有可能以不同的方式处理这个问题? 我希望链接在新选项卡中打开,或在新窗口中打开(所有控件都在那里)。 我一直在查看 GitHub 问题,但找不到类似的东西(也许我看的不够仔细,因为我认为这也是其他人想要做的……)。 我查看了浏览器控件的所有events ,但找不到任何看起来像他们处理它的事件。

ChromiumWebBrowser有一个LifeSpanHandler属性。 要在 Cefsharp 中手动控制弹出窗口,您必须实现自己的生命周期处理程序对象,该对象实现了ILifeSpanHandle接口。

每次浏览器想要打开一个新窗口时,它都会调用您的生命周期处理程序的OnBeforePopup函数。 在这里您可以实现您想要的行为。 如果返回false ,浏览器将弹出一个新窗口。 如果返回true ,浏览器将忽略弹出操作,但您可以手动创建新窗口、新选项卡等...

这是自定义寿命处理程序的一个非常简单的示例。 在弹出请求时,它会触发一个名为 PopupRequest 的事件。 您可以订阅此类事件并手动创建新窗口/选项卡。 然后,它返回 true 指示ChromiumWebBrowser不要创建自己的新窗口。 但是,您需要自己使用另一个ChromiumWebBrowser实现创建新窗口。

public class SampleLifeSpanHandler: ILifeSpanHandler
{
    public event Action<string> PopupRequest;

    public bool OnBeforePopup(IWebBrowser browser, string sourceUrl, string targetUrl, ref int x, ref int y, ref int width,
        ref int height)
    {
        if (PopupRequest != null)
            PopupRequest(targetUrl);

        return true;
    }

    public void OnBeforeClose(IWebBrowser browser)
    {

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM