页面注入JS
2024-05-25 14:56:45
注入JS:
app.SetOnContextCreated(func(browser *cef.ICefBrowser, frame *cef.ICefFrame, context *cef.ICefV8Context) bool { var jsCode = ` Object.defineProperty(navigator, "platform", { get: function () { return "Android"; } });` frame.ExecuteJavaScript(jsCode, "", 0) return false //必须返回false })
添加V8扩展:
//浏览器环境初始化-仅在浏览器窗口创建的时候执行一次 app.SetOnWebKitInitialized(func() { var myparamValue string v8Handler := cef.V8HandlerRef.New() //劫持函数 v8Handler.Execute(func(name string, object *cef.ICefV8Value, arguments *cef.TCefV8ValueArray, retVal *cef.ResultV8Value, exception *cef.ResultString) bool { fmt.Println("注入v8Handler.Execute", name) var result bool if name == "GetMyParam" { result = true retVal.SetResult(cef.V8ValueRef.NewString(myparamValue)) } else if name == "SetMyParam" { if arguments.Size() > 0 { newValue := arguments.Get(0) fmt.Println("value is string:", newValue.IsString()) fmt.Println("value:", newValue.GetStringValue()) myparamValue = newValue.GetStringValue() newValue.Free() } result = true } return result }) //注册js var jsCode = ` //获取元素中心点坐标 function itemCenterPoint(idStr){ var element = document.getElementById(idStr);// 获取元素 var position = element.getBoundingClientRect(); // 获取元素的位置信息 // 获取元素的中心点坐标 var centerX = Math.floor(position.left + position.width / 2 + window.scrollX); var centerY = Math.floor(position.top + position.height / 2 + window.scrollY); return centerX+"|"+centerY; } //获取元素左侧中心坐标 function itemLeftPoint(idStr){ var element = document.getElementById(idStr);// 获取元素 var position = element.getBoundingClientRect(); // 获取元素的位置信息 // 获取元素的中心点坐标 var centerX = Math.floor(position.left ); var centerY = Math.floor(position.top + position.height / 2 + window.scrollY); return centerX+"|"+centerY; } //判断滚动条是否在最底部 function isScrollAtBottom() { const scrollTop = document.documentElement.scrollTop || document.body.scrollTop; // 获取当前滚动条的垂直位置 const windowHeight = window.innerHeight; // 浏览器视口的高度 const documentHeight = document.documentElement.scrollHeight; // 文档的总高度 // 当滚动条的垂直位置加上窗口高度大于等于文档高度时,滚动条在底部 if(scrollTop + windowHeight >= documentHeight){ return "ok"; }else{ return "no"; } } function send2go(url,htmlStr){ ipc.emit("send2go",[url,htmlStr]); } ` // 注册JS 和v8处理器 cef.RegisterExtension("v8/test", jsCode, v8Handler) })