I want to create a browser based on CEF 3.1650.1503 + Chromium 31.0.1650.16
it work very well, but I want to show the CefWebBrowser Control in tabPage of my Winform app, not as a popup window when I meet "target:_blank" or "window.open"
1. I try to create a new CefWebBrowser myself in BeforePopup and set e.Handed = true (e is type of BeforePopupEventArgs) to prevent a popup window, here is my code:
- Code: Select all
internal protected virtual void OnBeforePopup(BeforePopupEventArgs e)
{
if (BeforePopup != null) {
[color=#FF0000][b]e.Handled = true;[/b][/color]
BeforePopup(this, e);
}
else
e.Handled = false;
}
this.cefWebBrowser.BeforePopup += (s, e) =>
{
BeginInvoke(new Action(() =>
{
CefWebBrowser clone = new CefWebBrowser();
clone._handleCreated = true;
var windowInfo = CefWindowInfo.Create();
windowInfo.SetAsChild(clone.Handle, new CefRectangle { X = 0, Y = 0, Width = Width, Height = Height });
var client = e.Client;
CefFrame frame = (CefFrame)e.Frame;
CefBrowser browser = frame.Browser;
CefRequestContext context = browser.GetHost().GetRequestContext();
var settings = new CefBrowserSettings
{
// AuthorAndUserStylesDisabled = false,
};
[color=#FF0000]CefBrowserHost.CreateBrowser(windowInfo, client, settings, e.TargetUrl, context);[/color]
NewTab(clone);
}));
};
CefBrowserHost.CreateBrowser(windowInfo, client, settings, e.TargetUrl, context); indeed create a CefWebBrowser and add to tabPage successfully, but when I check the browser, the referer info is lost.
The popup window do not lose referer info !
so my first question is :
How can I add referer info when creating a new CefWebBrowser?
2. In this way, I still set e.Handled = true; in OnBeforePopup, but in BeforePopup function, I do not create a new CefWebBrowser, instead I find the CefBrowser in e.Frame, and add it into tabpage
- Code: Select all
this.cefWebBrowser.BeforePopup += (s, e) =>
{
BeginInvoke(new Action(() =>
{
CefWebBrowser clone = new CefWebBrowser();
clone._handleCreated = true;
var windowInfo = CefWindowInfo.Create();
windowInfo.SetAsChild(clone.Handle, new CefRectangle { X = 0, Y = 0, Width = Width, Height = Height });
CefFrame frame = (CefFrame)e.Frame;
CefBrowser browser = frame.Browser;
clone._browser = browser;
clone._browserWindowHandle = browser.GetHost().GetWindowHandle();
windowInfo.Handle = clone._browserWindowHandle;
CefWebBrowser.ResizeWindow(clone._browserWindowHandle, Width, Height);
SetParent(clone._browserWindowHandle, clone.Handle);
NewTab(clone);
}));
};
In this way , the CefBrowser I find in e.Frame.Browser is the same as the old CefWebBrowser.Browser,
So my question 2 is : in OnBeforePopup, is the new CefBrowser is created? if not ,when the new CefBrowser is created?
if I set e.Handled = true in OnBeforePopup, OnBrowserAfterCreated function will not be called!!
Can anybody helps me ? thanks very much.