文档手册

页面注入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)

   })