![](/img/trans.png)
[英]Winforms,CefSharp : Authentication popup for basic authentication not show
[英]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.