Electron: 渲染器进程到主进程(双向)

news/2024/11/6 5:08:00/文章来源:https://www.cnblogs.com/openmind-ink/p/18525949

双向IPC的一个常见应用:从渲染器进程代码调用主进程模块并等待结果
【ipcRenderer.invoke】《==============》【ipcMain.handle()】

main.js

const { app, BrowserWindow, ipcMain, dialog } = require('electron/main')
const path = require('node:path')async function handleFileOpen () {const { canceled, filePaths } = await dialog.showOpenDialog()if (!canceled) {return filePaths[0]}
}function createWindow () {const mainWindow = new BrowserWindow({webPreferences: {preload: path.join(__dirname, 'preload.js')}})mainWindow.loadFile('index.html')
}app.whenReady().then(() => {ipcMain.handle('dialog:openFile', handleFileOpen)createWindow()app.on('activate', function () {if (BrowserWindow.getAllWindows().length === 0) createWindow()})
})app.on('window-all-closed', function () {if (process.platform !== 'darwin') app.quit()
})

preload.js

const { contextBridge, ipcRenderer } = require('electron/renderer')contextBridge.exposeInMainWorld('electronAPI', {openFile: () => ipcRenderer.invoke('dialog:openFile')
})

renderer.js

const btn = document.getElementById('btn')
const filePathElement = document.getElementById('filePath')btn.addEventListener('click', async () => {const filePath = await window.electronAPI.openFile()filePathElement.innerText = filePath
})

index.html

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP --><meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'"><title>Dialog</title></head><body><button type="button" id="btn">Open a File</button>File path: <strong id="filePath"></strong><script src='./renderer.js'></script></body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于如何根据shp文件筛选csv某个省份数据集

问题描述:现在我有一个中国地图的shp文件和一个全球降水数据的csv文件,我只想要四川省份的降水数据,该如何得到。中国地图 中国全球降雨数据格式点击查看代码 import geopandas as gpd import pandas as pd shp = gpd.read_file(r.\中华人民共和国\中华人民共和国.shp,en…

数据采集作业3

课程链接 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology作业链接 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology/homework/13287实验三仓库链接 https://gitee.com/wd_b/party-soldier-data-collection/tree/master…

10分钟快速开发一个监控ASIN的系统-计算引擎

定义数据模型 发布生成表单 Python端直接操作亚马逊amazon# <span data-hook="rating-out-of-text" aria-hidden="true" class="a-size-medium a-color-base">4.5 out of 5</span>if com_amz_x.check_driver_is_exists_by_x_path(…

数据库 PostgreSQL 和 MySQL 开源协议的区别

说到开源数据库,很多人想到了MySQL和PostgreSQL数据库,这是两种比较有名和使用量较多的数据库技术,两者虽然都是开源的,但开源协议是不一样的。 PostgreSQL遵循灵活的开源协议BSD,MySQL使用的是GPL(GNU General Public License)协议,二者有以下区别: 1. 商业使用限制方面…

MySQL8.0安装配置教程【超级详细图解】

万分感谢.参考文章内容:https://blog.csdn.net/m0_73442728/article/details/131359479 万分感谢.参考文章内容:https://blog.csdn.net/qq_40187702/article/details/130618805 目录** 一、MySQL下载与安装 二、MySQL安装 三、MySQL连接测试 四、配置环境变量一、MySQL下载与安…

使用TLE计算轨道并使用Cesium绘制

使用TLE计算轨道并使用Cesium绘制 依赖库satellite.jsnpm install satellite.js实现思路利用satellite.js获取一个轨道周期内的全部轨迹点坐标 使用Cesium的primitive绘制轨迹线完整代码 import { twoline2satrec, propagate, gstime, eciToEcf } from "satellite.js"…

实例化对象有哪几种方式

1. **new 关键字** User user = new User(); 2. **clone() 方法** User clonedUser = originalUser.clone(); 3. **通过反射机制创建** Class<?> cls = Class.forName("com.dao.User"); User u = (User) cls.newInstance(); 4. **序列化反序列化** …

操作字符串都有哪些类以及它们之间有什么区别

1. **String**: - 是不可变对象。每次对 String 类型进行修改时都会生成一个新的对象。 - 适用于不频繁修改字符串的情况。 2. **StringBuilder**: - 线程不安全,效率高,多用于单线程环境。 - 适用于需要频繁修改字符串的操作。 3. **StringBuffer**: - 线程安全…

微信公众号服务器配置一直提示token验证失败?

本地使用postman,请求了要设置在微信公众号服务器回调的URL,可以正常返回echostr,点击提交, 一直报错token验证失败,请问这个是什么原因呢? 解决办法: 解决了,我去,好坑啊,遇到该问题的朋友,请做如下检查:1.检查,request 是不是 UTF-8,避免获取的数据是乱码 2…

「闲话」NOIP 集训

10.31 因为明天是 11.1,所以从今天开始写 上午 T1 没看让输出啥所以一眼会了求所有 j 看了输出之后,额 诶,其实也对啊,直接根据每个 j 求出的 i 区间查分一下就好了,调和级数的复杂度 20 min 打完了,本来以为有些 conercase 要调一会,但直接过了所有样例,爽!! 后记:…

2024-11-04 Request textDocument/documentSymbol failed. ==》重启vscode

今个儿早上一来,跑一下项目,我勒个去,这个vscode就给我不断弹出这种弹窗 Request textDocument/documentSymbol failed. 请求文本Document/documentSymbol失败。来源:Vue-官方。 原因:不知道,可能是终端报错了,但是把终端关掉了(没有杀死),报错仍旧存在。 解决方案:…

django抛出异常然后在axios里处理

1.views.py代码@csrf_exempt def get_selectdata_by_sql(request):current = request.GET.get("current", 1)size = request.GET.get("size", 0)limit_size=50try:res_list = []request_dict = json.loads(request.body)# print(request_dict)runsql = req…