版本

会发现energy发布版会同时支持多个CEF不同的版本
由于 CEF 一些版本更新后终止了对特定的系统支持,同时也产生了最后一个支持特定系统的 CEF 版本
在 energy 中针对 CEF 最后一个支持特定的系统做了兼容,也就是说在 energy 更新版本的同时,也保持 CEF 最后一个支持特定的系统版本

特殊情况外另声明

在这种情况下由于同时支持多个CEF版本,会有API不存在情况,例如在energy中使用CEF49用于支持Windows XP, 但energy中封装了最新版本的CEF API,此时是无法使用CEF49不支持的API

注意: 不同版本 CEF 使用有些许区别

CEF 特定支持版本

CEF 系统 Golang
109 Windows 7 或Windows等同版本 >= Go1.11
106 GTK2 Linux >= Go1.11
87 Flash ALL >= Go1.11
49 Windows XP SP3 \== Go1.11

Golang 对于非CEF 49推荐使用最新版本

重复执行的函数

对于新手且不了解CEF的, 使用该框架时容易犯一个使用上的错误,这个使用上的错误原于CEF多进程模型原因。
对于不想执行多次的代码来说,以下
错误的代码示例, 下面的 init 和 Init2 函数会执行多次

  1. package main
  2. import (
  3. "github.com/energye/energy/v2/cef"
  4. "github.com/energye/energy/v2/cef/process"
  5. )
  6. func main() {
  7. //全局初始化 每个应用都必须调用的
  8. cef.GlobalInit(nil, nil)
  9. //创建应用
  10. app := cef.NewApplication()
  11. //指定一个URL地址,或本地html文件目录
  12. cef.BrowserWindow.Config.Url = "https://www.baidu.com"
  13. cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, window cef.IBrowserWindow) {
  14. println("simple 这里只执行一次")
  15. })
  16. println("IsMain:", process.Args.IsMain()) // 主进程: true
  17. Init2() //main 函数手动调用 被执行多次
  18. //运行应用
  19. cef.Run(app)
  20. }
  21. // 由于CEF是多进程, 该函数会被执行多次
  22. func init() {
  23. // Go在初始化时执行
  24. println("simple init")
  25. }
  26. func Init2() {
  27. println("simple Init2")
  28. }

SetBrowserInit 函数只执行一次
也可通过 process.Args.IsMain() 判断当前进程类型控制

页面加载时间过长

由于一些初始化操作使用不当,可能会对应用初始化时加载页面时间过长, 我们可以把初始化操作放在浏览器加载完之后执行

  1. cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, window cef.IBrowserWindow) {
  2. event.SetOnAfterCreated(func(sender lcl.IObject, browser *cef.ICefBrowser, window cef.IBrowserWindow) bool {
  3. // 在这里加入初始化....
  4. return false
  5. })
  6. })