1. 在Android客户端或Chrome浏览器弹出一个引导用户关注公众号的二维码
描述
客户端加载线上义诊Url,偶尔会弹出一个要求关注丁香园公众号的二维码
问题分析
后端会根据当前登录用户向前端界面注入一段如下js
<script>
window.initialState = {
currentLoginUser: {
avatar: "https://askpub.dxycdn.com/avatar/128/default.png",
simUid: "0",
userId: "0",
showApplyAnswererHint: false,
isApplied: false,
wxFollow: false
}
, environment: {
server: 'prd'
}
}
</script>
界面上根据wxFollow字段以及白名单决定是否弹出公众号的二维码
当用户未登录却进入到了义诊界面,或者已登录但未关注公众号,同时,Url未在白名单内时,将引导用户关注公众号
解决方案
检查wxFollow字段是否为false,检查白名单内有无义诊的Url。
与产品讨论,最终确认将义诊Url加入到白名单,不再在此界面引导用户关注公众号。
2. Android客户端无法拦截Vue路由的问题
描述
客户端加载使用vue编写的单页面应用,vue进行路由时,没有回调WebView的shouldOverrideUrlLoading生命周期方法。onPageFinished生命周期方法被调用,但无法进行路由拦截。
问题分析
客户端加载使用vue编写的单页面应用,会将整个站点所有vue组件及较小的资源文件下载到本地,当用户点击医生条目将要跳转至医生详情页时,并不会产生网络资源的加载,也就不会回调客户端WebView类似shouldOverrideUrlLoading的生命周期方法。同时,从vue-router.js可知,createHref创建出类似[/#/demo]的锚点。vue路由时,根据ua进行区分,对于支持pushState的使用window.history.pushState(window.history.replaceState)方法修改Url,不触发hashchange,