Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
energye
energy
提交
a2b19087
energy
项目概览
energye
/
energy
通知
13
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
energy
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
a2b19087
编写于
11月 29, 2022
作者:
yanghye
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add: demo js on event, go emit event
上级
b4b5f2ac
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
75 addition
and
4 deletion
+75
-4
example/browser-ipc-on-emit/js-to-go/js-to-go.go
example/browser-ipc-on-emit/js-to-go/js-to-go.go
+53
-2
example/browser-ipc-on-emit/js-to-go/resources/js-to-go.html
example/browser-ipc-on-emit/js-to-go/resources/js-to-go.html
+22
-2
未找到文件。
example/browser-ipc-on-emit/js-to-go/js-to-go.go
浏览文件 @
a2b19087
package
main
import
(
"embed"
"fmt"
"github.com/energye/energy/cef"
"github.com/energye/energy/common/assetserve"
"github.com/energye/energy/ipc"
"time"
)
//go:embed resources
var
resources
embed
.
FS
func
main
()
{
//全局初始化 每个应用都必须调用的
cef
.
GlobalCEFInit
(
nil
,
nil
)
cef
.
GlobalCEFInit
(
nil
,
&
resources
)
//创建应用
cefApp
:=
cef
.
NewApplication
(
nil
)
//指定一个URL地址,或本地html文件目录
cef
.
BrowserWindow
.
Config
.
DefaultUrl
=
"https://energy.yanghy.cn"
cef
.
BrowserWindow
.
Config
.
DefaultUrl
=
"http://localhost:22022/js-to-go.html"
cef
.
BrowserWindow
.
Config
.
Title
=
"Energy - js on event - go emit event"
cef
.
BrowserWindow
.
Config
.
Icon
=
"resources/icon.ico"
//内置http服务链接安全配置
cef
.
SetBrowserProcessStartAfterCallback
(
func
(
b
bool
)
{
fmt
.
Println
(
"主进程启动 创建一个内置http服务"
)
//通过内置http服务加载资源
server
:=
assetserve
.
NewAssetsHttpServer
()
server
.
PORT
=
22022
server
.
AssetsFSName
=
"resources"
//必须设置目录名
server
.
Assets
=
&
resources
go
server
.
StartHttpServer
()
//定时执行web js
go
timeTask
()
})
//运行应用
cef
.
Run
(
cefApp
)
}
//定时执行web js
func
timeTask
()
{
//这里模拟go中触发js监听的事件
var
param0
=
0
for
{
//每1秒钟执行一次
time
.
Sleep
(
time
.
Second
)
param0
++
//在go中触发js事件需要通过chromium对象
//获得主窗口对象
info
:=
cef
.
BrowserWindow
.
MainWindow
()
//虽然 Arguments 结构支持多个数据类型,但在js和go的对应中,只保留了 string, integer, double, boolean 的对应关系,其它类型在 go 和 js数据传递时不支持
args
:=
ipc
.
NewArgumentList
()
//在给js发送数据时,string类型的,需要设置第3个参数为true, 底层在处理字符串时需要
args
.
SetString
(
0
,
fmt
.
Sprintf
(
"Go发送的数据: %d"
,
param0
),
true
)
args
.
SetFloat64
(
1
,
float64
(
param0
+
10
))
//将数据发送出去
info
.
Chromium
()
.
Emit
(
"js-on-event-demo"
,
args
,
info
.
Browser
)
//触发js监听函数,这个函数带有返回值到go中
info
.
Chromium
()
.
EmitAndCallback
(
"js-on-event-demo-return"
,
args
,
info
.
Browser
,
func
(
context
ipc
.
IIPCContext
)
{
//因为js和go不一样,返回值只能有1个,且是通过 Arguments 获取
arguments
:=
context
.
Arguments
()
//需要正确的获取类型,否则会失败
fmt
.
Println
(
"JS返回数据:"
,
arguments
.
GetString
(
0
))
})
}
}
example/browser-ipc-on-emit/js-to-go/resources/js-to-go.html
浏览文件 @
a2b19087
...
...
@@ -4,11 +4,31 @@
<meta
charset=
"UTF-8"
>
<title>
js-to-go
</title>
<script
type=
"application/javascript"
>
function
clearMessage
()
{
document
.
getElementById
(
"
message
"
).
innerHTML
=
""
;
}
function
writeMessage
(
data
)
{
let
message
=
document
.
getElementById
(
"
message
"
);
message
.
innerHTML
=
message
.
innerHTML
+
data
+
"
<br>
"
}
//ipc.on函数有2个参数
//参数1 事件名 必填 string类型
//参数2 回调函数 非必填 function类型, go传递的参数
ipc
.
on
(
'
js-on-event-demo
'
,
function
(
p1
,
p2
)
{
writeMessage
(
"
js-on-event-demo Go传递过来的数据:
"
+
p1
+
"
p2:
"
+
p2
)
})
//带有返回值
ipc
.
on
(
'
js-on-event-demo-return
'
,
function
(
p1
,
p2
)
{
writeMessage
(
"
js-on-event-demo-return-Go传递过来的数据:
"
+
p1
+
"
p2:
"
+
p2
)
//该返回值将返回到go中
return
'
js返回的数据:
'
+
p1
})
</script>
</head>
<body
style=
"
overflow: hidden;
margin: 0px;padding: 0px;"
>
js-to-go
<br>
<body
style=
"margin: 0px;padding: 0px;"
>
JS中监听事件,Go中调用
<br>
<div
id=
"message"
></div>
</body>
</html>
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录