Skip to content

CEF 包

cefPackage 封装了 Chromium Embedded Framework 并将其作为普通的 twinBASIC 控件暴露。将 CefBrowser 拖放到窗体上,Chromium 浏览器即可在其内部渲染Web内容——导航到URL、运行JavaScript、将页面打印为PDF,以及与已加载的页面交换消息。

该包是随 twinBASIC 一起发布的内置包,但 CEF 运行时本身是单独分发的——应用程序必须将匹配的运行时ZIP与可执行文件一起发布。参见下方的运行时文件

WARNING

CEF 包目前处于 BETA 阶段。WebView2 上可用的若干功能尚未暴露;参见下方的 WebView2 对等性

为什么选择 CEF 而不是 WebView2?

CEF 和 WebView2 都将基于Chromium的浏览器封装在 twinBASIC 控件中。CEF 对某些应用具有更重要的优势:

  • 跨平台就绪。 CEF 可在 Windows、Linux 和 macOS 上运行。WebView2 仅限 Windows。
  • 完全控制运行时栈。 应用程序以特定的 Chromium 构建为目标,并将其与软件一起分发。应用程序控制之外不会有自动运行时更新,因此行为在不同部署之间保持一致。
  • 更深入的运行时集成。 CEF 允许在渲染器/JavaScript进程内托管 twinBASIC 代码——这是更受限的 WebView2 对象模型无法做到的。

当仅面向现代 Windows 且可接受系统安装的 Edge 运行时时,WebView2 是正确的选择;当需要控制 Chromium 版本或跨平台就绪性时,CEF 更为可取。

支持的运行时

支持三个 CEF 版本,每个版本有不同的 Chromium 基线和不同的操作系统覆盖范围:

运行时版本支持的操作系统备注
v49Windows XP+最后一个支持 Windows XP 的 Chromium 版本。
v109Windows 7+最后一个支持 Windows 7 的 Chromium 版本。
v145Windows 10+推荐的现代运行时。

WARNING

较旧的 Chromium 版本通常不应用于不受限制的互联网浏览——它们存在未修补的安全漏洞。但对于浏览器仅加载受信任的本地或内部内容的严格受控环境,它们仍然适用。

用户在两个必须一致的位置选择运行时:

  • 编译时——通过向项目添加匹配的 [COMPILER PACKAGE] twinBASIC - Chromium Embedded Framework Package v<N> 引用。这设置了包自身源代码编译时使用的 CEF_VERSION 条件编译常量(49、109 或 145)。CefBrowser.CefMajorVersion 在运行时返回此值。
  • 部署时——通过发布匹配的运行时ZIP,解压到发现文件夹或通过 EnvironmentOptions.BrowserExecutableFolder 指定。

运行时的位数必须与应用程序的位数匹配——32位应用程序需要32位运行时ZIP,64位应用程序需要64位ZIP。

运行时文件

运行时与包分开发布。下载与 CEF 版本和应用程序位数都匹配的ZIP:

版本Win32Win64
v49cefRuntime49_win32.zipcefRuntime49_win64.zip
v109cefRuntime109_win32.zipcefRuntime109_win64.zip
v145cefRuntime145_win32.zipcefRuntime145_win64.zip

另请参阅 CEF Runtime Releases 获取最新版本。

安装运行时文件

将ZIP解压到:

text
%LocalAppData%\twinBASIC_CEF_Runtime\

例如,v145 Win64 运行时最终位于:

text
%LocalAppData%\twinBASIC_CEF_Runtime\145_0_7632_160_Win64\

带版本戳的文件夹必须包含 libcef.dll 及其同级运行时文件。

启动时,CefBrowser 在此默认位置搜索运行时。如果找不到 libcef.dllError 事件将触发,并附带所搜索的确切路径。

覆盖运行时位置

可以通过在 Create 事件之前或期间赋值 EnvironmentOptions.BrowserExecutableFolder 来选择不同的文件夹——例如便携式并排部署:

vb
Private Sub CefBrowser1_Create()
    CefBrowser1.EnvironmentOptions.BrowserExecutableFolder = _
        "D:\MyApp\CEF\145_0_7632_160_Win64"
End Sub

该文件夹必须包含 libcef.dll

WebView2 对等性

以下 WebView2 功能尚未在 CefBrowser 上暴露,且没有已记录的对应项:

  • 方法:OpenTaskManagerWindowAddObject(用于JavaScript的宿主对象发布)、AddWebResourceRequestedFilter 及周围的请求拦截机制。
  • 事件:AcceleratorKeyPressedPermissionRequestedWebResourceRequestedProcessFailedScriptDialogOpeningUserContextMenuSuspendCompletedSuspendFailedDownloadStartingNewWindowRequested

NavigationComplete 事件在其签名中有 IsSuccessWebErrorStatus 参数,但目前返回占位值(True0)——填充它们的底层 CEF 回调尚未连接。

API 将继续增长;此列表是当前测试版的快照,而非长期限制。

  • CefBrowser -- 控件:导航、脚本、虚拟主机映射、PDF打印和由匹配的CEF运行时控制的生命周期事件
  • CefEnvironmentOptions -- CEF环境的预创建配置(可执行文件夹、用户数据文件夹、日志文件、日志严重级别);通过控件的 EnvironmentOptions 属性访问

枚举

教程

twinBASIC及其LOGO版权为作者"韦恩"所有