I am making a program that loads up only one webpage. User can not access to any other webpage and this windows form is full screen, no borderline.
I manage to make one using windows form and cefsharp but now I have different problem. This specific website displays new pop up when I try to log on. Usually on chrome, it just opens another tab for this but here, it doesn't make new tab but open up new pop up. So I made code to direct popup to newtab as below but it only make new tab for first popup from the first tabpage.
For example, page 1 opens popup then this code takes that popup and create tabPage 2. It works just fine till that point but if there's pop up in tabPage2, it just opens up pop up instead of creating new tab.
How do I fix this? Help please.. I am thinking it's creating new tab for only pop up from tabPage1 and whatever popup it gets from tabPage2, it won't open new tab. Is there way to get around this and fix it?
I am doing this on visual studio 2017 winform, cefsharp ver 67.0.0
Main Class
private void initialize_browser()
{
try
{
CefSettings settings = new CefSettings();
Cef.Initialize(settings);
//main browser
chromeBrowser = new ChromiumWebBrowser("url");
LifespanHandler life = new LifespanHandler();
chromeBrowser.LifeSpanHandler = life;
life.popup_request += life_popup_request;
this.tabPage1.Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
}
catch (Exception ex)
{
MessageBox.Show("Error in initializing the browser. Error: " + ex.Message);
}
}
private void life_popup_request(string popup_request)
{
this.Invoke((MethodInvoker)delegate ()
{
string title = "TabPage " + (tabControl1.TabCount + 1).ToString();
TabPage myTabPage = new TabPage(title);
tabControl1.TabPages.Add(myTabPage);
tabControl1.SelectTab(tabControl1.TabCount - 1);
ChromiumWebBrowser chromeBrowser = new ChromiumWebBrowser(popup_request);
chromeBrowser.Parent = myTabPage;
chromeBrowser.Dock = DockStyle.Fill;
});
}
LifespanHandler Class
public class LifespanHandler : ILifeSpanHandler
{
//event that receive url popup
public event Action<string> popup_request;
bool ILifeSpanHandler.OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
{
//get url popup
if (this.popup_request != null)
this.popup_request(targetUrl);
//stop open popup
newBrowser = null;
return true;
}
bool ILifeSpanHandler.DoClose(IWebBrowser browserControl, IBrowser browser)
{ return false; }
void ILifeSpanHandler.OnBeforeClose(IWebBrowser browserControl, IBrowser browser) { }
void ILifeSpanHandler.OnAfterCreated(IWebBrowser browserControl, IBrowser browser) { }
}