iphone 上微信的“复制链接”功能复制出来的是修改前的链接
程序员文章站
2022-06-24 16:17:35
问题描述: 在 iOS 系统中,用微信打开了 A 页面的链接,然后由 A 页面进入 B 页面 在 B 页面打开微信右上角菜单,使用“复制链接”功能 最后粘贴出来的链接是 A 页面的链接 分析原因: 这个问题在微信 6.2 时代就已存在,GitHub 上有很多人到 weui 的主页提 issue ht ......
问题描述:
在 ios 系统中,用微信打开了 a 页面的链接,然后由 a 页面进入 b 页面
在 b 页面打开微信右上角菜单,使用“复制链接”功能
最后粘贴出来的链接是 a 页面的链接
分析原因:
这个问题在微信 6.2 时代就已存在,github 上有很多人到 weui 的主页提 issue
https://github.com/tencent/weui/issues/125
这两个 issue 给了我很大的启发
出现这个问题的原因,是因为微信内置浏览器对 history 的支持不够全面
所以对于开启了 history mode 的 spa 应用,只会保存第一条 url
只要每个页面都刷新一次,严格的说不能是简单的刷新,需要用 location.replace 刷新页面,就能解决该问题
解决方案:
在使用了 vue-router 的项目中,添加路由守卫
在每次跳转结束的时候,给 url 添加一个随机参数 wxr,然后执行 location.replace
当 url 已经有了 wxr 这个参数,就直接加载页面,避免无限刷新
function wxrefresh (to) { // 在链接后加一个随机参数 wxr,以解决 ios 复制链接的问题 let wxr = 'wxr=' + new date().gettime(); let url = location.protocol + '//' + location.host + '/page/im' + to.fullpath; if (location.search) { url = url + '&' + wxr; } else { url = url + '?' + wxr; } window.location.replace(url); } // 跳转结束后校验 wxr 参数 app.router.aftereach((to, from) => { !to.query.wxr && wxrefresh(to); });
上一篇: Ajax实现二级联动菜单
下一篇: 描述自己的特征