We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用Vue+Vue-router
根据 GitHub 有 weui 的这篇 issue,出现这个问题的原因,是因为微信内置浏览器对history的支持不够全面,导致对于开启了 History Mode 的 SPA 应用,只会保存第一条 url。
history
而解决方法,则是在打开每个页面时刷新一次,更新当前的history。
由于项目中我们使用的Vue-router,所以可以通过路由守卫,在每次跳转时给URL添加一个随机参数wxr,然后刷新页面。在判断到当前URL存在该参数时,则加载页面,避免重复刷新。
Vue-router
URL
wxr
此外,在打开页面后,需要将url还原为正常的地址。
url
根据上述的思路,我们在路由守卫beforeEach,添加判断,若跳转链接非初始页面,且参数wxr不存在,则添加参数wxr,并且通过next函数跳转到新的页面。
beforeEach
next
注:此逻辑中未进行页面重新加载。
/** * 在链接后加一个随机参数 wxr,以解决 ios 复制链接的问题 * @param {*} to */ function wxRefresh(to) { const newTo = Object.assign({}, to); newTo.query = Object.assign({}, to.query); newTo.query.wxr = `${new Date().getTime()}`; return newTo; } router.beforeEach((to, from, next) => { if (from.fullPath !== '/' && !to.query.wxr) { next(wxRefresh(to)); } else { next(); } });
在路由守卫beforeEach,若当前链接存在参数wxr,则将url还原为正常的地址,并重新加载页面。
/** * 去除链接后的随机参数 wxr,以解决 ios 复制链接的问题 * @param {*} to */ function wxDelRefresh(to) { let url = `${window.location.protocol}//${window.location.host}/XXXX{to.fullPath}`; const reg = /&wxr=/.test(url) ? /&wxr=[0-9]{13}/g : /\?wxr=[0-9]{13}/g; url = url.replace(reg, ''); window.location.replace(url); } router.afterEach((to) => { if (to.query.wxr) { wxDelRefresh(to); } });
这里我们使用window.location.replace()来重新加载页面,是因为该方法可用一个新文档取代当前文档,并且不会在 History 对象中生成一个新的记录。这样可以避免加载页面后,在微信中点击返回跳转链接错误的问题。
window.location.replace()
The text was updated successfully, but these errors were encountered:
No branches or pull requests
概述
项目架构
使用Vue+Vue-router
问题描述
原因分析
根据 GitHub 有 weui 的这篇 issue,出现这个问题的原因,是因为微信内置浏览器对
history
的支持不够全面,导致对于开启了 History Mode 的 SPA 应用,只会保存第一条 url。而解决方法,则是在打开每个页面时刷新一次,更新当前的
history
。解决方案
思路
由于项目中我们使用的
Vue-router
,所以可以通过路由守卫,在每次跳转时给URL
添加一个随机参数wxr
,然后刷新页面。在判断到当前URL
存在该参数时,则加载页面,避免重复刷新。此外,在打开页面后,需要将
url
还原为正常的地址。具体实现
根据上述的思路,我们在路由守卫
beforeEach
,添加判断,若跳转链接非初始页面,且参数wxr
不存在,则添加参数wxr
,并且通过next
函数跳转到新的页面。注:此逻辑中未进行页面重新加载。
在路由守卫
beforeEach
,若当前链接存在参数wxr
,则将url
还原为正常的地址,并重新加载页面。这里我们使用
window.location.replace()
来重新加载页面,是因为该方法可用一个新文档取代当前文档,并且不会在 History 对象中生成一个新的记录。这样可以避免加载页面后,在微信中点击返回跳转链接错误的问题。参考链接
The text was updated successfully, but these errors were encountered: