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

相关推荐
有位神秘人14 小时前
Android中Notification的使用详解
android·java·javascript
phltxy14 小时前
Vue 核心特性实战指南:指令、样式绑定、计算属性与侦听器
前端·javascript·vue.js
Byron070715 小时前
Vue 中使用 Tiptap 富文本编辑器的完整指南
前端·javascript·vue.js
css趣多多16 小时前
地图快速上手
前端
zhengfei61116 小时前
面向攻击性安全专业人员的一体化浏览器扩展程序[特殊字符]
前端·chrome·safari
码丁_11716 小时前
为什么前端需要做优化?
前端
Mr Xu_16 小时前
告别硬编码:前端项目中配置驱动的实战优化指南
前端·javascript·数据结构
Byron070717 小时前
从 0 到 1 搭建 Vue 前端工程化体系:提效、提质、降本实战落地
前端·javascript·vue.js
哆啦code梦17 小时前
前端存储三剑客:localStorage、sessionStorage与Cookie解析
前端·前端存储
徐小夕@趣谈前端17 小时前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6