cef3+duilb 多次弹窗问题

Duilib嵌入cef3,实现浏览器功能 CEF3介绍:    CEF全称Chromium Embedded Framework,是一个基于Google Chromium 的开源项目。Google Chromium项目主要是为Google Chrome应用开发的,而CEF的目标则是为第三方应用提供可嵌入浏览器支持。CEF隔离底层Chromium和Blink的复杂代码,并提供一套产品级稳定的API,发布跟踪具体Chromium版本的分支,以... 阅读详情

更多精彩内容:http://www.codeye.top
问题描述:

使用cef3+duilib ,浏览器启动后,正常加载页面。等待几秒钟后,又会弹出一个空白页窗口。

解决方法:

经过调试发现,问题出现在cef初始化。具体代码如下:


void CWebClient::CreateBrowser(HWND hParentWnd, const RECT& rect)
{
	
	CEF_REQUIRE_UI_THREAD();
	CefMainArgs main_args(::GetModuleHandle(NULL));
	CefRefPtr<CWebApp> spApp(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<CefCommandLine> command_line = CefCommandLine::GetGlobalCommandLine();
	CefBrowserHost::CreateBrowser(info,this, m_strHomePage,browserSettings, NULL);
}

解决方法:

把初始化的相关内容放到main函数里,至于为什么?????请留言

修改如下


void CWebClient::InitCef( HINSTANCE hInst )
{
	CefMainArgs main_args(::GetModuleHandle(NULL));
	CefRefPtr<CWebApp> spApp(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下必现。

DuiLib快速入门。你的第一个DuiLib程序 1、Duilib简介及编译 Duilib 是一款强大的界面开发工具,可以将用户界面和处理逻辑彻底分离,极大地提高用户界面的开发效率,遵循bsd协议。DuiLib支持Win32程序及MFC程序 (1)右击DuiLib--->设为启动项目 (2)DuiLib属性--->配置属性--->C/C++ --->常规--->附加包含目录--->添加DuiLib的目... 阅读详情

相关推荐

Duilib_CEF桌面软件实战之Duilib嵌入CEF

本文将CEF嵌入到已集成Duilib的Win32程序中。首先将编译好的CEF文件拷贝到项目目录,配置包含路径和库目录。接着创建Cef_App和Cef_Handler类继承CEF相关基类,实现必要的回调函数。然后创建CCefBrowserUI控件类继承Duilib的CControlUI,实现浏览器控件的创建和显示功能。在XML界面中添加cefbrowser控件,并重载CreateControl方法关联控件。最后处理了编译错误和运行崩溃问题,通过添加command_line->AppendSwitch(&

wxy_xx1的博客 1719

Duilib嵌入Cef流程

        CEF全称Chromium Embedded Framework,是一个基于Google Chromium的开源项目。Google Chromium项目主要是为Google Chrome应用开发的,而CEF的目标则是为第三方应用提供可用的嵌入浏览器支持。CEF3不仅开源,而且跨平台,框架的开发者也在不断的更新,英文资料也较丰富,对Html5,Css3等支持也很好。目前CEF3被全球...

xianzongtanxun的专栏 3520

CEF(Chromium Embedded Framework)下载以及编译目的为了后续与DuiLib相结合

是一个开源软件框架,用于在另一个应用程序中嵌入浏览器。这使开发人员能够向其应用程序中添加web浏览功能,并能够使用HTML、CSS和JavaScript创建应用程序的用户界面(或只是其中的一部分)。CEF在LinuxmacOS和Windows上运行。它有许多语言绑定,包括C、C++、Go、Java和Python。ChromiumCEF 1和CEF 3。出现后,CEF 2的开发被放弃。CEF 1是基于的单进程实现。它不再得到积极开发或支持。CEF 3是基于的多进程实现,其性能类似于Google Chrome。

森明帮大于黑虎帮的博客 1万+

duilib+cef+echarts (二) duilib加载cef浏览器

上篇我们讲了如何下载cef版本以及编译wrapper静态库,本章我们就正式进入duilib+cef+echarts中来。本教程代码不同于网上其它简单的demo代码,是经过测试验证的,可以直接使用的,细节考虑很多的可以用到项目中的。相关源码在底部链接中。

weixin_44167436的博客 1211

DUILib 创建自定义文本编辑控件

通过以上属性设置,我们可以精确控制文本编辑控件的外观和行为。DUILib 提供了丰富的属性选项,使我们能够轻松自定义控件,以适应各种用户界面设计需求。希望这篇博客对你理解 DUILib 中的文本编辑控件有所帮助。如果你有任何问题或需要进一步的帮助,请随时留言!

吃面不喝汤的博客 803

duilib中 CEF 浏览器创建、结束流程

duilib中,专门设置了浏览器控件 一 CEF浏览器创建 XML加载过程中,会创建自定义的浏览器控件 ui::Control* CefNativeForm::CreateControl(const std::wstring& pstrClass) { if (pstrClass == L"CefNativeControl") { return new CefN...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 1458

duilib html文件,DuiLib封装cef控件的方法

问题分析因为封装过程中步骤非常多,所以这里只记录下封装的方法,首先duilib和cef都是直接绘制的界面,只有顶层一个句柄,所以封装的过程中cef要使用duilib的消息进行处理,另外cef窗口要放到另一个样式为UI_WNDSTYLE_CHILD的子窗口中然后把这个窗口定位到duilib中对应的自定义控件的位置,用这个样式的原因是为啦避免cef窗口被duilib重复绘制而发生闪动的情况,另外复制绘...

weixin_42176827的博客 712

使用Duilib嵌入CEF3来实现浏览器功能与WebRTC

CEF3使用Chromium作为后端,可以在应用程序中嵌入完整的浏览器引擎,并通过简单的API与浏览器进行交互。监听WebRTC连接对象的事件,例如连接建立、媒体流接收等,并与Duilib的事件系统进行交互,以便在应用程序界面上显示和处理相应的信息。在Duilib应用程序的初始化过程中,调用CEF3的初始化函数。通过监听CEF3浏览器对象的事件,以及与Duilib的事件系统进行交互,实现浏览器功能的相应处理。使用Duilib的UI控件系统,创建一个窗口控件,并将CEF3的浏览器对象嵌入到该控件中。

RqbaGcp的博客 718

duilib+cef+echarts (四) duilib中加载cef浏览器多窗口

本章我们讲如何在duilib中加载多个cef浏览器窗口之前我们已经写了如何在duilib中加载cef浏览器窗口,当时的代码其实已经实现多窗口能力由于每个cef实例窗口是和hwnd是一一绑定的,所以每加载一个浏览器窗口,就需要在duilib中创建个窗口,然后在此窗口中去加载cef浏览器窗口。

weixin_44167436的博客 992

duilib cef控件使用

1 XML资源文件 添加CEF控件 <CefControl name="cef_student" visible="true"/> <?xml version="1.0" encoding="UTF-8"?> <Window caption="0,0,0,44" mininfo="814,666" size="814,666" sizebox=...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 1479

打造定制化开源浏览器:duilib与CEF的融合之道

duilib是一款轻量级的跨平台C++用户界面库,它以XML形式描述用户界面,并采用模板编程来实现界面的渲染和控件逻辑。不同于传统的MFC、WinForm等界面库,duilib提供了一种灵活而强大的界面定义方式,可以实现高度自定义的UI元素,同时保持对Windows平台的良好支持。Chromium Embedded Framework(CEF)是一个开源的框架,它允许开发者在自己的应用程序中嵌入Chromium浏览器引擎。

weixin_33814090的博客 1445

Duilib + Cef

1. 由于CEF工程中使用了NOMINMAX预编译设置。在引用第三方使用min,max库时,会报错。 可以这样处理, #include <algorithm> #define min #define max #include "include\UIlib.h" 2. 中文显示错误,可能是dui库编译时 Character Set 没有选择 Use Unicode Chara...

spark_fountain的专栏 544

Duilib + CEF 实现多标签多页面浏览器实例

本例实现了多页面的声明周期维护,以及如何在Duilib中添加自己的cef控件,界面比较丑,大家见谅,

duilib + cef简单浏览器的demo2--c++和js交互

参考连接: https://bitbucket.org/chromiumembedded/cef/wiki/Home demo下载地址: http://download.youkuaiyun.com/detail/shuaixingrumo/9560822 前一篇博文讲述了在duilib中怎么使用cef3, 这篇我们来探讨下怎么在duilib中使用cef3, 让c++和

编程随手记 7159

duilib+cef+echarts,cef多窗口,js与c++交互(带回调函数的)双向通信

实现了duilib加载了cef功能,在js上引入echarts实现图标相关界面,实现了多窗口能力,c++与js通信数据交互等。 (1)duilib加载cef,实现多窗口能力,并能打开开发者工具页面调试js代码 (2)在js端引入echarts实现了图表界面,实现图表数据数据实时刷新,数据通过js与c++交互获取 (3)实现了c++与js交互的能力,交互接口带有回调函数,双向通信代码完整,可直接使用 1)js调用c++,在c++端注册cpp函数,js端调用此函数,c++收到后通过回调函数将数据返给js端。 2)c++调用js,在js端注册函数,c++调用此函数,js收到后通过回调函数将回调信息返给c++端 (4)cef版本为91.1.23版本,经过测试稳定,无内存泄露等问题,可直接使用。 (5)将cef js于c++交互相关功能封装到了一个库中。可直接引用到项目中使用 (6)同时包含了echarts相关文件 (7)代码完成,有实例程序,注释详细 (8)使用vs2015编译即可 (9)压缩包中有编译完的示例程序,可以先直接查看效果

在duilib中嵌入cef3

在duilib界面库中嵌入cef3网页浏览器,DUILIB是PC下一个很好的界面渲染库,cef3是谷歌开源的网页渲染程序

网易duilib + cef80版本调用失败问题终于解决

发现80版本 bool ClientApp::OnProcessMessageReceived( CefRefPtr<CefBrowser> browser,CefRefPtr<CefFrame> frame,CefProcessId source_process,CefRefPtr<CefProcessMessage> message) 参数是四个,老版本是三个。将判断去掉,简单粗暴的改为browser->GetMainFrame() ,问题解决。

weixin_43095316的博客 306

VScode远程连接开发嵌入式开发板

VScode远程连接开发调试嵌入式开发板

qq_53221728的博客 5891
上一篇: 虚拟化windows10操作系统遇到的问题
下一篇: [Docker入门-1] Docker CE for Ubuntu hello-world
猫影
博客等级 码龄10年 31粉丝 72原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值