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

news2024/11/25 20:19:32

前端开发逃避不开跨页面通信这项工作,跨页面通信,就好比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.coloradmin.cn/o/1652410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图搜索算法 - 拓扑排序

相关文章: 数据结构–图的概念 图搜索算法 - 深度优先搜索法(DFS) 图搜索算法 - 广度优先搜索法(BFS) 拓扑排序 概念 几乎所有的工程都可分为若干个称作活动的子工程,而这些子工程之间,通常受…

Figma 高效技巧:设计系统中的图标嵌套

Figma 高效技巧:设计系统中的图标嵌套 在设计中,图标起着不可或缺的作用。一套便捷易用的图标嵌套方法可以有效提高设计效率。 分享一下我在图标嵌套上走过的弯路和经验教训。我的图标嵌套可以分三个阶段: 第一阶段:建立图标库 一…

洛谷官方提单——【入门4】数组——python

洛谷官方提单——【入门4】数组 小鱼比可爱题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示代码 小鱼的数字游戏题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示数据规模与约定 代码 【深基5.例3】冰雹猜想题目描述输入格式输出格式样例 #1样例输入 …

24深圳杯ABCD成品论文47页+各小问代码+图表

A题多个火箭残骸的准确定位: A题已经更新完22页完整版论文+高清无水印照片+Python(MATLAB)代码简单麦麦https://www.jdmm.cc/file/2710544/ 问题1:单个残骸的音爆位置确定 建模思路: 1. 声波传…

Codeforces Round 942 (Div.1) (Div. 2) 2A~2D

2A.Contest Proposal(枚举) 题意: 一个竞赛包含 n n n个问题,第 i i i个问题的难度预计最多为 b i b_i bi​。现在已经有 n n n个问题提案,第 i i i个问题的难度为 a i a_i ai​。最初, a 1 , a 2 , … ,…

为什么现在越来越多的人会选择陪诊

现在越来越多的人选择陪诊的原因有多方面。 首先,随着人口老龄化、医疗资源分配不均等问题的日益突出,许多老年人和病患在就医过程中面临诸多困难,如挂号、排队、取药等繁琐的手续和流程。陪诊服务能够为他们提供极大的便利,帮助…

spring模块(六)spring监听器(2)@EventListener

一、介绍 监听器的简化写法 二、原理 三、使用 Slf4j Component public class MyTask {EventListenerpublic void onApplicationEvent(ApplicationEvent event) {if (event instanceof ContextRefreshedEvent) {log.info("监听到 ContextRefreshedEvent...");}if…

[图解]DDD架构好简单我学会了-学会也没啥用

1 00:00:03,720 --> 00:00:05,920 内部共有,首先是内部的 2 00:00:08,150 --> 00:00:09,220 所以不能说什么 3 00:00:09,630 --> 00:00:10,730 不能跟外部连在一起 4 00:00:10,740 --> 00:00:15,280 比如说,功能架构,可以吗 …

使用Linux命令时,前面加sudo和不加有什么区别?

在使用cmake命令编译时,前面加上sudo和不加主要有以下区别: 权限: 使用sudo:当您在命令前加上sudo时,表示您以超级用户的权限执行该命令。这通常用于需要访问受限制的系统文件或执行需要更高权限的操作。不使用sudo&am…

Swift 字符串和字符

字符串和字符 一、字符串字面量1、多行字符串字面量2、字符串字面量的特殊字符3、扩展字符串分隔符 二、初始化空字符串三、字符串可变性四、字符串是值类型五、使用字符六、连接字符串和字符七、字符串插值八、Unicode1、Unicode 标量2、可扩展的字形群集 九、计算字符数量十、…

『ZJUBCA Collaboration』WTF Academy 赞助支持

非常荣幸宣布,浙江大学区块链协会收到WTF Academy的赞助与支持,未来将共同开展更多深度合作。 WTF Academy是开发者的Web3开源大学,旨在通过开源教育让100,000名开发者进入到Web3。截止目前,WTF开源教程在GitHub收获超15,000 ⭐&a…

五一假期Llama 3之魔改不完全攻略(Part 2)

2024年4月18日,Meta AI 正式宣布推出 Llama 3,这标志着开源大型语言模型(LLM)领域的又一重大进步。如同一颗重磅炸弹, Llama 3 以其卓越的性能和广泛的应用前景,预示着 AI 技术的新时代。 目前开源的是Lla…

H62410A dcdc 24V30V36V48V60V72V100V降压12V/5V1A 恒压电源芯片IC

DCDC 24V-30V-36V-48V-60V-72V-100V降压至12V/5V 1A恒压电源芯片IC的工作原理主要基于开关调节和PWM(脉冲宽度调制)控制。 首先,芯片内部通常包含一个高速开关,通常是一个MOSFET(金属氧化物半导体场效应晶体管&#x…

MySQL·内置函数

目录 函数 日期函数 案例1:创建一张表,记录生日 案例2:创建一个留言表 案例3:请查询在2分钟内发布的帖子 字符串函数 案例1: 获取emp表的ename列的字符集 案例2:要求显示exam_result表中的信息&am…

XShell 无法连上 VirtualBox的系统问题排查

之前一直都是可以正常使用的,过了一段时间之后,我发现无法使用XShell连接我之前安装的Centos 系统了。 我在centos中ping windows的IP地址,是可以 ping 通的, 百度也可以 ping 通,但是在 windows 中 ping centos的IP地…

湘潭大学数据库作业题完整答案

作业一: 考虑如下所示的关系数据库。这些关系上适当的主码是什么? 职工(姓名,街道,城市) 工作(姓名,公司名,工资) 公司(公司名,城市&a…

【时序大模型总结】学习记录(1)

1.TimeGPT-1 思路:在来自不同领域的大量数据上训练模型,然后对未见过的数据产生零样本的推断。 作者对TimeGPT进行了超过1000亿个数据点的训练,这些数据点都来自开源的时间序列数据。该数据集涵盖了广泛的领域,从金融、经济和天气…

卧式负压排渣放水器为煤矿添彩

拥有自己的一片小天地,让每个角落都充满生活的色彩。快来找到心仪的产品,为煤矿添彩! 一、排渣放水器的概述: 负压自动排渣放水器的型号为FYPZ,FY指负压放水器中的负压,PZ指自动排渣,FYPZ的全称…

初学C++——C++基础、变量、字面量、常量、数据类型、类型转换、变量命名规则、开发环境配置

文章目录 简介C 语言的特性C 开发环境配置C 变量,字面量和常量C 变量变量命名规则 C 字面量C 常量 C 数据类型C 基本数据类型派生数据类型 C 类型转换隐式类型转换C 显式转换 简介 C 是一种静态类型的,自由形式的(通常)编译的&…

css浮动(float)

浮动(Float) 在CSS中是一个重要的布局技术,它允许元素向左或向右移动,其周围的元素会重新排列。当一个元素被设置为浮动时,它会脱离正常的文档流,这意味着它不再占据原本在文档流中的空间,而会尽…