如何处理 CefSharp 中的弹出链接
How to handle popup links in CefSharp
我正在使用 CefSharp 39.0.2
创建一个选项卡式 Web 浏览器。现在,如果用户单击网站上的 link,它将打开一个新的 window,其中包含我原来的 UI 的 none。例如,当您单击 Google 新闻上的一篇文章 link 时,它会在新的 window 中打开,但没有我编写的任何浏览控件。我还研究了 Cef.WinForms.Example
程序,它做的事情完全一样。
是否可以用不同的方式处理这个问题?我希望 link 在新选项卡中打开,或者在新的 window 中打开(所有控件都在那里)。我一直在查看 GitHub 问题,但我找不到这样的东西(也许我还不够努力,因为我认为这也是其他人想要做的......)。我查看了浏览器控件的所有 events
,但我找不到任何看起来像他们处理它的东西。
ChromiumWebBrowser
有一个 LifeSpanHandler
属性。要在 Cefsharp 中手动控制弹出窗口 windows,您必须实现自己的实现 ILifeSpanHandle
接口的生命周期处理程序对象。
每次浏览器想要打开一个新的 window 时,它都会调用您的生命周期处理程序的 OnBeforePopup
函数。在这里您可以实现您想要的行为。如果你returnfalse
,浏览器会弹出一个新的window。如果您 return true
,浏览器将忽略弹出操作,但您可以手动创建新 window、新标签等...
这是自定义生命周期处理器的一个非常简单的例子。在弹出请求时,它会触发一个名为 PopupRequest 的事件。您可以订阅此类事件并手动创建新的 window/tab。然后,return指示 ChromiumWebBrowser
不要创建自己的新 window 是正确的。但是,您需要自己实现使用另一个 ChromiumWebBrowser
创建新的 window。
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)
{
}
}
我正在使用 CefSharp 39.0.2
创建一个选项卡式 Web 浏览器。现在,如果用户单击网站上的 link,它将打开一个新的 window,其中包含我原来的 UI 的 none。例如,当您单击 Google 新闻上的一篇文章 link 时,它会在新的 window 中打开,但没有我编写的任何浏览控件。我还研究了 Cef.WinForms.Example
程序,它做的事情完全一样。
是否可以用不同的方式处理这个问题?我希望 link 在新选项卡中打开,或者在新的 window 中打开(所有控件都在那里)。我一直在查看 GitHub 问题,但我找不到这样的东西(也许我还不够努力,因为我认为这也是其他人想要做的......)。我查看了浏览器控件的所有 events
,但我找不到任何看起来像他们处理它的东西。
ChromiumWebBrowser
有一个 LifeSpanHandler
属性。要在 Cefsharp 中手动控制弹出窗口 windows,您必须实现自己的实现 ILifeSpanHandle
接口的生命周期处理程序对象。
每次浏览器想要打开一个新的 window 时,它都会调用您的生命周期处理程序的 OnBeforePopup
函数。在这里您可以实现您想要的行为。如果你returnfalse
,浏览器会弹出一个新的window。如果您 return true
,浏览器将忽略弹出操作,但您可以手动创建新 window、新标签等...
这是自定义生命周期处理器的一个非常简单的例子。在弹出请求时,它会触发一个名为 PopupRequest 的事件。您可以订阅此类事件并手动创建新的 window/tab。然后,return指示 ChromiumWebBrowser
不要创建自己的新 window 是正确的。但是,您需要自己实现使用另一个 ChromiumWebBrowser
创建新的 window。
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)
{
}
}