在.vue中引入部署到服务器上的另一个项目的.html静态文件,并实时传递token,和刷新页面

文章目录

概要

在.vue中引入部署到服务器上的另一个项目的.html静态文件,并实时传递token,和刷新页面。

实现流程

步骤:
1、在.vue文件中通过iframe标签引入.html文件

<iframe
      class="ifram_careprov"
      id="careprov_query"
      name="careprov_query"
      :src="careprovUrl"
      width="100%"
      height="100%"
      ref="careprovIframeDom"
    ></iframe>

2、在.vue文件的script中监听token变化并将token作为url的参数实时传到.html文件中。【传递参数也可以通过postmessage传递,但项目层级可能有多层,因此在.html文件中监听不到传过来的参数。】
在这里插入图片描述
3、在.html文件中所引入的.js文件中对.vue传过来的token参数进行解析,就可以实时获得最新的token。

var token = window.location.href.split('token=')[1]
var oldToken = JSON.parse(sessionStorage.getItem("pro__access-token")).value
sessionStorage.setItem("pro__access-token",JSON.stringify({value:token}))
sessionStorage.setItem("pro__refresh-token",JSON.stringify({value:token}))

4、难点:当vue项目提示token过期后会自动跳转到登录页,再次登录后由于路由链接到的页面是iframe引入的外部资源时,页面仍然会有token过期的弹窗,主要是因为浏览器缓存的问题,因此必须通过location.reload()强制刷新页面。实现如下:
在.html文件引入的.js中,通过判断过期前和过期登录后的token是否一致来刷新页面,

var token = window.location.href.split('token=')[1]
var oldToken = JSON.parse(sessionStorage.getItem("pro__access-token")).value
sessionStorage.setItem("pro__access-token",JSON.stringify({value:token}))
sessionStorage.setItem("pro__refresh-token",JSON.stringify({value:token}))
if (oldToken != token && oldToken != undefined) {
    location.reload()
}

总结:vue引入外部html文件有两大难点。1、涉及token过期时,如何实时传递token到html文件中,实现数据交互。2、token过期后,页面如何实现reload,处理不好可能会导致页面刷新死循环【本文是通过判断前后token来解决页面刷新问题的】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值