由iframe引起的无法返回上一页的问题

问题描述

使用的框架: vue
页面里面嵌套了 iframe,
在设置iframe的src后,不知道为什么使用 router.back() 无法跳转到上一页,必须使用 router.go(-2) 才可以。但问题是有的时候用 router.go(-1) 可以,有的时候却不行。因为iframe里面的内容对于我来说是黑盒,在内部可能进行了重定向操作而我不知道。

解决方法

1.使用router.push()
这个操作会导致上一页的router.back() 又回到本页了,
2.使用router.replace()
这个操作虽然不会添加历史路由记录,但是多出来的历史记录也不会被删除,导致在上一页用router.back()的时候会无法出去
3.定时任务 + 路由判断,我弄了半天实在没撤,才出此下策

const router = useRouter();
const route = useRoute();
// 这个是iframe的url
const srcUrl = ref("")
const myUrl = route.path + ""
// 回退函数
function back() {
    router.go(-1)
    setTimeout(() => {
        let url = route.path + ""
        // 检测当前页的路由是否还是原来的,如果是原来的则重新回退
        if (url === myUrl) {
            back()
        }
    }, 20)
}
srcUrl.value = route.query.url + ""
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
iframe返回一页面时,如果不想刷新上一页面,可以使用以下方法: 1. 使用 history.pushState() 方法 在 iframe返回一页面时,可以使用 JavaScript 的 history.pushState() 方法修改浏览器历史记录,从而避免刷新上一页面。例如,你可以在子页面中添加以下代码: ```javascript history.pushState(null, null, document.URL); window.addEventListener('popstate', function () { history.pushState(null, null, document.URL); }); ``` 上述代码会在子页面中执行,它会在浏览器历史记录中添加一个新的状态,并且监听 popstate 事件,当用户点击浏览器的后退按钮时,再次调用 pushState() 方法,从而保持历史记录不变。这样就可以实现在 iframe返回一页面时不刷新上一页面的效果。 2. 使用 session storage 另一种方法是使用 session storage,在子页面中保存一个标识符,当返回一页面时,检查标识符是否存在,如果存在则不刷新上一页面。例如: 在子页面中添加以下代码: ```javascript sessionStorage.setItem('noRefresh', '1'); ``` 在父页面中添加以下代码: ```javascript window.addEventListener('popstate', function () { var noRefresh = sessionStorage.getItem('noRefresh'); if (noRefresh === '1') { sessionStorage.removeItem('noRefresh'); return; } location.reload(); }); ``` 上述代码会在子页面中设置 sessionStorage,当返回一页面时,父页面会检查 sessionStorage 中是否存在标识符,如果存在则不刷新页面,否则刷新页面。这样就可以实现在 iframe返回一页面时不刷新上一页面的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值