版本
会发现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 main
import (
"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()) // 主进程: true
Init2() //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
})
})