提交 3118b91d 编写于 作者: yanghye's avatar yanghye

upgrade-dev v2.3.19

上级 8b16a8c6
......@@ -22,93 +22,141 @@ import (
// Instance 实例
func (m *ICefFrame) Instance() uintptr {
if m == nil {
return 0
}
return uintptr(m.instance)
}
// IsValid 该Frame是否有效
func (m *ICefFrame) IsValid() bool {
if m == nil || m.instance == nil {
return false
}
r1, _, _ := imports.Proc(internale_CEFFrame_IsValid).Call(m.Instance())
return api.GoBool(r1)
}
// Undo 撤销操作
func (m *ICefFrame) Undo() {
if !m.IsValid() {
return
}
imports.Proc(internale_CEFFrame_Undo).Call(m.Instance())
}
// Redo 恢复
func (m *ICefFrame) Redo() {
if !m.IsValid() {
return
}
imports.Proc(internale_CEFFrame_Redo).Call(m.Instance())
}
// Cut 剪切
func (m *ICefFrame) Cut() {
if !m.IsValid() {
return
}
imports.Proc(internale_CEFFrame_Cut).Call(m.Instance())
}
// Copy 复制
func (m *ICefFrame) Copy() {
if !m.IsValid() {
return
}
imports.Proc(internale_CEFFrame_Copy).Call(m.Instance())
}
// Paste 粘贴
func (m *ICefFrame) Paste() {
if !m.IsValid() {
return
}
imports.Proc(internale_CEFFrame_Paste).Call(m.Instance())
}
// Del 删除
func (m *ICefFrame) Del() {
if !m.IsValid() {
return
}
imports.Proc(internale_CEFFrame_Del).Call(m.Instance())
}
// SelectAll 选择所有
func (m *ICefFrame) SelectAll() {
if !m.IsValid() {
return
}
imports.Proc(internale_CEFFrame_SelectAll).Call(m.Instance())
}
// ViewSource 显示源码
func (m *ICefFrame) ViewSource() {
if !m.IsValid() {
return
}
imports.Proc(internale_CEFFrame_ViewSource).Call(m.Instance())
}
// LoadUrl 加载URL
func (m *ICefFrame) LoadUrl(url string) {
if !m.IsValid() {
return
}
imports.Proc(internale_CEFFrame_LoadUrl).Call(m.Instance(), api.PascalStr(url))
}
// ExecuteJavaScript 执行JS
func (m *ICefFrame) ExecuteJavaScript(code, scriptUrl string, startLine int32) {
imports.Proc(internale_CEFFrame_ExecuteJavaScript).Call(m.Instance(), api.PascalStr(code), api.PascalStr(scriptUrl), uintptr(startLine))
}
// IsValid 该Frame是否有效
func (m *ICefFrame) IsValid() bool {
if m.instance == nil {
return false
if !m.IsValid() {
return
}
r1, _, _ := imports.Proc(internale_CEFFrame_IsValid).Call(m.Instance())
return api.GoBool(r1)
imports.Proc(internale_CEFFrame_ExecuteJavaScript).Call(m.Instance(), api.PascalStr(code), api.PascalStr(scriptUrl), uintptr(startLine))
}
// IsMain 是否为主Frame
func (m *ICefFrame) IsMain() bool {
if !m.IsValid() {
return false
}
r1, _, _ := imports.Proc(internale_CEFFrame_IsMain).Call(m.Instance())
return api.GoBool(r1)
}
// IsFocused 是否已获取焦点
func (m *ICefFrame) IsFocused() bool {
if !m.IsValid() {
return false
}
r1, _, _ := imports.Proc(internale_CEFFrame_IsFocused).Call(m.Instance())
return api.GoBool(r1)
}
// SendProcessMessage 发送进程消息
func (m *ICefFrame) SendProcessMessage(targetProcess CefProcessId, message *ICefProcessMessage) {
if !m.IsValid() {
return
}
imports.Proc(internale_CEFFrame_SendProcessMessage).Call(m.Instance(), targetProcess.ToPtr(), message.Instance())
message.Free()
}
// SendProcessMessageForJSONBytes 发送进程消息
func (m *ICefFrame) SendProcessMessageForJSONBytes(messageName string, targetProcess CefProcessId, data []byte) {
if !m.IsValid() {
return
}
imports.Proc(internale_CEFFrame_SendProcessMessageForJSONBytes).Call(m.Instance(), api.PascalStr(messageName), targetProcess.ToPtr(), uintptr(unsafe.Pointer(&data[0])), uintptr(uint32(len(data))))
}
// SendProcessMessageForV8Value 发送进程消息
func (m *ICefFrame) SendProcessMessageForV8Value(messageName string, targetProcess CefProcessId, arguments *ICefV8Value) {
if !m.IsValid() {
return
}
imports.Proc(internale_CEFFrame_SendProcessMessageForV8Value).Call(m.Instance(), api.PascalStr(messageName), targetProcess.ToPtr(), arguments.Instance())
}
......@@ -116,6 +164,9 @@ func (m *ICefFrame) SendProcessMessageForV8Value(messageName string, targetProce
//
// messageId != 0 是带有回调函数消息
func (m *ICefFrame) EmitRender(messageId int32, eventName string, target ipc.ITarget, data ...any) {
if !m.IsValid() {
return
}
message := json.NewJSONObject(nil)
message.Set(ipc_id, messageId)
message.Set(ipc_event, eventName)
......@@ -138,47 +189,68 @@ func (m *ICefFrame) EmitRender(messageId int32, eventName string, target ipc.ITa
}
func (m *ICefFrame) LoadRequest(request *ICefRequest) {
if m == nil || request == nil {
if !m.IsValid() || request == nil {
return
}
imports.Proc(internale_CEFFrame_LoadRequest).Call(m.Instance(), request.Instance())
}
func (m *ICefFrame) Browser() *ICefBrowser {
if !m.IsValid() {
return nil
}
var result uintptr
imports.Proc(internale_CEFFrame_Browser).Call(m.Instance(), uintptr(unsafe.Pointer(&result)))
return &ICefBrowser{instance: unsafe.Pointer(result)}
}
func (m *ICefFrame) V8Context() *ICefV8Context {
if !m.IsValid() {
return nil
}
var result uintptr
imports.Proc(internale_CEFFrame_GetV8Context).Call(m.Instance(), uintptr(unsafe.Pointer(&result)))
return &ICefV8Context{instance: unsafe.Pointer(result)}
}
func (m *ICefFrame) Identifier() int64 {
if !m.IsValid() {
return 0
}
var result uintptr
imports.Proc(internale_CEFFrame_Identifier).Call(m.Instance(), uintptr(unsafe.Pointer(&result)))
return int64(result)
}
func (m *ICefFrame) Name() string {
if !m.IsValid() {
return ""
}
r1, _, _ := imports.Proc(internale_CEFFrame_Name).Call(m.Instance())
return api.GoStr(r1)
}
func (m *ICefFrame) Url() string {
if !m.IsValid() {
return ""
}
r1, _, _ := imports.Proc(internale_CEFFrame_Url).Call(m.Instance())
return api.GoStr(r1)
}
func (m *ICefFrame) Parent() *ICefFrame {
if !m.IsValid() {
return nil
}
var result uintptr
imports.Proc(internale_CEFFrame_Parent).Call(m.Instance(), uintptr(unsafe.Pointer(&result)))
return &ICefFrame{instance: unsafe.Pointer(result)}
}
func (m *ICefFrame) Free() {
if !m.IsValid() {
return
}
if m.instance != nil {
m.base.Free(m.Instance())
m.instance = nil
......
......@@ -33,6 +33,7 @@ type ipcRenderProcess struct {
}
func (m *ipcRenderProcess) clear() {
fmt.Println(m.bind, m.ipcObject, m.v8Context)
if m.bind != nil {
m.bind.Free()
m.bind = nil
......@@ -44,6 +45,10 @@ func (m *ipcRenderProcess) clear() {
//if m.onHandler != nil {
// m.onHandler.clear()
//}
if m.v8Context != nil {
m.v8Context.Free()
m.v8Context = nil
}
}
func (m *ipcRenderProcess) ipcChannelRender(browser *ICefBrowser, frame *ICefFrame) {
......@@ -132,30 +137,30 @@ func (m *ipcRenderProcess) ipcGoExecuteJSEvent(browser *ICefBrowser, frame *ICef
if argument != nil {
argument.Free()
}
if argumentList != nil {
argumentList.Free()
}
}()
if callback := ipcRender.onHandler.getCallback(emitName); callback != nil {
var callbackArgsBytes []byte
if m.v8Context.Enter() {
if m.v8Context.Enter() {
var ret *ICefV8Value
var argsArray *TCefV8ValueArray
argsArray, _ = ipcValueConvert.BytesToV8ArrayValue(argumentList.Bytes())
if argsArray != nil {
ret = callback.function.ExecuteFunctionWithContext(m.v8Context, nil, argsArray)
argsArray.Free()
} else {
ret = callback.function.ExecuteFunctionWithContext(m.v8Context, nil, nil)
}
if ret != nil && ret.IsValid() && messageId != 0 { //callback func args
callbackArgsBytes = ipcValueConvert.V8ValueToProcessMessageBytes(ret)
ret.Free()
} else if ret != nil {
ret.Free()
}
m.v8Context.Exit()
var ret *ICefV8Value
var argsArray *TCefV8ValueArray
argsArray, _ = ipcValueConvert.BytesToV8ArrayValue(argumentList.Bytes())
if argsArray != nil {
ret = callback.function.ExecuteFunctionWithContext(m.v8Context, nil, argsArray)
argsArray.Free()
} else {
ret = callback.function.ExecuteFunctionWithContext(m.v8Context, nil, nil)
}
argumentList.Free()
if ret != nil && ret.IsValid() && messageId != 0 { //callback func args
callbackArgsBytes = ipcValueConvert.V8ValueToProcessMessageBytes(ret)
ret.Free()
} else if ret != nil {
ret.Free()
}
m.v8Context.Exit()
}
if messageId != 0 { //callback func
callbackMessage := json.NewJSONObject(nil)
......@@ -165,7 +170,9 @@ func (m *ipcRenderProcess) ipcGoExecuteJSEvent(browser *ICefBrowser, frame *ICef
} else {
callbackMessage.Set(ipc_argumentList, nil)
}
m.v8Context.Frame().SendProcessMessageForJSONBytes(internalIPCGoExecuteJSEventReplay, consts.PID_BROWSER, callbackMessage.Bytes())
if m.v8Context.Frame() != nil {
m.v8Context.Frame().SendProcessMessageForJSONBytes(internalIPCGoExecuteJSEventReplay, consts.PID_BROWSER, callbackMessage.Bytes())
}
}
result = true
}
......
......@@ -5,6 +5,7 @@ import (
"fmt"
"github.com/energye/energy/cef"
"github.com/energye/energy/common/assetserve"
"github.com/energye/energy/consts"
"github.com/energye/energy/example/dev-test/ipc-event/src"
"github.com/energye/energy/ipc"
"github.com/energye/golcl/lcl"
......@@ -26,6 +27,7 @@ func main() {
cef.GlobalInit(nil, &resources)
//创建应用
cefApp = cef.NewApplication()
cefApp.SetLogSeverity(consts.LOGSEVERITY_DEBUG)
//cefApp.SetSingleProcess(true)
//指定一个URL地址,或本地html文件目录
cef.BrowserWindow.Config.Url = "http://localhost:22022/ipc-event.html"
......
......@@ -163,7 +163,7 @@
msg("R8:", r8, JSON.stringify(r8));
msg("R9:", r9, JSON.stringify(r9));
msg("R10:", r10, JSON.stringify(r10));
return ["返回值", onTestName2Idx, 2222.22, true]
return ["返回值" + onTestName2Idx, onTestName2Idx, 2222.22 + onTestName2Idx, onTestName2Idx % 2 === 0]
});
let tgesi = null
......@@ -217,6 +217,7 @@
}
}
}
function testGoEmitAndCallback() {
ipc.emit("testGoEmitAndCallback");
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册