超链接打开新页签传递参数

背景

有一个需求,网站1点击按钮后跳转到页面2,页面1和页面2的域名不同,并且需要传递参数A,再

那么最简单的就是 在url上带参数A 比如 https://xx.com?A=xxx ,从url上的queryParam上就能获取参数

但很可惜,参数A由于是敏感数据,不能通过get请求传递,否则每个传输层(Nginx、Tomcat)都会存留该数据。

首先就找不通过url传递参数的方式,那么有的同学就会问,为什么不能把参数放请求体里,因为get方式实际也是支持请求体传参的,但他是打开链接啊!

方案一: postMessage

window.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为 https),端口号(443 为 https 的默认值),以及主机 (两个页面的模数 Document.domain设置为相同的值) 时,这两个脚本才能相互通信。window.postMessage() 方法提供了一种受控机制来规避此限制,只要正确的使用,这种方法就很安全。

其实之前用于iframe父子页面的通信传参,纯前端操作,只要定义好发送的来源和接收origin,则可安全传输参数。

页面1:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Page 1</title>
</head><body><!-- 创建一个 a 链接,点击时打开新的标签页 --><a id="openPage2" href="page2.html" target="_blank">Open Page 2</a><script>document.getElementById('openPage2').addEventListener('click', function (e) {// 阻止默认的链接跳转行为e.preventDefault();// 打开新的标签页const newWindow = window.open('page2.html', '_blank');if (newWindow) {// 监听新窗口的加载完成事件newWindow.onload = function () {// 定义要传递的参数const data = { a: 'xx' };// 使用 postMessage 方法将参数传递给新窗口newWindow.postMessage(data, '*');};}});</script>
</body></html>

页面2

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Page 2</title>
</head><body><h1>Page 2</h1><script>// 监听 message 事件,接收从页面 1 传递过来的参数window.addEventListener('message', function (event) {// 检查消息来源,确保是我们期望的消息if (event.origin === window.origin) {const data = event.data;console.log('Received data:', data);// 可以在这里处理接收到的参数if (data.a) {console.log('Value of a:', data.a);}}});</script>
</body></html>

综上,原页面需要获取下一个tab页的window对象,并且通过这个window对象发起postmessage方法发送参数。但是打开页面2时,页面2不一定执行完监听逻辑。

关于安全性及兼容性参考: window.postMessage - Web API | MDN

所以逻辑优化成

页面2如何获取到页面1的window对象呢,就使用window.opener即可

方案二:hash

安全的本质是使用了get请求,参数层层记录,如果将参数放到#后,及hash则浏览器会识别为页面锚点,仅给页面使用,就不会传递到服务器上。

即 https://xx.com#A=xx 使用location.hash 获取参数。

最终选了方案二

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

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

相关文章

【入门级篇】保姆级教程:零基础实现DeepSeek本地部署的两种终极方案(附避坑指南)

关于DeepSeek的革命性冲击的看法 大家好,前阵子在忙着DeepSeek的一些本地化部署和一些开发工具,工作流的工作,最近刚好有空,借助零散时间给大家分享下DeepSeek的一些应用,为此我写了一篇专栏,从浅入深的介绍DeepSeek的一些技术,应用,以及DeepSeek的论文分析。 首先我们…

nginx简单命令启动,关闭等

启动命令 #启动nginx start nginx重启命令 比如修改了配置文件&#xff0c;用这个命令重启生效 #重启nginx nginx -s reload3&#xff0c;查看端口占用 #查看端口占用 netstat -aon4&#xff0c;关闭nginx 如果使用cmd命令窗口启动nginx&#xff0c; 关闭cmd窗口是不能…

强化学习(赵世钰版)-学习笔记(2.状态值与贝尔曼方程)

这是本课程的第二章&#xff0c;讲述状态值与贝尔曼&#xff08;Bellman&#xff09;方程的相关概念。 回报值&#xff08;Return&#xff09;的重要性&#xff1a;计算回报值可以用于评估各策略的优劣&#xff0c;可以量化分析。 回报值的计算方法&#xff1a;设Vi为某策略下起…

STM32——定时器

定时器有 捕获脉冲宽度、计算PWM占空比、输出PWM波形以及编码器计数等各种功能。 定时器又能分为 基本定时器&#xff1a;TIM6和TIM7通用定时器&#xff1a;TIM2、TIM3、TIM4和TIM5高级定时器&#xff1a;TIM1、TIM8 一、计数和分频 每当一个方波信号的上升沿经过寄存器&…

链表双指针经典习题

链表双指针经典习题 链表的分解删除排序链表中的重复元素2&#xff08;重复元素彻底删除&#xff09;方法一&#xff1a;分解链表方式二&#xff1a;快慢指针递归解法 链表的合并丑数2有序矩阵中第k小的元素查找和最小的k对数字两数相加两数相加2 回文单链表回文链表 迭代和递归…

2025年主流原型工具测评:墨刀、Axure、Figma、Sketch

2025年主流原型工具测评&#xff1a;墨刀、Axure、Figma、Sketch 要说2025年国内产品经理使用的主流原型设计工具&#xff0c;当然是墨刀、Axure、Figma和Sketch了&#xff0c;但是很多刚入行的产品经理不了解自己适合哪些工具&#xff0c;本文将从核心优势、局限短板、协作能…

RISC-V双核锁步高性能抗辐照MCU芯片技术解析与应用

1. 概念名词解析 安全冗余设计 AS32X601系列通过硬件ECC&#xff08;Error Correction Code&#xff09;保护存储系统&#xff08;内置SRAM、Flash等&#xff09;&#xff0c;并在DMA模块中提供“可选的双核锁步安全备份”机制&#xff0c;支持高可靠性场景下的数据传输容错。…

2024爱分析·央国企数字化应用实践报告

报告综述“央国企KPI”驱动央国企数字化投入稳中有进 在民营企业推进数字化转型的过程中&#xff0c;其核心驱动力往往聚焦于降本增效与开源节流。然而&#xff0c;对于央国企而言&#xff0c;尽管降本增效等因素亦在其考量范围之内&#xff0c;但其推进数字化转型的根本动因则…

Kubernetes 的正式安装

1.基础的网络结构说明 软件路由器 ikuai 当然同一个仅主机模式 相当于在 同一个我们所谓的广播域内 所以相当于它们的几张网卡 是被连接起来的 为了防止出现问题 我们可以把第二块网卡临时关闭一下 2.准备路由器 ikuai 爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com)…

OpenCV计算摄影学(18)平滑图像中的纹理区域同时保留边缘信息函数textureFlattening()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::textureFlattening 是 OpenCV 中用于图像处理的一个函数&#xff0c;旨在平滑图像中的纹理区域&#xff0c;同时保留边缘信息。该技术特别适…

关于eMMC存储器在各种情况下的分区编号和名字的问题

前言 关于eMMC的分区编号和名字问题&#xff0c;表面上看是个小问题&#xff0c;事实上在程序开发中&#xff0c;没有小问题&#xff0c;一个变量值设置不对&#xff0c;可能整个程序或系统就跑不起来。eMMC的分区编号和名字问题就是一个事关嵌入式系统烧写和正常启动的关键问…

nuxt2-vue2:通过编程方式调用对话框 el-dialog

一、背景 1.1、需求 项目&#xff1a;nuxt2 vue2 希望通过编程方式的调用打开对话框&#xff0c;展现我们想要的内容。 1.2、效果 二、代码 2.1、插件 plugins/dialog.js import Vue from vue; import { Dialog } from element-ui; // 本文使用了Dialog组件&#xff0c;…

记录一些面试遇到的问题

重载和重写的区别 重载是overload&#xff0c;覆盖是override 重载属于编译时多态&#xff0c;覆盖属于运行时多态 运行时多态和编译时多态 运行时多态指的是在运行的时候才知道要调用哪一个函数&#xff0c;编译时多态是指在编译的时候就知道调用哪一个函数。 运行时多态…

【为什么会有 map、weakmap 类型?】

为什么会有 map、weakmap 类型? 传统对象的局限性催生 Map‌1. 键类型单一性‌2. 有序性与迭代支持‌3. 性能优化场景‌ 内存管理需求催生 WeakMap‌1.弱引用机制‌2. 私有数据存储‌3. 规避循环引用问题‌ 总结 传统对象的局限性催生 Map‌ 1. 键类型单一性‌ 传统对象&…

Django下防御Race Condition

目录 漏洞原因 环境搭建 复现 A.无锁无事务时的竞争攻击 B.无锁有事务时的竞争攻击 防御 A.悲观锁加事务防御 B.乐观锁加事务防御 总结 漏洞原因 Race Condition 发生在多个执行实体&#xff08;如线程、进程&#xff09;同时访问共享资源时&#xff0c;由于执行顺序…

课题推荐——无人机在UWB环境下基于TOA/TDOA/AOA的室内定位与精度对比

随着无人机在工业检测、仓储物流、应急救援等室内场景的广泛应用&#xff0c;高精度室内定位技术成为关键支撑。超宽带&#xff08;UWB&#xff09;技术凭借其高时间分辨率、强抗多径能力等优势&#xff0c;成为室内定位的主流方案。然而&#xff0c;不同的定位方法&#xff08…

c语言笔记 fgets

fgets 是 C语言中的一个标准输入输出函数&#xff0c;用于从输入流&#xff08;如文件、键盘等&#xff09;读取一行字符串。它的名字来源于 "File GeT Sring"&#xff0c;表示从文件中读取字符串。 fgets 的函数原型如下&#xff1a; char *fgets(char *str, int n,…

【含文档+PPT+源码】基于微信小程序的农产品自主供销商城系统

项目介绍 本课程演示的是一款基于微信小程序的农产品自主供销商城系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3…

ReAct论文阅读笔记总结

ReAct&#xff1a;Synergizing Reasoning and Acting in Language Models 背景 最近的研究结果暗示了在自主系统中结合语言推理与交互决策的可能性。 一方面&#xff0c;经过适当Prompt的大型语言模型&#xff08;LLMs&#xff09;已经展示了在算术、常识和符号推理任务中通…

20250306-笔记-精读class CVRPEnv:step(self, selected)

文章目录 前言一、if self.time_step<4:控制时间步的递增判断是否在配送中心特定时间步的操作更新更新当前节点和已选择节点列表更新需求和负载更新访问标记更新负无穷掩码更新步骤状态&#xff0c;将更新后的状态同步到 self.step_state 二、使用步骤总结 前言 class CVRP…