千家信息网

实现页面之间通信的方法教程

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,这篇文章主要介绍"实现页面之间通信的方法教程",在日常操作中,相信很多人在实现页面之间通信的方法教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"实现页面之间通信的方法
千家信息网最后更新 2025年02月05日实现页面之间通信的方法教程

这篇文章主要介绍"实现页面之间通信的方法教程",在日常操作中,相信很多人在实现页面之间通信的方法教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"实现页面之间通信的方法教程"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1. 实现页面之间通信的方法

虽然我们使用postmessage也可以实现页面通信,但这里我们主要使用window.opener这个API,MDN对它的解释如下:

The Window interface's opener property returns a reference to the window that opened the window using open().

意思就是window提供的opener接口返回一个打开当前页面的页面的一个引用,换句话说,如果A页面打开B,那么B页面的opener将返回A。通过这种方式,我们可以在A页面定义全局的方法挂载在window上,那么B页面就可以通过opener拿到A页面的方法从而控制A页面的行为。

目前主流的浏览器对这个API支持的都比较好,所以我们在大部分场景下可以考虑使用这个API。

为了更方便的理解他的应用场景,我们这里实现一个小功能:我们定义两个页面,A,B,当A页面打开B页面的时候,用B页面改变A页面的背景色。代码如下:

// A页面      

父页面A

打开b页面 // B页面

父页面B

首先我们在A页面里定义一个全局方法,当点击a标签跳转到新开的B页面时,B页面就是通过opener,调用A定义的changeColor,并传入参数给A页面,从而改变A页面的背景色。效果如下:

2.实现父子页面和子页面与子页面之间通信的方法

父子页面这里主要针对iframe而言,即iframe和父页面以及iframe页面之间的通信。比如下图:


我们想实现父页面A操控子页面A,B,并且让子页面和父页面交互,这里我们主要使用 iframe的

  • contentWindow

  • parent.window 通过contentWindow,我们可以拿到iframe内部的方法和dom元素,进而可以操控iframe页面

首先我们来看看父页面操控子页面的场景:父页面A调用子页面的方法传递一条数据,并并显示在子页面中:

// 父页面 _window.onload = function() {     let iframe1 = $id('a1').contentWindow;     // 控制子页面dom     iframe1.document.body.style.background = "#000"     iframe1.loadData({a: '1'}) }  function $id(id) {     return document.getElementById(id) }  // 子页面 function loadData(data) {     document.body.append(`父页面的数据数据${data.a}`) }

由上可知,父页面通过contentWindow拿到iframe的window对象从而向其传递数据并调用其方法。

同样,子页面也可以操控父页面:

// 父页面 function $id(id) {     return document.getElementById(id) } // 子页面 parent.window.$id('bridge')[xss_clean] = '子页面操控父页面dom'复制代码

从代码可以看到,我们使用parent.window拿到父页面的window,然后调用父页面提供的$id方法来操作父页面dom。


接下来我们来解决子页面和子页面通信的问题,其实方法在上面已经提到了,我们可以把父页面作为一个桥梁,子页面A通过parent.window拿到父页面的window,进而可以获取另一个子页面B的dom,这样我们就可以让子页面A操作子页面B了,反之也是一样的。

// 子页面A let iframeBWin = parent.window.$id('a2').contentWindow iframeBWin.onload = function() {     iframeBWin.document.getElementById('show')[xss_clean] = "来自子页面A的问候" }复制代码

由上面代码我们可以知道,我们通过parent.window来拿到子页面B进而实现和子页面B通信的目的,通过这种方式,我们可以实现很多有意思的东西。


注意,我们所讨论的这些方法都是基于同域下的,其实实现跨域的方法也有很多,比如使用中间iframe实现桥接,通过设置window.domain将window提高到顶层等等,不过实现起来还是有些坑的,不过大部分场景都能满足。

3.前端实现文件下载功能

对于下载文件来说,大部分场景都是后端来实现,前端只需求请求接口就好了,但是有时候这种方式反而会占用多余的资源和带宽,如果需要下载的是用户自己生成的内容或者内容已经返回到客户端了,这时候能不经过服务端而直接生成下载任务,能节省不少的资源和时间开销。

一般来说前端实现的思路就是通过动态创建a标签,设置其download属性,最后删除a就好了,对于不是图片的文件一般都可以下载,但是如果是图片,有些浏览器会自动打开图片,所以我们需要手动把它转化为data:URLs或blob:URLs,基于这个原理,我们可以用fileReader,也可以用fetch-URL.createObjectURL,这里经过大量测试我采用后者:

function download(url, filename) {     return fetch(url).then(res => res.blob().then(blob => {         let a = document.createElement('a');         let url = window.URL.createObjectURL(blob);         a.href = url;         a.download = filename;         a.click();         window.URL.revokeObjectURL(url);     })) }

该方法传入一个文件的地址和希望使用的文件名,这样,我们就能优雅的使用它来实现下载了。

到此,关于"实现页面之间通信的方法教程"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

页面 方法 通信 之间 代码 场景 文件 教程 数据 学习 前端 图片 大部分 就是 方式 接下来 全局 内容 功能 接口 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 内蒙古智能套料软件开发商 静安区企业软件开发报价有哪些 网络安全免费虚拟机 数据库技术函数count 计算机网络技术专业理解 cissp信息网络安全专家 光遇discord服务器邀请码 企业信息数据库作用意义 云南项目软件开发商 云原生对服务器的要求 大连春华互联网科技公司 延庆区网络技术服务选择 信访与社会矛盾研究数据库 第一届网络安全宣传周举办地 无锡好的软件开发诚信经营 ncc国家网络安全人才创新基地 青浦区软件开发诚信合作 数据库的物理逻辑结构 江西多功能软件开发服务价格 网络安全岗位评价 传统数据库变化 怎么能访问到别人的数据库 怎么关闭网站服务器 审计信息化软件开发 村庄网络安全宣传活动简讯 华农图书馆的数据库 广州凡科互联网科技珠海分公司 测血糖的结果有几个数据库 无线传感器网络技术书籍 印象云 - 美国云服务器
0