效果图
应用内访问
应用外访问
介绍
energy提供了内置http资源访问服务,可以将web静态资源内置到执行程序中,也在一定程度上保证资源的安全
你也可以自己增加内置http服务或增加安全性。
使用go的embed内置资源方式实现资源内嵌
除此之外也可使用本地资源加载方式,该方式不走网络(网卡), 而是直接读取本地资源或内置资源
内置http服务
go
package main
import (
"embed"
"fmt"
"github.com/energye/energy/v2/cef"
"github.com/energye/energy/v2/pkgs/assetserve"
)
// 资源目录,内置到执行程序中
//
//go:embed resources
var resources embed.FS
func main() {
//全局初始化 每个应用都必须调用的
cef.GlobalInit(nil, &resources)
//创建应用
cefApp := cef.NewApplication()
//主窗口的配置
cef.BrowserWindow.Config.Title = "Energy - 内置资源和内置服务示例"
cef.BrowserWindow.Config.IconFS = "resources/icon.ico"
//指定一个URL地址,或本地html文件目录
cef.BrowserWindow.Config.Url = "http://localhost:22022/internal-http-server.html"
//内置静态资源服务的安全key和value设置
//通过设置AssetsServerHeaderKeyName和AssetsServerHeaderKeyValue在一定程度上保证资源只能在应用内访问,即使在应用外使用正确的IP和端口号也无法访问到资源
assetserve.AssetsServerHeaderKeyName = "energy"
assetserve.AssetsServerHeaderKeyValue = "energy"
//在主进程启动成功之后执行
//在这里启动内置http服务
//内置http服务需要使用 go:embed resources 内置资源到执行程序中
cef.SetBrowserProcessStartAfterCallback(func(b bool) {
fmt.Println("主进程启动 创建一个内置http服务")
//通过内置http服务加载资源
server := assetserve.NewAssetsHttpServer()
server.PORT = 22022 //服务端口号
server.AssetsFSName = "resources" //必须设置目录名和资源文件夹同名
//LocalAssets 指定本地资源支持热更新 - 适用开发或web端源码可以查看
//server.LocalAssets = fmt.Sprintf("%s/example/browser-internal-http-server/resources", consts.ExePath)
//Assets 内置资源不支持热更新 - 适用应用发布
server.Assets = &resources
go server.StartHttpServer()
})
//运行应用
cef.Run(cefApp)
}
html示例代码
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>内置资源和内置服务示例</title>
<script type="application/javascript">
</script>
</head>
<body style="overflow: hidden;margin: 0px;padding: 0px;">
内置资源和内置服务示例<br>
地址为:http://localhost:22022/internal-http-server.html 该地址无法在应用以外正常访问<br>
Assets 内置资源不支持热更新 - 适用应用发布<br>
LocalAssets 指定本地资源支持热更新 - 适用开发或web端源码可以查看<br>
通过设置AssetsServerHeaderKeyName和AssetsServerHeaderKeyValue在一定程度上保证资源只能在应用内访问,即使在应用外使用正确的IP和端口号也无法访问到资源<br>
assetserve.AssetsServerHeaderKeyName = "自定义KeyName"<br>
assetserve.AssetsServerHeaderKeyValue = "自定义KeyValue"<br>
<img src="icon.ico">
<img src="energy-icon.png"><br><br>
<a href="https://energy.yanghy.cn">ENERGY</a>
</body>
</html>
说明
参考代码注释
注意点
内置http服务启动时一定在主进程启动之后且只启动一次
cef.SetBrowserProcessStartAfterCallback
回调函数主进程启动成功之后,窗口初始化之前执行一次在 main.go 同级目录中新建 resources 目录,该目录存放http内置服务访问的资源 通过 main.go 代码中 embed.FS 编译到执行程序中 在回调函数 SetBrowserProcessStartAfterCallback 中启动http服务 server.Assets 或 server.LocalAssets 设置http内置服务访问资源的方式
server.Assets 内置 server.LocalAssets 本地