本文共 2793 字,大约阅读时间需要 9 分钟。
更多精彩内容:
问题描述:使用cef3+duilib ,浏览器启动后,正常加载页面。等待几秒钟后,又会弹出一个空白页窗口。
解决方法:
经过调试发现,问题出现在cef初始化。具体代码如下:
void CWebClient::CreateBrowser(HWND hParentWnd, const RECT& rect){ CEF_REQUIRE_UI_THREAD(); CefMainArgs main_args(::GetModuleHandle(NULL)); CefRefPtrspApp(new CWebApp); int exit_code = CefExecuteProcess(main_args, spApp.get(),NULL); if (exit_code>0) { return; } /** 主要是这里出问题了 // 进行初始化的相关操作 CefSettings cSettings; CefSettingsTraits::init( &cSettings); cSettings.single_process = false; cSettings.ignore_certificate_errors = true; cSettings.log_severity = LOGSEVERITY_ERROR; cSettings.multi_threaded_message_loop = true; // 使用duilib的消息循环进行处理消息 cSettings.no_sandbox = true; cSettings.locale.str = L"zh-CN"; CefInitialize(main_args, cSettings, spApp.get(), NULL); // 初始化相关操作结束 **/ CefWindowInfo info; m_hParWnd = hParentWnd; info.SetAsChild( hParentWnd, rect); CefBrowserSettings browserSettings; char* code = "UTF-8"; cef_string_t encode={}; cef_string_utf8_to_utf16(code,strlen(code),&encode); browserSettings.default_encoding=encode; browserSettings.background_color=CefColorSetARGB(0,0,0,1); CefRefPtr command_line = CefCommandLine::GetGlobalCommandLine(); CefBrowserHost::CreateBrowser(info,this, m_strHomePage,browserSettings, NULL);}
解决方法:
把初始化的相关内容放到main函数里,至于为什么?????请留言
修改如下
void CWebClient::InitCef( HINSTANCE hInst ){ CefMainArgs main_args(::GetModuleHandle(NULL)); CefRefPtrspApp(new CWebApp); int exit_code = CefExecuteProcess(main_args, spApp.get(),NULL); if (exit_code>0) { return; } CefSettings cSettings; CefSettingsTraits::init( &cSettings); cSettings.single_process = false; cSettings.ignore_certificate_errors = true; cSettings.log_severity = LOGSEVERITY_ERROR; cSettings.multi_threaded_message_loop = true; cSettings.no_sandbox = true; cSettings.locale.str = L"zh-CN"; CefInitialize(main_args, cSettings, spApp.get(), NULL);}// main 里的内容int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); ::CoInitialize(NULL); // 初始化cef ---------- CWebClient::GetInstance()->InitCef(hInstance); // ----------------------- CDuiFrameWnd *pFrame = CDuiFrameWnd::MainWnd(); CPaintManagerUI::SetInstance(hInstance); CPaintManagerUI::SetCurrentPath(CPaintManagerUI::GetInstancePath()); CPaintManagerUI::SetResourcePath(L"Skin"); wstring strCmd = L"{\"title\":\"browser\",\"url\":\"http://127.0.0.1:9000/user/login\"}"; //pFrame->SetParams(strCmd); pFrame->SetParams(wstring(strCmd)); pFrame->Create(NULL, _T("BROWSER"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE); pFrame->CenterWindow(); pFrame->ShowWindow(); CPaintManagerUI::MessageLoop(); // Shut down CEF. return 0;}
就这样吧,问题解决了就行。。如果不修改,在windows10 下偶尔是正常的,在win7下必现。
转载地址:http://vhvmb.baihongyu.com/