实际开发中,通过iframe跨域传递数据

实际开发中,通过iframe跨域传递数据

业务背景

基于先前的独立的两个或者多个子系统,开发一个具有单点登录的门户系统, 取消子系统的登录逻辑, 通过门户的单点登录访问所有子系统。

核心: 跨域传递token令牌

源头传递token

ts 复制代码
/**
* data: 传递的动态数据,例如token
* origin: 子系统的访问url
* systemName?: 子系统名字
*/
const postMessageByIframe = (data: any, origin: string, systemName?: string) => {
	if (!origin) return
	const iframe = document.createElement('iframe')
	iframe.style.display = 'none'
	iframe.src = origin
	document.body.append(iframe)

	iframe.onload = () => {
		iframe.contentWindow?.postMessage({ token: data, systemName }, '*')

		setTimeout(() => {
			window.location.href = origin
			// window.open(origin)
		}, 50)

		setTimeout(() => {
			iframe.remove()
		}, 5000)
	}
}

子系统接收跨域传来的数据:token

在App.vue里面

ts 复制代码
window.addEventListener('message', (event) => {
  const { data } = event;
  // 只接受信任源列表发来的数据
  saveToken(data.token);
  localStorage.setItem('currentNavPoi', data.systemName);
});

注意:

使用iframe时, 请关闭浏览器上的 vue、react的开发中工具, 例如 dev-tools, 不然window.addEventListener获取不到传递过来的值

使用iframe时, 请关闭浏览器上的 vue、react的开发中工具, 例如 dev-tools, 不然window.addEventListener获取不到传递过来的值

使用iframe时, 请关闭浏览器上的 vue、react的开发中工具, 例如 dev-tools, 不然window.addEventListener获取不到传递过来的值

相关推荐
JUNAI_Strive_ving7 分钟前
番茄小说逆向爬取
javascript·python
看到请催我学习16 分钟前
如何实现两个标签页之间的通信
javascript·css·typescript·node.js·html5
twins352035 分钟前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
qiyi.sky1 小时前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~1 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
哪 吒1 小时前
华为OD机试 - 几何平均值最大子数(Python/JS/C/C++ 2024 E卷 200分)
javascript·python·华为od
安冬的码畜日常1 小时前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
l1x1n02 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
Q_w77422 小时前
一个真实可用的登录界面!
javascript·mysql·php·html5·网站登录
昨天;明天。今天。2 小时前
案例-任务清单
前端·javascript·css