问题描述

业务需求,点击文件列表项,进入内嵌 iframe 的详情页预览pdf,火狐浏览器点击页面按钮或者浏览器返回按钮两次才能退回到列表页。页面按钮返回功能通过$router.go(-1)实现。

问题原因

浏览器机制的原因,在 iframe 导航变化后手动点击浏览器的后退按钮也依然只是后退 iframe 中的导航。

<iframe ref="iframe" :src="pdfUrl"></iframe>

本项目中iframe,在pdfUrl为空时已经渲染,pdfUrl有值后相当于替换了iframe的src,返回功能,go(-1)类似window.history.go(-1) 会先回退 iframe 的内容。

解决方案

  • 方案1:当pdfUrl有值时再渲染页面
<iframe ref="iframe" :src="pdfUrl" v-if="pdfUrl"></iframe>
  • 方案2:

不要修改 iframe.src,新建一个 iframe 元素并替换旧 iframe 元素,这样不会产生 history。直接 createElement,替换原来的 iframe。

参考

  • stackoverflow modify-iframe-src-without-entry-to-history-object
  • vue-router issues#1917
  • https://www.jianshu.com/p/d88148184b79
  • https://www.cnblogs.com/yuxiaole/p/9771858.html
Logo

前往低代码交流专区

更多推荐