一文搞懂前端跨页面通信的那些方案们

前端开发逃避不开跨页面通信这项工作,跨页面通信,就好比A页面要和B页面说话,可能只是说一句话,不需要回话,可能是要给一些东西,希望得到回复,并频繁进行沟通,接下来我们说说这些跨页面通信的方案们,希望对你有所帮助。

 

目录

1 页面传参

2 页面路由传参

3 后端接口做为中转站 

4 图片预加载

5 前端状态管理工具

6 Cookie、localStorage、SessionStorage

7 PostMessage

8 IndexedDB

9 共引JS文件

10 小结


1 页面传参

例如我们在浏览器的url中的问号后面带入参数,希望通过参数将一些信息带到其他页面中去,通常是类似于?a=xx&b=xx这种。这种是属于一种get请求的方式,链接长度有限,而且破坏域名的美观性,如果链接上带有关键信息页不安全。

至于目标页面获取参数值,可以参考前端工具npm包,js-tool-big-box中的现有方法:

// window.location.href = 'http://localhost:8080/#/404?type=text&go2=232323&q=my2521';
const param = storeBox.getUrlParam('q');
console.log('获取到q的参数为:::', param);

2 页面路由传参

这种和第一种方式类似,但会把参数拼接到前端路由上,这种方式会以hash或者history的形式传递参数,类似于/#/:id/:name 这种方式。获取方式在vue2项目中可以这样:

// 页面Url示例
https://a.xx.com/detail/DXF00137
 
// detail页获取 bookId
created() {
  let bookId = this.$route.params.id
}

在react项目中就五花八门多了去了,你用不同的架构后,会发现各种各样。没办法,前端就是很乱套,很多团队没事干,加班加点希望做出东西来对外赋能,然后还得有自己的特点,怎么办呢?HTML,这个东西,我们读成“阿吃题迈而”吧,显得高端。 

3 后端接口做为中转站 

这个很好理解,我们几乎每天都在用。比如A页面有个金额,我们计算出来,提交给后端,让后端存着,等到了B页面,又需要这个金额了,我们再获取一下这个金额,到了某一步,再提交一下。反正就是接口来回传输呗,安全。

与之类似的还有websocket交互,例如A页面发送了一条申请信息,你可以在B页面通过这种实时通信方式,获取到审核结果消息,比如弹出一个小红点啥的,避免轮训请求浪费流量。

4 图片预加载

这个图片预加载也跟跨页面通信有关系吗?你有没有想过一个问题,如果我在A页面加载过一个图片,然后我把这个图片的DOM元素删除了,那么B页面如果需要加载这张图片,是否还需要走

  1. 发送图片请求
  2. 图片服务器响应请求
  3. 浏览器下载图片
  4. 浏览器解析图片
  5. 浏览器渲染图片

这个过程了呢?很显然,B页面会节约很大的线路。所以图片懒加载是属于这一类性能优化跨页面通信的范畴,这也属于我提前把东西准备好,准备随时交给B页面的一种方式。

5 前端状态管理工具

类似于VuexRedux这种,可能说详细点,不属于跨越面通信的范畴,因为我们使用vue或者react这种工具,大多数时候,用于单页面的场景。但对于用户来说,他哪知道啥单页面不单页面的,发展我看你们那么多页面来回跳呢。

而这个时候,我们通常会使用这些状态管理工具来保存或者共享一些数据,可以使页面不刷新,不发送请求,也可以获取到共享的状态数据。例如项目中多处会用到用户名,这种方式就恰到好处。

6 Cookie、localStorage、SessionStorage

这三类工具,都有一个共通点,他们不跨域,但是可以跨页面共享数据。cookie兼容性好,但使用起来需要写公共方法,不如另外2个使用简单。不过这些方法在前端公用工具包js-tool-big-js里,也都封装了便捷的方法,使用示例可参照这篇学习文档:获取浏览器参数、cookie、localStorage的存取的便捷方法学习

说到cookie跨域不跨域这个问题,它本身是不跨域的。但你可以在A页面的时候,在前后端交互中携带cookie,这样后端就可以获取到cookie信息。后端就可以指定往某个域下再写入cookie,这样B页面即便和A页面不在同一个域下,不也就得到这个cookie信息了嘛。这样是不是就得到了一个更多的跨域解决方案呢。

7 PostMessage

postMessage的宿主是window,可以在不同窗口下通信。比如我们常做的一些第三方登录,授权等场景需求,你肯定是需要将第三方的授权页面弹出来,放在自己的准备好的一个 window.open 弹框中,这样,等获取到第三方授权信息后,再通过window.postMessage()方法向本页面发送message信息,从而达到跨页面通信的效果。

这里说一下SharedWorker,SharedWorker 是一个可由多个窗口或标签页共享的 Web Worker,它可以在不同页面之间进行跨页面通信。通过 SharedWorker,多个页面可以通过 postMessage 进行双向通信,并共享数据和执行操作。

8 IndexedDB

说到indexedDB,我觉得这真是一项创举。他是浏览器提供的一个客户端数据库,既然是数据库,就说明他希望比localStorage更进一步,存入更多的东西。

很多时候,其实我们用不到,因为普通浏览器的web项目,用户的缓存还免不了丢失呢,你还存,能存多少。但架不住前端页面有时候钻进了APP里,这样他就被保护起来了吧,你就可以安心的存了。

但前端数据库,始终还是一个临时性的东西,最好还是让后端去存吧。

9 共引JS文件

说了这么多复杂用法的东西,你是不是忘记了我们javascript第一课学到的东西呢。也是最基本的用法。不就是个跨页面通信嘛,我写一个公共变量,然后让所有页面都引入这个JS文件,我就不信,你再跨页面,你还获取不到这个公共变量吗?谁说通信就必须来回交互了,你跟女朋友打电话,女朋友嗓子疼,你说话,他不说话,他就听着,难道不行?咋地,这种打电话难道不叫通信?面试那么多,有几个HR在面完了,会给你反馈结果的。

10 小结

本文一共说了9种方式的跨页面通信,而这9种里面有的又包含了小类方案,你可以自己总结一下,结合自己的项目案例说的更真实有经验一些,这在面试的时候就是自己的方案了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HKT x Microsoft 365 Copilot 助力企业提升工作效率

人工智能(AI)在工作场所的应用和整合日益增多,更成为塑造未来工作模式的革新趋势之一。AI不仅简化和改进了许多任务和流程,还为协作、沟通和创新开辟了新的机遇。不久前,微软新推出AI驱动的生成式生产力工具— Microso…

【Elasticsearch运维系列】Elasticsearch7.12.1启动指定版本JDK:你学废了吗?

一、背景 一套生ES集群,版本为7.12.1,近期频繁告警,频繁出现索引分片异常,索引状态异常,导致应用无法正常写入ES,另外,也经常出现节点掉问题。通过分析相关ES日志,显示和当前JAVA G…

【LAMMPS学习】八、基础知识(5.8)LAMMPS 中热化 Drude 振荡器教程

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

DDD架构学习

文章目录 领域建模事件风暴四色建模法 DDD名称解析领域子域核心域通用域支撑域限界上下文战术设计实体值对象聚合和聚合根工厂资源库领域服务领域事件 DDD代码的分层名词解析实体值对象聚合根领域服务领域事件 VO&DTO&DO&PO博客 领域建模 领域驱动设计的核心在于领…

【设计模式】——专栏概述

💻博主现有专栏: C51单片机(STC89C516),c语言,c,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux&#xf…

智慧校园与学生成长

当时间追溯到2018年,技术的前进已经逾越了人们的幻想,很多先进的设备也投入到了大众的日子中去,为信息化的推进带来了全新的改动。与此同时,校园也不甘落后,将教育与信息化得到一个完美的融合,为学生的未来…

想要买到心仪的旋转式孔板流量计吗?

选择旋转式孔板流量计可不能云里雾里的乱选择呀,煤矿对产品质量要求很严格的。所以我们要先了解产品的再决定才是对的选择。 旋转式孔板流量计技术参数【1--5--9】 规格:DN15~DN1000 孔径比(βd/D):β0.2—0&#xff…

Web前端三大主流框架是什么?

Web前端开发领域的三大主流框架分别是Angular、React和Vue.js。它们在Web开发领域中占据着重要的地位,各自拥有独特的特点和优势。 Angular Angular是一个由Google开发的前端框架,最初版本称为AngularJS,后来升级为Angular。它是一个完整的…

MySQL迁移data目录

MYSQL数据库有时候安装好了,想移动一下data目录,但是又不想重新安装一下,就只能想办法把这个目录迁移一下。 先找到my.ini配置文件,可以全局搜索一下, 找到之后,把这个地方修改一下,就把data目…

IP协议全解析:网络层通信的基石

⭐小白苦学IT的博客主页⭐ ⭐初学者必看:Linux操作系统入门⭐ ⭐代码仓库:Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统❤ 前言 在数字化时代的浪潮中,网络通信无处不在,它连接着世界的每一个角落,承载着信息的高…

评估Transitions

Stateflow使用图表中的转换从一种OR状态移动到另一种OR状态。对于图表执行的输入和执行工作流,Stateflow评估转换以确定它们是否有效。有效转换是条件标签为true且路径以状态结束的转换。如果转换有效,则Stateflow将从源状态退出并进入目标状态。 评估Transitions的工作流 T…

Java八股文3

3.垃圾回收 1.对象什么时候可以被垃圾器回收 1.垃圾回收的概念 为了让程序员更专注于代码的实现,而不用过多的考虑内存释放的问题,所以, 在Java语言中,有了自动的垃圾回收机制,也就是我们熟悉的GC(Garbage Collection)…

代码随想录算法训练营第四十二天| 01背包问题理论基础,416. 分割等和子集

理论基础: 带你学透0-1背包问题!| 关于背包问题,你不清楚的地方,这里都讲了!| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili很多同学对背包问题的理解程度都处于一种黑盒的状态,及时这道题目在力…

WebDAV之π-Disk派盘 + 溯记

“溯记”是一款提供丰富功能的时间轴日记应用,旨在帮助用户记录生活中的碎片化想法和事件,并提供便捷的回顾和管理功能。根据您提供的描述,这款应用具有丰富的特性,包括时间轴浏览、多媒体支持、实时存储、模糊搜索、日历视图、故事关联和随机回溯。这些功能将帮助用户记录…

C++奇迹之旅:string类对象的容量操作

文章目录 📝 string类的常用接口🌉 string类对象的容量操作🌠size🌠length🌠capacity🌠clear🌠empty🌠reserve🌉resize 🚩总结 📝 string类的常用…

vue导出大量数据的表格方法

我目前的项目导出4万7数据没问题 先安装 npm install -S file-saver npm install xlsx0.16.0 -S npm install -D script-loader 我使用的版本是"file-saver": “^2.0.5”, “xlsx”: “^0.16.0” 新建Export2Excel.js //Export2Excel.js /* eslint-disable */ requ…

直播产品实习生实习报告,笔灵AI生成模版分享

实习体验报告:直播产品实习生 如果有不同的岗位需要写的话可以去笔灵生成一下 网址:https://ibiling.cn/scene/inex?fromcsdnsx 一、实习背景我是XXX,作为一名直播产品实习生,我在XX公司进行了为期X个月的实习。在这段时间里&…

bfs之八数码

文章目录 八数码解题思路图解举例算法思路 代码CPP代码Java代码 八数码 在一个 33的网格中,1∼8这 8个数字和一个 x 恰好不重不漏地分布在这 33 的网格中。 例如: 1 2 3 x 4 6 7 5 8在游戏过程中,可以把 x 与其上、下、左、右四个方向之一…

【微机原理及接口技术】8086/8088系统时序和微机总线

【微机原理及接口技术】8086/8088系统时序和微机总线 文章目录 【微机原理及接口技术】8086/8088系统时序和微机总线前言一、8086/8088引脚信号和工作模式1.8088 的两种组态模式2.最小组态的引脚信号3.最小组态的总线形成4.最大组态的总线形成 二、8086/8088典型时序1.三种周期…

【工具】Office/WPS 插件|AI 赋能自动化生成 PPT 插件测评 —— 必优科技 ChatPPT

本文参加百度的有奖征文活动,更主要的也是借此机会去体验一下 AI 生成 PPT 的产品的现状,因此本文是设身处地从用户的角度去体验、使用这个产品,并反馈最真实的建议和意见,除了明确该产品的优点之外,也发现了不少缺陷和…