如何在Electron中向不同窗口发送消息?

2024-03-07

我正在编写我的第一个电子应用程序,所以请宽容:)

当用户按下主窗口上的按钮时,应该打开一个新窗口,其中显示一些 json 字符串。 该事件由 ipcMain 处理:

ipcMain.on("JSON:ShowPage", function(e, item) {
    createJSONWindow(item);
})

这是我创建新窗口的函数:

function createJSONWindow(item) {
    let jsonWin = new BrowserWindow({
        width: 600,
        height: 800,
        center: true,
        resizable: true,
        webPreferences:{
            nodeIntegration: true,
            show: false
        }
    });
    jsonWin.loadFile("jsonView.html");

    ipcMain.on('JSON_PAGE:Ready', function(event, arg) {
        jsonWin.webContents.send('JSON:Display', item);
    })

    jsonWin.once('ready-to-show',()=>{
        jsonWin.show()
    });

    jsonWin.on('closed',()=>{
        jsonWin = null;
    });
}

现在回答我的问题,当我有多个JSONWindow打开,他们每个人都得到JSON:Display消息并更新其内容。他们不应该彼此独立工作吗?这jsonWin永远是新的BrowserWindow,不是吗?

提前致谢。


问题是这段代码:

ipcMain.on('JSON_PAGE:Ready', function(event, arg) {
      jsonWin.webContents.send('JSON:Display', item);
})

每次你创建一个新窗口时,你都会有ipcMain订阅同一条消息。这意味着当ipcMain得到'JSON_PAGE:Ready'消息,它调用它注册的每个回调并向每个窗口发送一条消息。


在这种情况下,最简单的解决方案是使用传递给ipcMain处理程序将消息发送到将其发送到 main 的渲染器。二、单次订阅时间之外createJSONWindow:

ipcMain.on('JSON_PAGE:Ready', function(event, arg) {
      e.sender.send('JSON:Display', item);
});
function createJSONWindow() { ... }

然而,是'JSON:Display'只是在页面加载时发送?如果是这样,您可以将窗口的 webContents 订阅到did-finish-load https://electronjs.org/docs/api/web-contents#event-did-finish-load页面加载时触发的事件。

jsonWin.webContents.on("did-finish-load", () => {
    jsonWin.webContents.send(...);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Electron中向不同窗口发送消息? 的相关文章

  • 动态速度计 javascript 或 jquery 插件

    我希望有动态ajax插件在页面上显示速度计 一个想法是我设置一个背景并旋转针 有人知道相关插件吗 这里有一些供您参考 http bernii github com gauge js http bernii github com gauge
  • 用隐藏单元格补充 colspanned 表格有什么不好吗?

    我一直在表格上开发一些排序和选择功能 我发现在具有跨单元格的表格中定位非常困难 我只是添加了跨区单元格并将其隐藏 它看起来不错 它与我的 js 一起工作 非常适合索引 但我想知道这是否是合法的方法 stuffing display none
  • 如何在ASP.NET Webform中使用Jquery表单插件?

    我遇到了这个插件 http malsup com jquery form getting started http malsup com jquery form getting started 我想知道如何在 ASP NET WebForm
  • 非 DOM 对象上的 jQuery 自定义事件

    我最近阅读了一些代码 其功能如下 bob name Bob Smith rank 7 bob bind nameChanged function bob trigger nameChanged 这似乎有效 但我在 jQuery 文档或源代码
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • 使用 moment.js 检查输入日期是否为星期一

    好吧 我想检查日期是否是星期一 例如 var myDate new Date moment myDate DD MM YYYY dayIs monday 在我的国家 一周的第一天是星期一 所以 我真的想检查输入日期是否是一周的开始 我尝试使
  • jQuery 选择 # id 以单词为前缀,计数器为后缀

    有没有办法用 jQuery 选择所有带有前缀 my 和后缀 0 9 的 id 像这样的 my 1 4 还是可以用循环来实现 div div div div div div div div div div 第一个想法 似乎效果很好 div i
  • 使用 CryptoJS 更改密钥 [重复]

    这个问题在这里已经有答案了 我正在使用 CryptoJS 来加密和解密文本 在这里 我只是获取消息并显示加密和解密消息 我使用DES算法进行加密和解密 这是我的 HTML 文件
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • JavaScript 中数组的 HTML 数据列表值

    我有一个简单的程序 它必须从服务器上的文本文件中获取值 然后将数据列表填充为输入文本字段中的选择 为此 我想要采取的第一步是我想知道如何动态地将 JavaScript 数组用作数据列表选项 我的代码是
  • 是否有任何非轮询方式来检测 DOM 元素的大小或位置何时发生变化?

    很长一段时间以来 我一直在寻找一种方法来检测 DOM 元素的大小或位置何时发生变化 这可能是因为窗口调整了大小 或者因为向该元素添加了新的子元素 或者因为在该元素周围添加了新元素 或者因为 CSS 规则已更改 或者因为用户更改了浏览器的字体
  • 在d3.js中将2D形状转换为3D,并根据ANGULAR中的值调整高度

    我正在使用 d3 js v6 创建以下 2D 图表表示的 3D 图表 这个圆圈中有多个正方形 每个正方形都根据值分配了一种颜色 值越大 正方形越暗 现在我想将其转换为 3D 形状 其中当值变高时 只有特定正方形的高度会增加 因此结果在某种程
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • 单击关闭按钮后不显示 Google 一键登录 UI

    我正在尝试按照本指南使新的谷歌一键登录工作 https developers google com identity one tap web https developers google com identity one tap web
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • 当用户单击链接时,如何记录 MixPanel 事件?

    当用户单击某种类型的链接时 我试图在 MixPanel 中记录一个事件 我正在使用 JQuery 不引人注意地完成此操作 据我所知 我需要添加一个回调函数 以便在记录事件后将用户带到 URL 这是我正在使用的代码 不幸的是
  • 如果数字小于 10,则显示前导零 [重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 相当于 printf string format https stackoverflow com questions 610406 javascript equivalent t
  • 在 Javascript 中减少/分组数组

    基于this https stackoverflow com a 40774906 3254598例如 我想以稍微不同的方式按对象进行分组 结果应该如下 key audi items make audi model r8 year 2012
  • 如何在打字稿文件中导入没有定义文件的js库

    随着我们的项目变得越来越大 我想从 JavaScript 切换到 TypeScript 以帮助进行代码管理 然而 我们使用许多库作为 amd 模块 我们不想将其转换为 TypeScript 我们仍然想将它们导入 TypeScript 文件
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值

随机推荐

  • Docker 注册表镜像未使用

    当我尝试从本地镜像中提取图像时 它起作用了 docker login u docker p mypassword nexus3 pleiade mycomp fr 5000 docker pull nexus3 pleiade mycomp
  • 数字签名服务器上的私钥存储在哪里?

    我正在开发一个客户端服务器应用程序 需要在发送到客户端之前使用私钥对某些文件进行签名 然后 客户端将使用公钥验证签名 因此 私钥需要始终位于服务器上并且可由服务器应用程序读取 问题是我想知道在哪里存储我的私钥 这样在服务器受到威胁时更安全
  • 为什么 sizeWithFont:constrainedToSize:lineBreakMode: 返回错误的大小?

    我想要在表格单元格的标签中显示的字符串有两种可能的宽度 并且我需要计算高度 以便正确记录表格单元格的高度 然而 无论我对约束尺寸做什么 我都会得到相同的高度 这在我想要的情况下是不正确的 我正在使用的代码 CGFloat width 300
  • 如何使用prepareForReuse方法

    我发现这个方法叫做 void prepareForReuse I 阅读文档 https developer apple com documentation uikit uitableviewcell但我不明白如何使用它 当我滚动表格视图时
  • 如何使用 C# 创建包装 RTD 函数的 Excel 自动化插件?

    我有一个基于 RtdServer 的可用自动化插件 如何使用 RtdServer 在 C 中创建实时 Excel 自动化插件 https stackoverflow com questions 5397607 howto create a
  • Scikit learn 错误消息“精度和 F 分数定义不明确,在标签中设置为 0.0”[重复]

    这个问题在这里已经有答案了 我正在研究二元分类模型 分类器是朴素贝叶斯 我有一个几乎平衡的数据集 但是当我预测时 我收到以下错误消息 UndefinedMetricWarning Precision and F score are ill
  • 睡眠的意义(0)

    我以前见过Sleep 0 在我的代码的某些部分 一些无限 长while循环可用 我被告知这将使时间片可用于其他等待进程 这是真的 有没有什么意义Sleep 0 根据 MSDN 的文档Sleep http msdn microsoft com
  • Rails.logger.info 在初始化程序中不起作用

    Rails logger info在初始化程序中使用时不会写入任何信息到日志中 如何登录初始化程序 Rails logger Logger new STDOUT before MyServer Application initialize
  • 有关 ajax 回调和 drupal_process_form 的帮助

    我有一个通过仅在视图模式下显示的 nodeapi 添加的表单 用户可以从选择菜单中选择一个项目 他们的选择将通过发生更改时的 hook menu 回调自动保存到数据库中 如果用户禁用了 javascript 它将使用表单 api 正常提交
  • C# ftp上传到Linux

    我正在尝试检查 FTP 服务器上是否存在目录 在您说 使用 ListDirectory 或 使用 PrintWorkingDirectory 之前 它们并不总是有效 例如 我测试了是否ftp 网络服务器 日志 ftp webserver L
  • 从 Entity Framework 4.1 Code First 中的 NotMapped 类派生实体类

    我需要从不属于模型的基类派生两个实体类 NotMapped public abstract class BaseClass NotMapped public string SomeProperty get set public partia
  • 自动生成环境模块声明

    给定这 2 个打字稿文件 api Token ts interface Token code string export default Token and index ts export from api Token TSC 1 5 与
  • 如何将分数显示为带分数的最大值?

    我正在教授一门让学生习惯混合数字表示法的课程 然而 maxima 所做的所有计算都使用更传统的分数表示法 是否可以介绍一下3 2 as 1 1 2 我只需要这个用于乳胶输出 i4 tex 3 2 3 over 2 o4 false 所以我不
  • 导入org.opencv.highgui无法解析

    我安装了 OpenCV opencv 3 0 0 alpha 它工作正常 但我无法使用该导入 import org opencv core import org opencv highgui Highgui public class Mai
  • drawInRect:withAttributes 与 drawInRect:withFont:lineBreakMode:alignment

    我正在开发应用程序的新版本 并尝试替换已弃用的消息 但无法克服这一问题 我不明白为什么drawInRect withAttributes不管用 代码正确显示时drawInRect withFont lineBreakMode alignme
  • Apache Config Mime 类型:xlsx 文件在下载时被解释为 zip 文件,为什么?

    背景 由于某种原因 每当用户尝试使用 MSIE 从我们的 Intranet 打开 xslx excel 2007 文件时 文件下载对话框会将其解释为 zip 文件 诚然 xlsx 文件确实arezip 文件 但我们不希望出现这种行为 请用
  • Volley.NoConnectionError:java.io.EOFException 0

    我不明白这个错误 虽然我在网上搜索了很多次 但没有采取任何措施 有时会出现该错误 我做了一个使用 VOlley 库的应用程序 一切正常 我的请求 95 有效 但有时我遇到错误 11 12 12 18 54 991 I Error 1870
  • sqlite.get() 导致 TypeError: 无法读取 null 的属性 'get'

    当尝试执行 sql get 调用时 它在某些地方有效 但在其他地方无效 我似乎无法弄清楚有什么区别 数据库已成功打开 或者至少我从未收到错误并且它永远不会关闭 我还在第二个 工作示例 中使用 Discord js 但不确定这是否相关 在这个
  • 如何结合 std::copy_if 和 std::transform?

    考虑以下代码片段 迭代第一类型 T1 的一个容器 以创建第二类型 T2 的第二容器 应用转换函数 T1 gt T2 但仅适用于验证谓词的 T1 元素 T1 gt bool 在以下示例中为奇数 std vector
  • 如何在Electron中向不同窗口发送消息?

    我正在编写我的第一个电子应用程序 所以请宽容 当用户按下主窗口上的按钮时 应该打开一个新窗口 其中显示一些 json 字符串 该事件由 ipcMain 处理 ipcMain on JSON ShowPage function e item