我最近将cefsharp wpf从69.0.0升级到71.0.0,并使用managedcefbrowseradapter创建了浏览器,并且将IWindowInfo作为参数使用时,浏览器未呈现。刚通过窗口手柄时,之前的工作正常。我必须在这里适应任何重大变化吗?
工作一个-69.0.0
_managedCefBrowserAdapter.CreateBrowser(BrowserSettings,RequestContext,_window.Handle,address);
不起作用-71.0.0
IWindowInfo window = new WindowInfo(); window.WindowHandle = _window.Handle; _managedCefBrowserAdapter.CreateBrowser(窗口,BrowserSettings,RequestContext,地址);
CEF浏览器托管在WPF控件中,该控件继承自System.Windows.Controls。该项目使用cefsharp.wfp WPF控件句柄存储在ControlHandle属性中。 使用cesharp.wpf命名空间中的CefSettings初始化Cef。
CefSettings settings = new CefSettings
{
CachePath="xxxxx",
PersistSessionCookies = true,
LogSeverity = LogSeverity.Default,
LogFile = Path.Combine(logsFolder, "xxxxx.log"),
Locale = "en-US",
ResourcesDirPath = "xxxxxx"
}
Cef.Initialize(settings);
我们有一个自定义类CefBrowser,该类实现cefsharp.internals.IWebBrowserInternal并使用ManagedCefBrowserAdapter创建cefBrowser。
NativeWindow window = new NativeWindow()
window.CreateHandle(new CreateParams());
IWindowInfo infowindow = new WindowInfo();
infowindow.WindowHandle = window.Handle;
将创建一个本机窗口,并将其设置为窗口句柄。 将使用窗口句柄创建ManagedCefBrowserAdapter createbrowser。
_managedCefBrowserAdapter.CreateBrowser(infowindow , BrowserSettings, RequestContext, address);
创建一个浏览器,在OnAfterBrowserCreated方法中,将调用SetParent API将cefsharp浏览器主机的父级设置为WPF控件。
void IWebBrowserInternal.OnAfterBrowserCreated(IBrowser browser)
{
_browser = browser;
SetParent(browser.GetHost().GetWindowHandle(), ControlHandle);
ResizeBrowser(Size); //WPF control size
OnBrowserCreated(new EventArgs());
}
#endregion
#region Private Members
private void OnBrowserCreated(EventArgs args)
{
EventHandler<EventArgs> handler = BrowserCreated;
if (handler != null)
{
handler(this, args);
}
}
通过调用_managedCefBrowserAdapter.CreateBrowser(BrowserSettings,RequestContext,window.Handle,address),此版本一直工作到69.0.0版本。 对于71.0.0,使用IWindowInfo进行调用会破坏它,并且不会呈现任何页面。