版本
会发现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 函数会执行多次
package mainimport ("github.com/energye/energy/v2/cef""github.com/energye/energy/v2/cef/process")func main() {//全局初始化 每个应用都必须调用的cef.GlobalInit(nil, nil)//创建应用app := cef.NewApplication()//指定一个URL地址,或本地html文件目录cef.BrowserWindow.Config.Url = "https://www.baidu.com"cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, window cef.IBrowserWindow) {println("simple 这里只执行一次")})println("IsMain:", process.Args.IsMain()) // 主进程: trueInit2() //main 函数手动调用 被执行多次//运行应用cef.Run(app)}// 由于CEF是多进程, 该函数会被执行多次func init() {// Go在初始化时执行println("simple init")}func Init2() {println("simple Init2")}
SetBrowserInit 函数只执行一次
也可通过 process.Args.IsMain() 判断当前进程类型控制
页面加载时间过长
由于一些初始化操作使用不当,可能会对应用初始化时加载页面时间过长, 我们可以把初始化操作放在浏览器加载完之后执行
cef.BrowserWindow.SetBrowserInit(func(event *cef.BrowserEvent, window cef.IBrowserWindow) {event.SetOnAfterCreated(func(sender lcl.IObject, browser *cef.ICefBrowser, window cef.IBrowserWindow) bool {// 在这里加入初始化....return false})})
