![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
CEF应用
文章平均质量分 68
cef嵌入式浏览器
基本应用 及 与客户端交互方式
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
清水迎朝阳
多年windows下c++客户端开发,或多或少踩了很多坑,积累了一些经验
展开
-
CEF C++端判断前端是否注册了某个JS函数
前端注册的方法,保存在渲染进程中render_registered_function_浏览器进程要获得渲染进程信息,就需要通过进程通信的方法。收到后,返回上层处理。原创 2024-03-13 15:56:06 · 212 阅读 · 1 评论 -
CEF c++调用JS,并获得JS返回值的 流程
所以,渲染进程进而判断,如果返回对象的话,则把对象转换成json串,再返回给调用这个JS的那个C++函数的回调中。这里的匿名函数,就是c++,调用注册的JS名时,所要执行的那段JS代码函数。这样,C++调用这个注册的JS,又得到了JS的返回json信息。参数:方法名、JSON参数串,接收JS回调的匿名函数。在前端中,使用扩展代码提供的方式,注册个JS。CEF中,c++层,可以直接调用这个JS。如果,JS中,需要返回C++ 执行结果,比如,C++浏览器进程 ,调用方式。这里,JS返回的是一个对象,原创 2024-03-08 17:31:05 · 256 阅读 · 0 评论 -
CEF JS与c++能够交互的原理 以及 JS 调用C++的流程分析
当js中,触发了扩展代码中的函数中,就会调到这里处理// 当Web中调用了"NimCefWebFunction"函数后,会触发到这里,然后把参数保存,转发到Broswer进程// Broswer进程的BrowserHandler类在OnProcessMessageReceived接口中处理kJsCallbackMessage消息,就可以收到这个消息// 允许没有参数列表的调用,第二个参数为回调// 如果传递了参数列表,那么回调是第三个参数else。原创 2024-03-08 15:21:55 · 466 阅读 · 0 评论 -
CEF 窗口全屏
有时候需要全屏播放视频,这时候就需要将CEF所在的窗口全屏,这样,就可以全屏显示CEF网页了。原创 2023-12-12 10:22:33 · 426 阅读 · 0 评论 -
CEF 之 Render进程 与 Browser进程通信
目录一、进程通信1、两进程通信消息名2、Browser给Render进程发消息1)SendProcessMessage2)CefProcessMessage2.1)、定义2.2)、 应用3)、给Render进程发送消息4)、一个较为完整的示例4.1)通信函数4.2)调用函数4.3)、调用示例5)、渲染进程收到信息3、Render进程给Browser进程通信二、自己的通信示例1、render进程 绑定APP信息1.1)获得render.exe 文件夹位置1.2)宽字符转UTF81.3)判断文件是否存在2、绑定原创 2023-10-20 15:31:15 · 488 阅读 · 0 评论 -
CEF 缓存处理:清理缓存、禁用缓存、忽略缓存
测试发现,大部分接口都不使用本地缓存了,少部分请求可能因为截取不到的关系,还是从缓存中读取,不过功能差不多和禁用缓存 差不多了。在CEF运行时,是不建议删除缓存文件的,一是有的缓存正在使用删不掉,二是页面加载默认从缓存加载,缓存突然没了,会有缓存读取错误。相比自己截取请求头方式处理,还有小部分仍是从缓存中读取的情况,使用这种方式,绝大部分都忽略了本地缓存,从服务器中直接读取了。CEF 清理缓存时机,最好是在初始化前、或CEF结束后, 在运行时,不建议清理缓存,因为可能引起更多的问题。原创 2023-08-22 11:01:18 · 2405 阅读 · 0 评论 -
使用CEF 获得某头条请求,并生成本地文件的方法
目录一、获得网站请求响应信息1、响应过滤2、匹配过滤URL的函数3、获得请求响应后的处理1)自定义响应过滤处理器2)往上层应用传递数据二、将获得响应信息,保存成本地JS文件1、信息结构体2、解析响应JSON,将感兴趣的信息存储起来3、生成JS文件,里面保存JSON数据参考类似需求文章https://gudianxiaoshuo.blog.csdn.net/article/details/122671580我们可以使用CEF,截取请求响应信息,通过解析JSON响应数据,以完成自己的需求。本例,我需要截取某头条原创 2023-03-10 16:07:29 · 824 阅读 · 0 评论 -
CEF 破解内存超过1G 崩溃白屏现象
有的说,通过VS linker systerm Enable Large Addresses,可以达到目的,CEF 32位下,默认最大内存1G,超过1G,CEF崩溃,要显示的页面白屏。内存不断升高的测试网址,打开任务管理器,查看CEF崩溃时,内存大小。后来通过设置命令行,突破了32位下1G内存的限制。,最大还是1G,超过1G就崩溃。实测,内存突破2G后,才崩溃。原创 2022-09-30 10:32:22 · 1938 阅读 · 0 评论 -
CEF 实现放大缩小视图功能
0键,对应的值是0x16 ,也就是十进制48, 在我的机子上 VK_0并没有定义,所以直接中这个值进行判断。一个是NUM_LOCK 锁住时, VK_NUMPAD0 代表按了小键盘的0。一个是NUM_LOCK 未锁住时,VK_INSERT 代表按了小键盘0。大键盘上的 - 的虚拟键 VK_OEM_MINUS。2)、大键盘上的 + 虚拟键是 VK_OEM_PLUS。同理,小键盘上的 - 的虚拟键 VK_SUBTRACT。需要注意的是,调用的时候,发现始终返回0。.........原创 2022-08-12 11:23:21 · 1008 阅读 · 0 评论 -
设置窗口焦点
需求:调用第三方窗口,并时刻让第三方窗口具有焦点,以便使用快捷键操控第三方窗口实测:SWP_ASYNCWINDOWPOS让第三方窗口,自己设置位置时,并不会将第三方窗口设置为焦点而 使用::SetWindowPos(haojunHWND, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);却可以将第三方窗口设置焦点...原创 2022-06-15 18:53:36 · 630 阅读 · 0 评论 -
在CEF中,JS 隐藏某元素的父元素 或更改类名称 及 与c++交互方法
目录一、需求二、实现1、getElementsByClassName 2、定位到具体元素3、定位到父元素4、隐藏这个元素 5、CEF 实现自动隐藏这个元素将这个元素隐藏这个元素 ,没有ID,也没有特别类,但有个特别ICON, 通过这个ICON 简洁隐藏它返回的是个数组 重新显示: 监听LoadEnd事件.........原创 2022-06-05 16:46:23 · 416 阅读 · 0 评论 -
C++ 实现decodeURI解码URL 中文参数
目录一、需求二 、实现1、头文件2、解码实现3、示例示例:现在想用C++ 实现解码URL原创 2022-06-04 14:56:08 · 636 阅读 · 0 评论 -
CEF 拦截URL,重定向新的网址
目录一、需求二、CefResourceRequestHandler::OnBeforeResourceLoad1、OnBeforeResourceLoad2、重载此函数处理1)继承CefRequestHandler2)实例化CefResourceRequestHandler3)重载 OnBeforeResourceLoad4)通过HandlerDelegate 转到上层5)重定向示例比如,点击一个超链接,但是这时候想拦截这个超链接URL,换成另一个网址2)实例化CefResourceReq原创 2022-06-03 16:45:32 · 1398 阅读 · 3 评论 -
实现拖动无标题栏 CEF的方法三 :创建蒙版层窗口拖动
目录一、蒙版层窗口1、蒙版层窗口类2、在创建CEF窗口后,同时创建蒙版窗口3、蒙版显示时机1)注入JS监听点击触摸事件2)点击或触摸时显示蒙版4、蒙版初始位置5、拖动蒙版时,动态调整CEF窗口位置1)蒙版移动消息2)根据蒙版位置,调整父窗口思路:在CEF窗口之上,创建其子窗口,背景半透明,通过拖动这个子窗口,动态调整CEF窗口位置,从而实现 拖动无标题栏CEF窗口的目的。一、蒙版层窗口1、蒙版层窗口类#pragma onc..原创 2022-05-12 15:59:30 · 827 阅读 · 0 评论 -
实现拖动无标题栏 CEF的方法二 :注入JS监听鼠标、触摸事件方式
目录一、JS注入实现拖动方式1、鼠标点击相关JS监听2、触摸相关JS事件1)触摸开始、触摸移动事件2)触摸结束事件3、总的JS注入事件4、注入时机5、注册C++函数,接收返回的监听信息6、根据返回的监听信息,实现拖动无标题栏CEF窗口如下图所示,使用CEF实现视频播放,同时CEF是无标题栏的,下面通过注入JS监听方式实现这个功能一、JS注入实现拖动方式1、鼠标点击相关JS监听CefCpp_SendMouseInfo 为在浏览器上注册原创 2022-05-10 17:12:52 · 1181 阅读 · 0 评论 -
实现拖动无标题栏 CEF的方法一 :hook方法
目录一、实现方式1、定义全局变量2、在CEF父窗口初始化时,赋值父窗口句柄3、HOOK函数4、设置HOOK函数1)先要获取CEF窗口句柄:2)然后获得CEF线程ID3)最后设置CEF线程的HOOK5、处理HOOK到的CEF鼠标消息如下图所示,使用CEF实现视频播放,同时CEF是无标题栏的,下面通过HOOK的方式 实现无标题栏CEF拖动一、实现方式1、定义全局变量HHOOK g_hHook = NULL;HWND hWndMain.原创 2022-05-07 17:50:20 · 911 阅读 · 2 评论 -
CEF 之 CefDownloadHandler使用: 自定义下载路径、下载进度
目录一、CefDownloadHandler二、自定义下载路径 为系统download路径下1、系统下载路径获得2、重载OnBeforeDownload ,自定义下载默认路径3、下载路径为本EXE上层目录中4、实现下载特定文件比如更新包时,直接下载,其它情况下跳出下载对话框功能三 、下载进度1、重载OnDownloadUpdated2、通过代理回调,传递到UI层处理自定义下载路径,需要继承CefDownloadHandler,一、CefDownlo..原创 2022-04-13 18:03:45 · 2362 阅读 · 0 评论 -
CEF 之 CefKeyboardHandler使用: 添加按键信息
场景 : CEF浏览器网页全屏时,点击ESC按键,窗口没有获得ESC按键消息解决: CEF添加ESC按键通知 BrowserHandler添加CefKeyboardHandler按键处理基类 //按键按下事件 virtual bool OnPreKeyEvent(CefRefPtr<CefBrowser> browser, const CefKeyEvent& event, CefEventHandle os_ev...原创 2020-05-29 11:39:53 · 2351 阅读 · 3 评论 -
CEF 之CefResourceRequestHandler使用,优化某喜马网站下载体验,实现点击即下载功能
需求:在某喜马网站上下载音频很麻烦,而且自己的录音传上去,再下载下来,也是够折腾的,因此,就想,有没有简单的方法,可以点一下要下载的声音,就自动下载下来。0、处理浏览器请求有关的事件 CefResourceRequestHandlerCEF3 C++ API Docs - Version 80.1.4+g8927396+chromium-80.0.3987.149: CefResourceRequestHandler1、分析网页...原创 2022-01-25 16:02:34 · 1535 阅读 · 0 评论 -
CEF 注入JS代码 总是提示错误,查了好久才找出原因
const std::string& code2 = "\n\ document.addEventListener('touchstart',myEventFunc);\n\ function myEventFunc(event){\n\ console.log(event);\n\ let data = { \n\ type:event.type,\n\ x:event.touches[0].clientX, \n\ y:event.to...原创 2022-05-01 15:47:49 · 933 阅读 · 0 评论 -
从 chromium源码中 去除CEF对requestFullscreen()限制
目录修改位置1:修改位置2:测试文件:CEF收到OnFullscreenModeChange 回调后处理:在CEF中,调用requestFullscreen()时,会发现必须用户交互方式调用才行,会给出如下错误提示:Failed to execute 'requestFullscreen' on 'Element': API can only be initiated by a user gesture.修改位置1:third_party/blink/render原创 2022-04-27 16:40:48 · 447 阅读 · 0 评论 -
从 chromium源码中 去除iframe无法显示x-frame网页问题
我已经尝试过CEF各层面的修改,无论是HANDELE处理,还是从extentions扩展考虑,均无法实现在iframe中 显示 响应头 带有x-frame-optition的网页。后来,从chromium源码着手,修改源码的两个地方,重新编译新的CEF后,就可以无限制的在iframe中显示网页了。借鉴ignore_frame 插件的JS代码const HEADERS_TO_STRIP_LOWERCASE = [ 'content-security-policy', 'x-...原创 2022-01-21 16:48:38 · 787 阅读 · 0 评论 -
从chrominum 编译CEF
一、装备工作1、阿里云开一个美国的 Windows 服务器使用远桌面链接的方式 登录2、参考文档参考的,编译文档为:chromiumembedded / cef / wiki / MasterBuildQuickStart — Bitbucket3、VS2019社区版安装需要下载 VS2019 社区版https://my.visualstudio.com/Downloads?q=visual%20studio%202019&wt.mc_id=o~ms...原创 2022-01-20 17:23:41 · 1236 阅读 · 2 评论 -
CEF 一个通过模拟点击实现全屏的例子
目录1、前端示例代码2、模拟点击接口3、触发CEF HandlerOnFullscreenModeChange1、前端示例代码<html> <head></head> <body> <div id="divTest" style="background-color:bisque"> <h1>全屏测试</h1> ...原创 2022-04-27 11:48:30 · 655 阅读 · 0 评论 -
CEF 光标形状保持不变
项目中,发现一个奇怪问题前端,作了一个涂鸦工具,其中画画时,会将光标改变成用CSS样式设置的笔的形状,在谷歌浏览器上是正常的,但在CEF上,光标任然是箭头。这是怎么一回事呢?目录一、CefDisplayHandler1、总体概览2、光标变化时触发的回调OnCursorChange3、 光标设置新样式后,不改变的原因一、CefDisplayHandler1、总体概览///// Implement this interface to handle events r原创 2022-02-23 17:51:03 · 387 阅读 · 0 评论 -
cefClient 项目分析
1、AddTestMenuItemsvoid AddTestMenuItems(CefRefPtr<CefMenuModel> test_menu) { test_menu->AddItem(ID_TESTS_GETSOURCE, "Get Source"); test_menu->AddItem(ID_TESTS_GETTEXT, "Get Text"); test_menu->AddItem(ID_TESTS_WINDOW_NEW, "New Wi...原创 2022-01-24 17:02:45 · 756 阅读 · 0 评论 -
CEF 对CRX的支持程度
一、CEF是否支持CRX很遗憾的告诉大家,CEF只支持部分扩展接口在CEF里,输入chrome://extensions-support 就可获知CEF当前支持的接口chromiumembedded / cef / issues / #1947 - Add support for chrome extensions — Bitbucket这是关于CEF关于扩展接口的讨论,看样子估计以后也够呛会支持其它扩展接口如果扩展中,没有不支持的接口,则在CEF中是可以使用的如果扩展...原创 2022-01-21 15:43:02 · 769 阅读 · 2 评论 -
CEF 控制台 修改URL地址
有时我们希望,在控制台中直接修改当前URL地址,以方便调试可以这样做,之前用过好几次,但都忘记了,又得从新找,太浪费时间了,所以这个小功能有必要记下。使用window.location.href="https://www.toutiao.com/" 这个命令就可以了,这样当前CEF页面就换了新的网址页面...原创 2021-12-13 10:44:27 · 1086 阅读 · 0 评论 -
CEF 控件 刚启动时,黑屏一闪现象解决
cef系列文章CEF浏览器 模拟鼠标点击cef 通过 命令行设置项 对浏览器进行定制化改造本地VUE网页 与客户端 交互 整体解决方案客户端-CEF交互应用实例:客户端向网页传递信息、 网页向客户端传递网页元素信息duilib cef控件使用CEF系列之 如何使用前端JS 向 C++传递信息CEF 添加ESC按键通知CEF 调用JS 示例给CEF 加载网页时,增加蒙版CEF vue 交互CEF 加载VUEV8引擎扩展的方式 实现cef C++ js交互CE原创 2021-08-02 18:41:53 · 1787 阅读 · 6 评论 -
CEF 设置Useragent、LOG路径、中文环境等
cef系列文章CEF浏览器 模拟鼠标点击cef 通过 命令行设置项 对浏览器进行定制化改造本地VUE网页 与客户端 交互 整体解决方案客户端-CEF交互应用实例:客户端向网页传递信息、 网页向客户端传递网页元素信息duilib cef控件使用CEF系列之 如何使用前端JS 向 C++传递信息CEF 添加ESC按键通知CEF 调用JS 示例给CEF 加载网页时,增加蒙版CEF vue 交互CEF 加载VUEV8引擎扩展的方式 实现cef C++ js交互CE原创 2021-05-21 18:20:04 · 1870 阅读 · 0 评论 -
CEF浏览器 模拟鼠标点击
一、CEF模拟事件1.1 可向CEF浏览器发送的模拟事件在CefBrowserHost类中,提供了发送键盘事件、鼠标点击事件、鼠标移动事件、鼠标滚动事件、设置焦点 等事件 到browser浏览器的方法。 /// // Send a key event to the browser. /// /*--cef()--*/ virtual void SendKeyEvent(const CefKeyEvent& event) =0; /// // Sen...原创 2021-03-19 16:53:16 · 2792 阅读 · 0 评论 -
cef 通过 命令行设置项 对浏览器进行定制化改造
目录CEF3 命令行一、可设置哪些项1.1 可设置的命令行参数总览1.2 设置渲染进程1.3 开启webGl功能1.4 开启摄像头功能1.5 开启FLASH1.6 开启语音输入1.7 关闭代理1.8 禁用GPU1.9 允许跨越1.10 允许访问无SSL证书网站CEF3 命令行在CEF3 中,可以通过命令行对CEF浏览器进行定制化设置。CEF3 在函数OnBeforeCommandLineProcessing(const Cef...原创 2021-02-19 15:51:52 · 1023 阅读 · 0 评论 -
本地VUE网页 与客户端 交互 整体解决方案
0)需求: 客户端需要实现一个页面,这个页面上需要请求数据,并展示出来。 0.1) 使用纯客户端做的话,还需要客户端自己请求接口,然后自己下载图片,最后才能设置布局,将其最终展现出来,这是一系列的繁琐工作 0.2) 而使用网页的话,可以在网页一个页面内,实现接口请求、图片展现功能,而这都是浏览器给简化的 两种方案对比下,使用网页方案更简单,耦合性也更低 但是,前端也很忙,抽不出时间来给客户端做单独的网页,所以只能自己使用VUE来写网页了...原创 2020-10-13 18:27:08 · 1142 阅读 · 0 评论 -
客户端-CEF交互应用实例:客户端向网页传递信息、 网页向客户端传递网页元素信息
前面的交互,着重点在于原理,过于繁琐,本文在于应用。一 客户端加载网页时,给网页传递信息 很常见的场景,客户端嵌套CEF, 当客户端打开CEF网页时,要将客户端用户信息,直播间基本信息发送给网页, 网页收到后,处理这些信息。 方法就是,监听CEF Load事件,在LoadEnd时,马上调用JS函数,给CEF传递信息 1)向CEF网页传递客户端信息 cef_control_->AttachLoadEnd([t...原创 2020-09-24 16:21:14 · 1281 阅读 · 0 评论 -
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=...原创 2019-10-31 11:43:59 · 1168 阅读 · 0 评论 -
CEF系列之 如何使用前端JS 向 C++传递信息
需求有这么个需求: CEF浏览器上,点击一个按钮,要求弹出一个原生对话框,在这个原生对话框上,加载CEF浏览器传来的网址。这个就涉及到了JS给C++传送信息,也就是JS调用C++功能。JS写法NimCefWebInstance.call('CEF_SendToCppExerciseInfo',{url},(error,result)其中,NimCe...原创 2020-04-08 10:31:17 · 1343 阅读 · 2 评论 -
CEF 调用JS 示例
场景: C++端进行窗口抓屏 然后通过调用注册的JS函数 ,将截屏的BASE64数据发给浏览器显示1前端首先需要网页中注册要调用的JS函数<html><head> <meta charset="utf-8" /> <title>C++调用JS 给JS传递信息</title> <script language="JavaScript"> (() =...原创 2020-05-27 15:46:22 · 3090 阅读 · 8 评论 -
给CEF 加载网页时,增加蒙版
加载网页一般费时,所以需要再开始加载网页时,添加蒙版,再加载网页后,取消蒙版具体方法如下:duilib UI布局端: <VBox bkcolor="xnw_client" bordercolor="green" bordersize="1,1,1,1" padding="1,1,1,1"> <!-- 客户端名称设置 --> ...原创 2020-04-09 17:17:50 · 494 阅读 · 0 评论 -
CEF 开启webGl功能
webGL 的3D绘画功能非常强大,但有些CEF 是关闭此功能的以下是开启方法:1)首先不要禁用GPU //不要禁用GPU //command_line->AppendSwitch("disable-gpu"); //command_line->AppendSwitch("disable-gpu-compositing"); 2)开启WEBGL ...原创 2018-10-15 15:20:44 · 5145 阅读 · 0 评论 -
CEF 知识点汇总
0, CEF中文环境 初始化时,CefString(&settings.locale) = L"zh_CN";在浏览器进程的OnBeforeCommandLineProcessing中,用命令行形式,设置浏览器各种属性如:渲染进程,关闭代理 GPU等void ClientApp::OnBeforeCommandLineProcessing(const CefSt...原创 2018-10-23 15:05:32 · 2012 阅读 · 0 评论