实际开发中,通过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获取不到传递过来的值

相关推荐
昔人'6 分钟前
`corepack` 安装pnpm
前端·pnpm·node·corepack
萌萌哒草头将军9 分钟前
pnpm + monorepo 才是 AI 协同开发的最佳方案!🚀🚀🚀
前端·react.js·ai编程
hboot1 小时前
💪别再迷茫!一份让你彻底掌控 TypeScript 类型系统的终极指南
前端·typescript
GISer_Jing1 小时前
深入拆解Taro框架多端适配原理
前端·javascript·taro
毕设源码-邱学长1 小时前
【开题答辩全过程】以 基于VUE的藏品管理系统的设计与实现为例,包含答辩的问题和答案
前端·javascript·vue.js
San30.2 小时前
深入理解 JavaScript:手写 `instanceof` 及其背后的原型链原理
开发语言·javascript·ecmascript
北冥有一鲲2 小时前
LangChain.js:RAG 深度解析与全栈实践
开发语言·javascript·langchain
用户28907942162712 小时前
Spec-Kit应用指南
前端
酸菜土狗3 小时前
🔥 手写 Vue 自定义指令:实现内容区拖拽调整大小(超实用)
前端
ohyeah3 小时前
深入理解 React Hooks:useState 与 useEffect 的核心原理与最佳实践
前端·react.js