背景:由于项目中需要调用一个三方控件进行pdf/doc等文件预览但是该控件提供的下载文件文件名是乱码并且不支持解决这个问题,所以在本地增加了一个页面叫/view内容是一个iframe和一个下载按钮,通过地址栏携带参数并且将参数放在iframe的src中达到原先的预览按钮,下载按钮则是通过地址携带参数提供下载指定文件名功能
前提
- 这个页面在静态路由里不需要通过动态获取路由加载,可以直接访问到
- 全局路由卫士中增加了判断该页面无需获取用户信息等权限判断直接next进入
- 该预览页面没有任何接口调用,不存在调用接口导致token验证失败问题
- 项目已经正常了半年以上并且没有问题,最近才出现这个问题且没有修改到这部分的代码
现在出现的问题是个别用户的电脑上,不管是360还是谷歌还是火狐浏览器都会出现第一次window.open打开这个页面,地址栏可以看到地址为host/#/view?url=xxxxx变为host/再变成host/#/home回到首页,然后关闭这个新打开的页面后第二次点击预览按钮通过window.open打开同一个页面可以直接访问到host/#/view?url=xxx不会闪一下回到根路径
已经尝试过的方法有
- 把window.open改为创建a标签后click打开
- 把window.open的url从this.$router.resolve中获取href改为手动拼接host+'/#/view365?url=xxx
- 创建一个新的test.vue文件,中间没有任何内容,打开/#/test页面
- 在beforeEach中第一行就写上alert(to.path),正常页面点击后进入页面前就弹出来alert的弹窗了,但是点击这个预览后url从/view变到/再变到/home后才弹出来alert 相当于第一次预览打开/view页面都没触发beforeEach
- 在出问题的用户电脑上用原生文件测试a.html打开host/#/view?url=xxxxx这个预览地址不会回到根路径
求大家给点思路实在是想不出来还有什么可能导致发生这个问题的地方了。。
猜测改用
history
的路由模式可以解决这个问题。