• 教程八 在Go中使用Energy创建跨平台GUI应用 - Go执行JS函数


     

    教程-示例-文档


    介绍

    Energy Go代码中如何执行Web端的JS函数和代码。

    在一些情况下,我们可以通过Go来执行指定窗口的JS代码,达到通过Go操作JS的目的,该操作只针对JS的代码或函数执行,不会影响到Go的结果。

    运行此示例,需要安装好Go和Energy开发环境:教程一 环境安装

    此示例中采用了内置http服务访问内嵌资源: 内置http服务


    使用方式

    Go中调用JS

    参数说明:

    参数1 js代码或函数

    1. 示例参考,根据实现场景中使用
    2. JS代码
    3. `
    4. var demo = document.getElementById('demo');
    5. demo.innerHTML = 'energy gui';
    6. `
    7. `
    8. document.title;
    9. `
    10. JS函数
    11. `alert('energy');`
    12. JS中已定义的函数
    13. `
    14. demo('参数1', '参数2');
    15. `

    参数2 可为空,或script URL

    参数3 默认0,脚本开始执行行号

    Chromium().ExecuteJavaScript("cript: code or function", "script url", code start line)
    1. //获得主窗口
    2. info := cef.BrowserWindow.MainWindow()
    3. //调用js中定义的函数GoExecuteJSFunc,并传递参数,但没有返回值
    4. var jsFunc = fmt.Sprintf("GoExecuteJSFunc(%d, '%d')", 9999, time.Now().Second())
    5. info.Chromium().ExecuteJavaScript(jsFunc, "", 0)

    完整示例

    Go代码示例

    示例中在主进程启动之后开启一个1秒执行一次的协程函数,并在函数里执行了JS函数GoExecuteJSFunc

    GoExecuteJSFunc函数接收2个参数,可通过Go字符串拼接传递参数

    ExecuteJavaScript 函数无法接收函数返回值,如想接收返回值需使用事件机制:参考教程九

    1. package main
    2. import (
    3. "embed"
    4. "fmt"
    5. "github.com/energye/energy/cef"
    6. "github.com/energye/energy/common/assetserve"
    7. "time"
    8. )
    9. //go:embed resources
    10. var resources embed.FS
    11. func main() {
    12. //全局初始化 每个应用都必须调用的
    13. cef.GlobalCEFInit(nil, &resources)
    14. //创建应用
    15. cefApp := cef.NewApplication(nil)
    16. //指定一个URL地址,或本地html文件目录
    17. cef.BrowserWindow.Config.DefaultUrl = "http://localhost:22022/execute-javascript.html"
    18. cef.BrowserWindow.Config.Title = "Energy - execute-javascript"
    19. cef.BrowserWindow.Config.Icon = "resources/icon.ico"
    20. //内置http服务链接安全配置
    21. cef.SetBrowserProcessStartAfterCallback(func(b bool) {
    22. fmt.Println("主进程启动 创建一个内置http服务")
    23. //通过内置http服务加载资源
    24. server := assetserve.NewAssetsHttpServer()
    25. server.PORT = 22022
    26. server.AssetsFSName = "resources" //必须设置目录名
    27. server.Assets = &resources
    28. go server.StartHttpServer()
    29. //定时执行web js
    30. go timeTask()
    31. })
    32. //运行应用
    33. cef.Run(cefApp)
    34. }
    35. //定时执行web js
    36. func timeTask() {
    37. var param0 = 0
    38. for {
    39. //每1秒钟执行一次
    40. time.Sleep(time.Second)
    41. info := cef.BrowserWindow.MainWindow()
    42. param0++
    43. //调用js中定义的函数GoExecuteJSFunc,并传递参数,但没有返回值, 也无法接收返回值
    44. var jsFunc = fmt.Sprintf("GoExecuteJSFunc(%d, '%d')", param0, time.Now().Second())
    45. fmt.Println("GoExecuteJSFunc:", jsFunc)
    46. info.Chromium().ExecuteJavaScript(jsFunc, "", 0)
    47. }
    48. }

    html代码示例

    定义了GoExecuteJSFunc函数,在Go中调用传递2个参数。

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>execute-javascripttitle>
    6. <script type="application/javascript">
    7. function GoExecuteJSFunc(param, param1) {
    8. let message = document.getElementById("message");
    9. message.innerHTML = message.innerHTML + "param0: " + param + " param1: " + param1 + "
      "
    10. if (param % 2 === 0) {
    11. message.style.color = "red"
    12. } else {
    13. message.style.color = "blue"
    14. }
    15. }
    16. script>
    17. head>
    18. <body style="overflow: hidden;margin: 0px;padding: 0px;">
    19. execute-javascript:<br>
    20. <div id="message">
    21. div>
    22. body>
    23. html>

  • 相关阅读:
    JavaScript学习笔记
    Navicat Premium 15 for Mac/Win 中文安装包下载
    信息检索 | 国内外综合性信息检索系统一览
    【数据说第四期】篮球比赛中的投篮选择
    论文阅读笔记(六)——基于改进深度学习方法的股骨x线骨折自动检测与定位
    前后端接口设计与配置中心系统<二十九>-------HiAbility SDK开发2【 APP分享功能设计与实现】
    【项目管理】原则之四--聚焦于价值
    C语言趣味代码(一)
    数据安全出境系列——数据追溯能力
    (Linux学习一):Mac安装vmWare11.5,centOS 7安装步骤教程
  • 原文地址:https://blog.csdn.net/snxamdf/article/details/128074644