使用Web前端技术开发桌面应用---Electron中Window.open的子窗口和父窗口间的通信

news/2024/7/19 15:07:25 标签: js, 前端, electron

码字不易,有帮助的同学希望能关注一下我的微信公众号:Code程序人生,感谢!代码自用自取。

在这里插入图片描述

上期博客在最后,学习了用window.open打开了子窗口,这期学习一下父子窗口如何通信,通信在任何框架中都是重要的环节。

window.opener.postMessage 子窗口向父窗口传递消息

window.opener.postMessage(message,targetOrigin),是将消息发送给指定来源的父窗口,如果未指定来源则发送给*,即所有窗口。

  • message : 传递的消息,是String类型的值
  • targetOrigin : 指定发送的窗口

在传递消息时,你需要在子窗口的页面中设置一些内容,所以我们不能使用远程的页面,而需要自己建立一个。在项目根目录,建立一个index4.html文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>我是弹出子窗口</h2>
    <button id="popBtn">向窗口传递信息</button>
</body>
<script>
    var popBtn = this.document.querySelector('#popBtn')
    popBtn.onclick = function(e){
        window.opener.postMessage('我是子窗口的消息')
    }
</script>
</html>

这样就可以从子窗口向父窗口发送信息了。

window.addEventListener父窗口接收信息

先打开index3.html,在代码最下面,加一个<div>标签,记得要给一个ID,这样就用JS控制了。

<div id="mytext"></div>

父窗口接收信息需要通过window.addEventListener,例如现在我们打开index3.js,也就是父窗口的JS代码部分,写入下面代码:

window.addEventListener('message',(msg)=>{
    let mytext = document.querySelector('#mytext')
    mytext.innerHTML = JSON.stringify(msg)
})

这样父窗口就可以顺利接收到子串口发送过来的信息了,也可以轻松的显示在子窗口中。

记得上期博客,我们在index3.js中写过这段代码:

myBtn.onclick = function(){
    window.open('https://blog.csdn.net/m0_46171043?spm=1001.2101.3001.5343');
}

我们把window.open中的url链接,换成我们上面新建的那个index4.html

myBtn.onclick = function(){
    window.open('./index4.html');
}

这样index3.html调取index4.html就会产生一个父子关系,并且完成我们上面写好的通信内容。

下面我们运行一下代码:
在这里插入图片描述
首先出现的是index3.html的窗口,我们点击打开子窗口的按钮后,会弹出index4.html的窗口,然后我们点击向父窗口传递信息的按钮,再看index3.html传递的信息就被渲染到页面内了。

这样我们就完成了在Electron中Window.open的子窗口和父窗口间的通信。


有微信小程序课设、毕设需求联系个人QQ:505417246

关注下面微信公众号,可以领取微信小程序、Vue、TypeScript、前端、uni-app、全栈、Nodejs、Python等实战学习资料
最新最全的前端知识总结和项目源码都会第一时间发布到微信公众号,请大家多多关注,谢谢

在这里插入图片描述


http://www.niftyadmin.cn/n/1576514.html

相关文章

使用Web前端技术开发桌面应用---Electron 选择文件对话框

码字不易&#xff0c;有帮助的同学希望能关注一下我的微信公众号&#xff1a;Code程序人生&#xff0c;感谢&#xff01;代码自用自取。 这期博客开始我们讲解Electron下的对话框操作&#xff0c;对话框一般会有选择文件对话框&#xff0c;保存文件对话框和确认对话框。这节我们…

Maven的仓库

以下内容引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/maven_repositories.html&#xff1a; 什么是Maven仓库&#xff1f; 在Maven的术语中&#xff0c;仓库是一个地方或者说是目录&#xff0c;其中存储有项目jar包、库、插件或者任何其他项目指定的组…

mybatis入门一:mybatis框架原理

一、mybatis框架原理图&#xff08;图片参考网上&#xff09;二、框架原理图解释&#xff1a;1、mybatis配置sqlMapConfig.xml&#xff0c;此文件作为mybatis的全局配置文件&#xff0c;配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件&#xff0c;文件中配置了操…

使用Web前端技术开发桌面应用---Electron 保存对话框的操作

码字不易&#xff0c;有帮助的同学希望能关注一下我的微信公众号&#xff1a;Code程序人生&#xff0c;感谢&#xff01;代码自用自取。 有了上期的基础&#xff0c;再学习保存对话框dialog.showSaveDialog()就容易很多&#xff0c;因为他们大部分的API都是相同的&#xff0c;只…

case in

#!/bin/bash source /etc/profilesource ~/.bashrc #自己定义$version_number case $version_number in3.0.17) echo "当前版本已是最新不用升级版本号:$version_number"exit 0;;3.0.16) echo "当前版本:$version_number 开始导入{3.0.17}sql"3.0.9) echo …

使用Web前端技术开发桌面应用---Electron 消息对话框的操作

码字不易&#xff0c;有帮助的同学希望能关注一下我的微信公众号&#xff1a;Code程序人生&#xff0c;感谢&#xff01;代码自用自取。 打开文件对话框和保存文件对话框我们都学习过了&#xff0c;这节学习一下最为普通的消息对话框dialog.showMessageBox()&#xff0c;它的属…

使用Web前端技术开发桌面应用---Electron 断网提醒功能制作

码字不易&#xff0c;有帮助的同学希望能关注一下我的微信公众号&#xff1a;Code程序人生&#xff0c;感谢&#xff01;代码自用自取。 桌面客户端的程序都必备的一个功能是判断网络状态&#xff0c;这个其实可以用window.addEventListener来进行时间监听。 相关事件 其实这…

使用python将ppm格式转换成jpg【转】

转自&#xff1a;http://blog.csdn.net/hitbeauty/article/details/48465017 最近有个很火的文章&#xff0c;叫 有没有一段代码&#xff0c;让你觉得人类的智慧也可以璀璨无比&#xff1f; 自己试了一下里面的代码&#xff0c;可是图片格式让我犯难了。PPM格式的图片怎么打开呢…