mirror of
https://gitee.com/energye/energy.git
synced 2024-12-13 17:05:48 +08:00
82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
//----------------------------------------
|
|
//
|
|
// Copyright © yanghy. All Rights Reserved.
|
|
//
|
|
// Licensed under Apache License Version 2.0, January 2004
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
//----------------------------------------
|
|
|
|
// CEF Chromium组件
|
|
package cef
|
|
|
|
import (
|
|
. "github.com/energye/energy/consts"
|
|
"github.com/energye/golcl/lcl"
|
|
"github.com/energye/golcl/lcl/types"
|
|
"sync"
|
|
"unsafe"
|
|
)
|
|
|
|
// IChromium 组件接口
|
|
type IChromium interface {
|
|
IChromiumProc
|
|
IChromiumEvent
|
|
}
|
|
|
|
// TCEFChromium 组件
|
|
type TCEFChromium struct {
|
|
*lcl.TComponent
|
|
instance unsafe.Pointer
|
|
cfg *tCefChromiumConfig
|
|
browser *ICefBrowser
|
|
emitLock *sync.Mutex
|
|
browserHandle types.HWND
|
|
widgetHandle types.HWND
|
|
renderHandle types.HWND
|
|
initialized bool
|
|
}
|
|
|
|
// NewChromium 创建一个新的 TCEFChromium
|
|
func NewChromium(owner lcl.IComponent, config *tCefChromiumConfig) IChromium {
|
|
m := new(TCEFChromium)
|
|
if config != nil {
|
|
m.cfg = config
|
|
} else {
|
|
m.cfg = NewChromiumConfig()
|
|
}
|
|
m.instance = unsafe.Pointer(_CEFChromium_Create(lcl.CheckPtr(owner), uintptr(unsafe.Pointer(m.cfg))))
|
|
m.emitLock = new(sync.Mutex)
|
|
m.initDefault()
|
|
return m
|
|
}
|
|
|
|
// 默认的初始配置
|
|
func (m *TCEFChromium) initDefault() {
|
|
//通过设置这些首选项,可以降低/避免WebRTC的IP泄漏
|
|
m.SetWebRTCIPHandlingPolicy(HpDisableNonProxiedUDP)
|
|
m.SetWebRTCMultipleRoutes(STATE_DISABLED)
|
|
m.SetWebRTCNonproxiedUDP(STATE_DISABLED)
|
|
}
|
|
|
|
// Instance 组件实例指针
|
|
func (m *TCEFChromium) Instance() uintptr {
|
|
if m == nil || m.instance == nil {
|
|
return 0
|
|
}
|
|
return uintptr(m.instance)
|
|
}
|
|
|
|
// ExecuteJavaScript
|
|
// 执行JS代码
|
|
//
|
|
// code: js代码
|
|
//
|
|
// scriptURL: js脚本地址 默认about:blank
|
|
//
|
|
// startLine: js脚本启始执行行号
|
|
func (m *TCEFChromium) ExecuteJavaScript(code, scriptURL string, startLine int32) {
|
|
_CEFChromium_ExecuteJavaScript(uintptr(m.instance), code, scriptURL, startLine)
|
|
}
|