目录

JCEF介绍

目录

最近发布的两款插件都使用JCEF渲染界面,但是因为兼容性和各种配置导致各种问题,很多人也在issue中提问JCEF是什么,为什么要使用,下面介绍下从初识到时使用的过程。

首先介绍一下CEF,全称Chromium Embedded Framework ,他是基于Google Chromium的开源项目,它的目标是能够向第三方程序添加WEB浏览器功能,以及可以使用HTML、CSS和JS渲染界面。

在leetcode插件中需要展示题目的描述和解题,最开始使用的是IDE默认的markdown渲染功能,但是功能单一,只支持一些简单的语法,一些图片和数学公式无法渲染,渲染效果很差。另外登录功能使用的是api接口登录,但是后来网站增加了机器人验证,登录接口无法进行登录,比较可行的方式使用浏览器进行登录以获取到cookie。

在java平台,可以使用javafx模拟浏览器,但是一些网页无法渲染,google的验证也无法通过,在寻找解决方案是发现了CEF,而JCEF则是CEF的java接口,可以使用java调用CEF的接口,在早期IntelliJ平台,没有提供这种实现,所以前期通过加载外部lib的形式,在登录功能上使用了JCEF的功能。

IntelliJ平台从2020.1版本开始以实验性的形式引入,开始尝试使用JCEF提供更好的渲染,从2020.2版本开始可以正式使用,形式是绑定在JBR(IntelliJ平台编译的JDK)上,但是在引入初期,因为各种兼容性问题,导致md渲染卡顿或者cup高,所以网上出现了各种教程屏蔽JCEF,还原到JavaFx,但是随着版本的更新,JCEF的功能也越来越稳定,同时在一些HTML渲染也比原来好了很多。

随着版本的稳定,插件也开始尝试使用JCEF,开始寻找能够渲染markdown的插件,最终确认了vditor ,它是一个markdown的编辑器,可以支持所见所得、即时渲染和分屏预览,依托于这个编辑器和JCEF的渲染功能,可以实现一个markdown编辑器的插件和渲染一些复杂的md文件。于是开发了一个markdown的编辑器,可以实现体验比较好的编辑功能,也可以渲染力扣的描述和解题内容。

在上架之后,就开始面临各种问题,首先是第一点,Android Studio不支持,虽然版本是2020.2+,但是并没有附带JCEF,只能通过下载JBR,更改Android Studio的运行JDK;第二点是很多人更改了IDE默认的运行JDK,这也导致了功能无法使用;第三点是通过注册表关闭了JCEF的功能,此类大部分是看了教程给关掉了,但是实际上并不知了关了什么。

以上就是使用JCEF的过程,其实CEF的渲染要比默认的JavaFx好很多,但是在各种平台的兼容性有待验证,最近收到了很多反馈,在linux和mac上有一些功能也无法使用。