今天解决一个领导关注的企业微信打开H5网页线上问题,一个用户可能用着用着的就会出现「连接服务器超时,点击屏幕重试」错误。
这个问题困扰了团队很久,方案采用的uni-app+vue,打包的h5。
这个提示文案,在前端工程、后端工程也都没搜到,刚开始毫无头绪,今天下午着手分析解决。
解决方式还是大胆提出假设,专业的求证。
我联想到,上一次发版,本有2个修改点,但验证过程中A功能已经更新了,C功能还未更新,让我猜测可能是缓存原因。
果然查看uni-app打包后的文件都带有hash值,并且文件有修改再打包hash会变化。
在结合路由方式是history,就找准了猜测方向
history路由就是每一个js、css请求都会去服务器加载,猜有可能是没加载到文件,然后企业微信浏览器提示了「连接服务器超时,点击屏幕重试」错误。
验证过程,我随便修改了点「跟进」页面内容,重新打包,企业微信先打开老版本,然后发布新版本,在点进去「跟进」页面,果然复现了。
复现了解决方案就很简单了, 拦截错误,重新刷新,代码如下:
window.onerror = function (message, url, line) {
const unexpectedToken = "SyntaxError:Unexpectedtoken<";
if (message.replaceAll(" ", "").replaceAll("'", "").indexOf(unexpectedToken)>=0) {
window.location.reload(true);
}
return true;
};
经过这次分析,也解决了,之前Taro打包h5时,也是报了runtime.js:1 Uncaught SyntaxError: Unexpected token '<'错误,应该也是js文件没找到,将publicPath: '.'修改为绝对路径publicPath: '/'也就可以再本地调试了。
真是高兴极了,这或许就是自己与其他程序员的区别...