【 HTML 及浏览器 】前端跨页面通信

前端跨页面通信:连接分散界面的纽带

在构建复杂的前端应用时,我们常常需要在不同的页面之间进行数据通信。无论是同源页面还是非同源页面,通信机制都是实现多页面数据同步和交互的关键。本文将探讨各种前端跨页面通信的方法,并提供最佳实践指南。

1. 本地存储机制(LocalStorage/SessionStorage)

特点

  • 同源策略:只能在相同的源(协议、域名和端口)之间共享数据。
  • 简单易用:API简单直观,容易上手。
  • 存储限制:通常有5MB的存储限制。

实现方式

  1. 页面A存储数据:
localStorage.setItem('key', 'value');
  1. 页面B监听存储事件:
window.addEventListener('storage', function(event) {if (event.key === 'key') {console.log('New Value: ' + event.newValue);}
});

最佳实践

  • 使用封装好的函数来处理复杂数据结构的序列化和反序列化。
  • 适合非敏感数据的存储,因为数据存储在本地。

2. Cookie

特点

  • 跨域共享:可以配置跨域共享Cookie。
  • 限制多:每个cookie大小限制在4KB左右,且每个域下cookie的数量也有限制。

实现方式

  1. 页面A设置Cookie:
document.cookie = "key=value; path=/; domain=yourdomain.com";
  1. 页面B读取Cookie:
let value = document.cookie.replace(/(?:(?:^|.*;\s*)key\s*\=\s*([^;]*).*$)|^.*$/, "$1");

最佳实践

  • Cookie应用于需要服务器读取的少量数据的存储。
  • 注意安全性,对敏感数据进行加密处理。

3. WebSockets

特点

  • 全双工通信:允许同时进行双向通信。
  • 实时性:适合需要实时数据更新的应用。

实现方式

  1. 页面A和页面B都连接相同的WebSocket服务器:
let socket = new WebSocket('ws://yourwebsocketserver.com');
  1. 发送消息:
socket.send('Your message');
  1. 接收消息:
socket.onmessage = function(event) {console.log('New Message: ', event.data);
};

最佳实践

  • 适用于需要高实时性的通信场景,如在线游戏、聊天应用。
  • 保证WebSocket服务器稳定性和安全性。

4. Broadcast Channel API

特点

  • 同源页间通信:允许同一浏览器实例中的不同页面间通信。
  • 简单的API:API简单,易于理解和使用。

实现方式

  1. 页面A创建和发送消息:
let channel = new BroadcastChannel('channel_name');
channel.postMessage('Message from A');
  1. 页面B监听消息:
let channel = new BroadcastChannel('channel_name');
channel.onmessage = function(event) {console.log('Received Message: ', event.data);
};

最佳实践

  • 适合同源页面间的简单消息传递。
  • 需要考虑兼容性,不是所有浏览器都支持。

5. Window.postMessage

特点

  • 跨域安全通信:可用于不同源之间的窗口通信。
  • 安全性:可以通过originsource属性验证消息来源。

实现方式

  1. 页面A发送消息:
windowB.postMessage('Message', 'http://yourdomain.com');
  1. 页面B监听消息:
window.addEventListener('message', function(event) {if (event.origin !== 'http://yourdomain.com') return;console.log('Received Message: ', event.data);
});

最佳实践

  • 适用于iframe或打开的新窗口的父子通信。
  • 验证消息来源,确保通信安全。

结论

前端跨页面通信是多页面应用中不可或缺的部分。掌握不同的通信方式和最佳实践可以帮助开发者构建出既高效又安全的应用。在选择通信方式时,要考虑应用的具体需求,如同源策略、实时性、安全性、数据大小和存储方式等因素,并结合现代前端框架和库提供的抽象层,以保证企业级解决方案的稳定与可维护性。

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

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

相关文章

迷不迷糊?前后端、三层架构和MVC傻傻分不清

现在的项目都讲究前后端分离,那到底什么是前后端,前后端和以前的MVC以及三层架构啥关系呢?今天就这个问题展开一下,方面后面的学习,因为前面讲的jsp、servlet和javabean根据实例,基本上有一个框架的理解了&…

经纬恒润线控制动系统,新能源智能汽车的未来标配

随着汽车电动化、智能化的发展,制动系统迎来新一轮变革。在新能源车型尤其是新能源智能汽车中,智能底盘系统在底盘融合控制、整车安全方面重要性越来越高,线控制动属于智能底盘的重要部分,凭借着快速响应和精确执行的优势&#xf…

YOLOV9论文解读

代码:https://github.com/WongKinYiu/yolov9论文:https://arxiv.org/abs/2402.1361本文提出可编程梯度信息(PGI)和基于梯度路径规划的通用高效层聚合网络(GELAN),最终铸成YOLOv9目标检测全新工作!性能表现SOTA!在各个方…

PCL中的点云分割模型的部分常用参数含义

PCL中的SacModel类别常用参数含义 1、SACMODEL_PLANE2、SACMODEL_LINE(三维直线)3、SACMODEL_CIRCLE2D(二维圆)4、SACMODEL_CIRCLE3D(三维圆)5、SACMODEL_SPHERE(球)6、SACMODEL_CYL…

《数字图像处理(MATLAB版)》相关算法代码及其分析(2)

目录 1 将8连通边界转换为4连通边界 1.1 移除对角线转折 1.2 插入额外像素 2 将边界信息转换为二进制图像 2.1 函数定义 2.2 参数处理和验证 2.3 默认大小参数设置 2.4 根据参数调整边界位置 2.5 生成二进制图像 2.6 错误处理 3 对二值图像边界的跟踪和提取 3.1 函…

脑机接口技术的伦理道德挑战与应对策略

随着科技日新月异的发展,脑机接口(Brain-Computer Interface, BCI)技术逐渐从科幻走向现实,为医疗、教育、娱乐等领域带来了前所未有的可能性。然而,这一前沿技术的应用也引发了一系列深刻的伦理道德问题,亟…

Mybatis学习记录

Mybatis学习记录 1.快速开始示例1.1 什么是MyMyBatis?1.2 代码示例 2.基本使用2.1 #{}和${} 2.2 参数传入2.2.1 概念说明2.2.2 单个简单类型2.2.3 实体类型2.2.4 零散简单数据类型2.2.5 Map类型 2.3 返回值2.3.1 单个简单类型2.3.2 实体类型2.3.3 Map类型2.3.4 List…

项目管理-启动会启动及执行

下面我说开启动会注意事项及怎么执行启动会,我会分为以下三点阐述事情: 1、启动会会前 2、启动会会中 3、启动会会后 启动会会前 内部 1、确认好公司参会人员(项目团队核心人员、销售、售前、公司领导(按需)&#…

java 版本企业招标投标管理系统源码+功能描述+tbms+及时准确+全程电子化

功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查看所…

基于MVO优化的Bi-LSTM多输入回归预测(Matlab)多元宇宙算法优化长短期神经网络回归预测

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译&am…

keepAlive

router c.js const view (name) > () > import(/views/文件夹名/ name) export const c [ {path: /xxx,name: aaa,meta: {title: 哈哈哈,admin: true,keepAlive:true //加这个},component: view(xxx) }, ]adminMain.vue <keep-alive><router-view v-if"…

探索Java开发面试笔记:以听为目的,助力编程技术提升与面试准备

文章目录 一、制作背景介绍二、 Java开发面试笔记&#xff1a;为你的编程之路加速2.1 公众号主题和目标读者群体2.2 为什么面试笔记对于提高编程视野和技术至关重要2.3 親測效率 三、形式案例3.1 文章形式3.2 手机案例3.3 电脑案例 一、制作背景介绍 做公众号的背景&#xff1a…

【LeetCode:98. 验证二叉搜索树 + 递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Hive SQL 开发指南(一)数据类型及函数

在大数据领域&#xff0c;Hive SQL 是一种常用的查询语言&#xff0c;用于在 Hadoop上进行数据分析和处理。为了确保代码的可读性、维护性和性能&#xff0c;制定一套规范化的 Hive SQL 开发规范至关重要。本文将介绍 Hive SQL 的基础知识&#xff0c;并提供一些规范化的开发指…

拖延心理:揭秘人们拖沓背后的真相

拖延&#xff0c;是许多人都曾经历过的心理状态。当我们被任务所压迫&#xff0c;却又无法迅速展开行动时&#xff0c;不禁让人思索&#xff0c;这是否与我们对任务的热爱程度有关呢&#xff1f;或许正如题目所言&#xff0c;人所有的拖沓都代表着他并非真正热爱。 拖延心理的…

就业班 2401--3.1 Linux Day9--文件查找和压缩

一、文件查找与打包压缩 grep: 文件内容过滤 [rootqfedu.com ~]# grep root /etc/passwd #从/etc/passwd文件中过滤root字段 grep ^root root$ root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 查找命令 [rootqfedu.com ~]# which ls ali…

linux 下获取U盘路径

linux会将usb设备挂载在media下,逻辑就是先查看所有挂载,将挂载里面含有media的路径保存到一个文件里,再去文件里读取u盘路径 查找对应的shell 指令为 : cat /proc/mounts | cut -d -f 2 | grep \"media\" 该指令为先查找 所有挂载.然后将查找的第二个字段截取出…

【基于HTML5的网页设计及应用】——float实现页面布局

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

【软件设计师】常见的算法设计方法——迭代法

&#x1f413; 迭代法 什么是迭代法 迭代法&#xff0c;作为一种重要的算法思想&#xff0c;在计算机科学、数学以及其他多个领域中都有着广泛的应用。那么&#xff0c;什么是迭代法呢&#xff1f; 简单来说&#xff0c;迭代法是一种通过不断重复某个过程来逐步逼近问题解的方…

Java基础-运算符,表达式和语句

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、Java 运算符 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 条件运算符&#xff…