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

upgrade-dev v2.3.19

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