gpt4 book ai didi

winforms - 如何处理 CefSharp 中的弹出链接

转载 作者:行者123 更新时间:2023-12-02 15:22:40 43 4
gpt4 key购买 nike

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

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

最佳答案

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

每次浏览器想要打开一个新窗口时,它都会调用生命周期处理程序的 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)
{

}
}

关于winforms - 如何处理 CefSharp 中的弹出链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30553577/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com