cef
有一条学英语的康庄大道叫“跟着CEFR”走
最近收到一个知乎提问邀请,“CEFR英语B2水平怎么提升?”,提问的是一个目前读高中,打算出国留学的学生。 [图片] 看到越来越多的更年轻的学习者知道用CEFR的分级来谈论语言学习尤其是英语学习,感觉挺欣慰的,毕竟这个概念诞生和进入中国都已经挺久了,但大家在聊英语水平的时候,还是在用“能读懂原版小说”“能跟老外流利对话”“词汇量8000”这种主观而抽象的概念…… 鉴于目前百度或者知乎搜索CEFR,出现的条目仍然不多,而且大…
从零开始手敲次世代游戏引擎(七十五)
久等x3。。。来证明还活着。 图形管道的重构工作目前还在进行当中,OpenGL和Metal2对于Single Pass的情况已经可以工作了。DX12能编译通过但是图出不来,Vulkan还没开始。 所以如之前预告的,在图形管道重构完成之前,接下来几篇我们来写点儿别的。 废话少说,先上最终效果: 是不是看起来有点儿意思了呢? [视频: 基于WebGL的UI界面,MacOS版] [视频: 基于WebGL的UI界面,Windows版] [视频: 基于WebGL的UI界面,Linux版] 这个其实是一个基于WebGL的UI界面,叫MakePad。 MakePad 所以,我就是拿了一张网页忽悠了一下而已。。。 其实也不全是。虽…
Electron相关的性能问题,7年未解决,NW.js、CEF都没有。
注意,这里我说的,是相关的性能问题,不一定是Electron的。这个问题是BrowserWindow、BrowserView、webview加载页面的时候, 会消耗1.5~6秒的时间, 电脑配置越差,消耗的时间越长, Windows7 8 10 11上都有这个问题,Mac下没这个问题。 这个问题与Windows自带的杀毒软件有关, 解决这个问题的办法是为Windows自带的杀毒软件添加一个例外目录或者关掉Windows自带的杀毒软件, 这个目录应该是你的Electron应用程序的安装目录, …
使用CEF(四)— 在QT中集成CEF(1)基本集成
QT作为C++下著名的跨平台软件开发框架,实现了一套代码可以在所有的操作系统、平台和屏幕类型上部署。我们前几篇文章讲解了如何构建一款基于CEF的简单的样例,但这些样例的GUI都是使用的原生的或者是控件功能不强大的CEF视图框架。本文将会重新开始,使用VS2019编写一款基于QT的并嵌入原生窗体的文章。 环境搭建在本文中,我没有使用QtCreator进行项目搭建的工作,而是使用VS配合QT VS Tools类来完成项目的环境。在本文,假设你…
被chromium的东西占了。chromium的代码越来越庞大,有用没用的东西全给你塞进来,cef也不得不算盘接受。其实绝大部分是你做成软件里的控件永远用不到的东西。例如几十种语言支持,例如各种性能监控插桩,例如和ui相关的一堆外壳代码。cef作者估计没啥精力把这些内容剥离,我尝试过,放弃了。 如果需要精简的web内核,可以试试我的miniblink: https://miniblink.net/
使用wxPython打造印象笔记(10)集成CEFPython
我们已经完成了基本的编辑器,运行之后的界面如下图所示。 [图片] 最终的界面则是这样。 [图片] 一个明显的区别就是:第一幅图中,编辑器工具栏是包含在网页里面的,没有像第二幅图中那样通过wxPython构建的。 除了界面上的明显区别以外,还有一个严重的问题需要解决:编辑器页面在Windows系统上无法正常显示。这是因为 wx.html2.webview 组件在Windows上模拟了IE7浏览器,而我们使用的Quill编辑器并不支持IE7。 一些解决方案所以如果我们选择…
把网页投在屏幕上——初识CEF
这是上次自制HTML壁纸的后续。 在制作HTML壁纸的过程中,我们做了一件算不上麻烦的事情:把一个QWebEngine窗口“塞”到桌面上。 很多人可能也注意到了问题:QWebEngine在运行那个“比较耗性能”的样例时简直就是内存杀手! 当然,另一方面,对于像我这种菜鸟来说QWebEngine简直就是一场噩梦——入手时一切正常,但是只要改动一点点,永远有一大把的bug等着:QWEbengine无法正常退出、向QWebEngine发送鼠标事件需要事先从ChildPol…
Chromium源码编译(Branch3538)
专栏开了很长时间了也没有写点东西,项目刚刚告一段落容我总结一下,今天先写一些跟Excel插件开发不相关的东西,CEF源码编译。 Chromium是Google为发展自家的浏览器Google Chrome 而开启的项目,以 BSD许可协议 等数种许可发行并开放源代码 。Chromium与Google Chrome共享大部分代码和功能,但功能和商标之间有一些细微差别。Chromium 的更新速度很快,每隔数小时即有新的开发版本发布,每次的更新幅度不一定相同,可能增加新功能,…
浅见:将JS代码注入到第三方CEF应用程序
本文为看雪论坛优秀文章 看雪论坛作者ID:renbohan CEF是Chromium Embedded Framework的缩写,即“Chromium嵌入式框架”,采用c++编写,地位类似于Electron,是web开发应用程序的重要框架,被许多软件包括微信、网易云、生死狙击等采用,是一款十分优秀的嵌入式框架。 由于一些原因,需要把js注入到某款使用CEF的应用中,通过js代码与应用web进行一些交互,于是乎研究了一下CEF这个框架,并分享注入js代码到第三方CEF应用的一些…
注入代码到 steam UI 及禁用 steam 更新检查
当前 steam 版本: 8.63.11.84, 更新于 2024年1月13日,8:58:56注意到 steam 的 UI 是网页格式的, 检查后确定其使用 CEF 展示, 在 steam 根目录游走发现 steamui\localization下放了 steam 的本地化文件, 且steamui\chunk~2dcc5aaf7.js是入口文件. 尝试随机修改一些翻译后触发了 steam 的更新, 更新后相关文件复原. 注意到 logs 下有许多日志, bootstrap_log.txt描述了启动流程. 当一切正常时, 最后几行如下: [2024-01-18 19:40:2…
CEF3 QT内嵌实现浏览器—环境搭建
在Qt项目中实现浏览器,最初接触还是利用Qt自身基于chromium封装的QWebEngine。可以说利用QWebEngine实现浏览器还是挺容易的,示例demo中已实现大部分功能。 为何放弃QWebEngine? 有坑!随着Qt的版本更新虽说现在QWebEngine越来越完善,但是始终有个问题没有得到很好的处理——在某些显卡与系统显卡驱动不匹配的机器上,QWebEngine在渲染时会黑屏甚至崩溃;这得益于QWebEngine基于openGL渲染。而同样跨平台的CEF,我们可以定制…
CEF3 重要概念
在开发基于CEF3的应用程序前,有一些重要的基础概念应该被理解。 C++ 封装(C++ Wrapper)libcef动态链接库导出 C API 使得使用者不用关心CEF运行库和基础代码。libcef_dll_wrapper 工程把 C API 封装成 C++ API同时包含在客户端应用程序工程中,与cefclient一样,源代码作为CEF二进制发布包的一部分共同发布。C/C++ API的转换层代码是由转换工具自动生成。 进程(Processes)CEF3是多进程架构的。Browser被定义为主进程,负责窗口管…
CEF3 离屏渲染
在离屏渲染模式下,CEF不会创建原生浏览器窗口。CEF为宿主程序提供无效的区域和像素缓存区,而宿主程序负责通知鼠标键盘以及焦点事件给CEF。离屏渲染目前不支持混合加速,所以性能上可能无法和非离屏渲染相比。离屏浏览器将收到和窗口浏览器同样的事件通知,例如前一节介绍的生命周期事件。下面介绍如何使用离屏渲染: 实现CefRenderHandler接口。除非特别说明,所有的方法都需要覆写。调用CefWindowInfo::SetAsOffScreen(),将C…
CEF3 集成消息循环
CEF可以不用它自己提供的消息循环,而与已经存在的程序中消息环境集成在一起,有两种方式可以做到: 周期性执行CefDoMessageLoopWork()函数,替代调用CefRunMessageLoop()。CefDoMessageLoopWork()的每一次调用,都将执行一次CEF消息循环的单次迭代。需要注意的是,此方法调用次数太少时,CEF消息循环会饿死,将极大的影响Browser的性能,调用次数太频繁又将影响CPU使用率。设置CefSettings.multi_threaded_message_loop=true(W…
JUCE内嵌cef,实现浏览器与vst互操作 (使用CMake+VS2022构建)
先放成品: [图片] 众所周知,JUCE作为一款跨平台的常用于开发数字音频相关插件的C++框架,但是本人作为一名前端觉得拿C++写界面也还是有些不适应。因此尝试过以下方案在JUCE中内嵌浏览器: JUCE 自带的内嵌浏览器 (juce_gui_extra/WebBrowserComponent): 跨平台,不需要额外操作,windows下支持ie内核和新版基于chrome内核的edge内核(奇怪的说法?),但是不支持C++与JS互操作,放弃。electron+自行使用napi封装JUCE: 问题比较大,首先JUC…
CEF3 应用程序结构
每个CEF3应用程序都是相同的结构: 提供入口函数,用于初始化CEF、运行子进程执行逻辑或者CEF消息循环。提供CefApp实现,用于处理进程相关的回调。提供CefClient实现,用于处理Browser实例相关的回调。执行CefBrowserHost::CreateBrowser()创建一个Browser实例,使用CefLifeSpanHandler管理Browser对象生命周期。 入口函数(Entry-Point Function)一个CEF3应用程序会运行多个进程,这些进程能够使用同一个执行器或者为子进程定制…
CEF与Node集成【4】页面与CEF交互
开发者开发页面的时候,也可能会操控窗口, 这时我们一般不会让开发者先访问Node进程,再通过Node进程去控制CEF主进程里的窗口,这样做太绕了。 我们要让页面直接控制主进程(页面在渲染进程里,与主进程也不是同一个进程,这种工作也是跨进程的) 要想让页面可以访问CEF的主进程,就需要先在CEF的渲染进程里为页面注册JS入口,如下代码所示: 有心的读者应该还记得,我们在上一节中讲入口函数时,里面有实例化RenderProcessHand…