Ответ 1
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)
{
}
}