【go语言】go-webview2用法(持续更新)

news2025/2/27 22:50:28

文章目录

    • 背景
    • 核心接口和方法
    • 扩展接口
    • 遗憾的是

背景

目前为止,已经有很多优秀的electron应用。但其特点也很明显:使用html+css+js构建的布局很精致,但是体积不容小觑(最新版electron-egg打包出来的程序已经300MB+)。

  • vscode: 微软开源的编辑器工具,支持各类插件。
  • draw.io: 流程图绘制工具
  • tabby: 一款ssh连接工具
  • termius:ssh以及sftp连接工具
  • typora:一款markdown编辑器
  • 微信小程序开发工具: 基于nw.js, 本质和electron差不多。

而webview2是微软基于chromium做的一个渲染引擎,相当于将electron的公共部分抽离到一个目录下:C:\Program Files (x86)\Microsoft\EdgeWebView\Application,然后你的核心程序只需要几M即可运行。
在这里插入图片描述
经过UPX压缩后的exe程序,仅需要1.9MB就可跑起一个helloworld页面。
在这里插入图片描述
PS:基于webview2的还有wails这个框架,但是框架变动太频繁, wails2.5的程序升级到2.9就跑不起来了,很难受。

核心接口和方法

而go语言方面,已经有人封装了调用webview2来构建exe程序的库。
github.com/jchv/go-webview2

  • New():

功能: 创建一个新的 WebView2 实例。
用法: webview, err := webview2.New()

  • Destroy():

功能: 销毁 WebView2 实例。
用法: webview.Destroy()
SetTitle(title string):

功能: 设置 WebView2 窗口的标题。
用法: webview.SetTitle(“窗口标题”)

  • SetSize(width, height int, hint webview2.Hint):

功能: 设置 WebView2 窗口的大小。
用法: webview.SetSize(800, 600, webview2.HintNone)

  • Navigate(url string):

功能: 导航到指定的 URL。
用法: webview.Navigate(“https://example.com”)

  • Eval(script string):

功能: 执行 JavaScript 代码。
用法: webview.Eval(“alert(‘Hello, world!’);”)

  • Run():

功能: 运行 WebView2 实例,进入事件循环。
用法: webview.Run()

  • Bind(name string, fn interface{}):

功能: 将 Go 函数绑定到 JavaScript,以便从 JavaScript 调用 Go 方法。
用法: webview.Bind(“functionName”, func() { /* Go code */ })

扩展接口

通过go调用win32 api可以扩展更多的功能。

  • 提示框(windows原生版本)
/**
 * @description: 调用window原生消息弹框
 * @param {uintptr} hwnd
 * @param {*} text 消息内容
 * @param {string} caption
 * @param {uint} uType
 * @return {*}
 */
func ShowMessage(hwnd uintptr, text, caption string, uType uint) int {
	ret, _, _ := procMessageBoxW.Call(
		hwnd,
		uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(text))),
		uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(caption))),
		uintptr(uType),
	)
	return int(ret)
}
  • 文件选择框
/**
 * @description: 选择一个文件, import 一下"github.com/sqweek/dialog"
 * @return {string, error} 文件路径,错误信息
 */
func OpenFileDialog() (string, error) {
	filePath, err := dialog.File().Title("选择").Load()
	if err != nil {
		return "", err
	}
	return filePath, nil
}

遗憾的是

  1. 微软放弃了webview2在mac和linux上的支持,并未开放渲染引擎和接口。
  2. go语言库github.com/jchv/go-webview2并不支持win7,会报错:kernel32.dll加载失败。可能需要重新配置Webview2Loader.dll。(win7需要109版本以下的。)
    官方nuget仓库:https://www.nuget.org/packages/Microsoft.Web.WebView2/1.0.2730-prerelease#versions-body-tab
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2040574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

共享经济背景下校园、办公闲置物品交易平台-计算机毕设Java|springboot实战项目

🍊作者:计算机毕设残哥 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目、 源…

【JAVA入门】Day20 - 正则表达式

【JAVA入门】Day20 - 正则表达式 文章目录 【JAVA入门】Day20 - 正则表达式一、正则表达式使用的注意事项1.1 一个 [ ] 匹配一个字符1.2 表示“或者”的表达式可以再用一个 [ ] 括起来1.3 &&表示“而且”1.4 ^表示“非” 二、预定义字符(只能匹配一个字符&a…

PCB结构

覆铜板(Copper Clad Laminate,CCL)是PCB(Printed Circuit Board,印制电路板)的主体,由基材和覆在其表面上的一层铜箔组成,基材通常是由增强材料(如玻璃纤维织物&#xff…

Qt 系统相关 - 事件

目录 1. 事件介绍 2. 事件的处理 示例1:处理鼠标进入和离开 示例2:当鼠标点击时,获取对应的坐标值; 3. 按键事件 3.1 单个按键 3.2 组合按键 4. 鼠标事件 4.1 鼠标单击事件 4.2 鼠标释放事件 4.3 鼠标双击事件 4.4 鼠标…

一篇文章了解上位机软件架构

软件架构 上位机基本软件架构**UI层****业务层(承上启下)****驱动层** 上位机基本软件架构 基本上所有软件都可以分为三层结构进行设计,ui界面层,中间业务逻辑层,驱动层,各个层级之间相互联系,…

汇编编译环境的安装

目录 1. 下载安装包 1.1 迅雷下载链接 1.2 Gitee下载 2. 安装 1. 下载安装包 1.1 迅雷下载链接 迅雷云盘迅雷云盘https://pan.xunlei.com/s/VO4AFFTT3ls2zGSOvFOLSP_mA1?pwdkmeh# 1.2 Gitee下载 assembler language: assembler languagehttps://gitee.com/Axurea/asse…

软考高级:数据库设计中,属性冲突、命名冲突、结构冲突

在数据库设计中,属性冲突、命名冲突和结构冲突是常见的问题,它们主要涉及不同数据源或表之间的数据整合和管理。下面我们通过通俗易懂的例子和解释来理解这些概念。 通俗示例 想象你有两家书店,它们各自维护一份图书的库存记录。 属性冲突…

高质量翻译对中国开发者提高游戏用户参与度的影响

随着中国游戏开发商继续向全球市场扩张,用户参与度成为其游戏成功的关键因素。在竞争激烈的行业中,玩家有无数选择可供选择,保持用户参与对于维持游戏的流行和增长至关重要。高质量的翻译在这一过程中起着至关重要的作用,确保游戏…

动力电池制造行业RFID产品应用方案

在全球能源转型的大背景下,新能源汽车产业蓬勃发展,动力电池作为其核心部件,其性能和质量至关重要。然而,当前国内上百家动力电池生产企业在自动化和信息化方面存在诸多不足,严重制约了行业的发展。实现动力电池的智能…

邦德创意研发的果皮咖啡,让喝咖啡也能有喝奶茶的满足感

在当下咖啡饮品市场中,果咖早已不是新鲜事物。它们以各式各样的水果与咖啡的融合,为咖啡爱好者带来新鲜的味觉体验。然而,很多果咖饮品虽色彩斑斓、风味独特,却往往止步于水果和咖啡的直接混合,未能触及更深层次的健康…

使用 onBeforeRouteLeave 组合式函数提升应用的用户体验

title: 使用 onBeforeRouteLeave 组合式函数提升应用的用户体验 date: 2024/8/14 updated: 2024/8/14 author: cmdragon excerpt: 摘要:本文介绍了在Nuxtjs中使用onBeforeRouteLeave组合式函数来提升应用用户体验的方法。onBeforeRouteLeave允许在组件离开当前路…

IDEA 创建类时自动生成注释

一、背景 在开发的过程中,公司都会要求开发针对自己创建的类进行一些描述说明,为了便于程序员在创建类时快速生成注释。 二、如何配置? 打开File -> Settings -> Editor -> File and Code Templates -> Includes,在File Header…

JavaWeb04-MyBatis与Spring结合

目录 前言 一、MyBatis入门(MyBatis官网) 1.1 创建mybatis项目(使用spring项目整合式方法) 1.2 JDBC 1.3 数据库连接池 1.4 实用工具:Lombok 二、MyBatis基础操作 2.1 准备工作 2.2 导入项目并实现操作 2.3 具…

LeetCode 热题 HOT 100 (036/100)【宇宙最简单版】【创作中】

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持!

Ubuntu(22.04)云主机SSH安全加固

1、新增SSH服务端口 #vim /etc/ssh/sshd_config 找到 #Port 22 去掉注释符,下面添加:Port [新端口] 2、本地防火墙放通 #ufw allow [新端口] #ufw reload //防火墙重新加载 #ufw status verbose //查询是否开放SSH新端口 3、腾讯云防火墙配…

在线预约小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,在线预约管理,管理员管理,系统管理 微信端账号功能包括:系统首页,在线预约,我的 开发系统:Windows 架构模…

为何UDP攻击相比常规攻击更易导致服务器瘫痪?

在网络安全领域,UDP(用户数据报协议)攻击因其独特的特性和高效的破坏性而备受关注。与常规的网络攻击相比,UDP攻击往往能够更快地使目标服务器陷入瘫痪状态,这背后的原因值得我们深入探讨。 UDP协议的无连接性是其成为…

Linux--HTTP协议(http服务器构建)

目录 1.HTTP 协议 2.认识 URL 3.urlencode 和 urldecode(编码) urlencode(URL编码) urldecode(URL解码) 4.HTTP 协议请求与响应格式 4.1HTTP 常见方法(三种) 5.HTTP 的状态码…

node速起架子

链接:https://pan.baidu.com/s/1NF1e75P8pNDzphO1jBUSyg 提取码:sf3w 下载node 安装好node -v 配置npm的全局安装路径 使用管理员身份运行命令行,在命令行中,执行如下指令: npm config set prefix "E:\develop\…

【网络】TCP协议通信的重要策略——滑动窗口,快重传,流量控制,拥塞控制,延时应答

目录 MSS值 滑动窗口 滑动窗口与重发机制 快重传机制 滑动窗口与流量控制 滑动窗口与拥塞控制 延时应答 个人主页:东洛的克莱斯韦克-CSDN博客 相关文章 【网络】传输层TCP协议的报头和传输机制-CSDN博客 【网络】详解TCP协议通信时客户/服务端的状态-CSDN博…