2018.11.05
最常见错误分析
1. undefined 级错误
分布系统及机型:
system: android 5.0~8.0
可能原因:
兼容性问题,获取事件DOM节点时,error.target.localName在部分安卓浏览器环境为空。
解决方案一:
增加error.srcElement.localName,增加事件源捕获范围
// 资源加载错误
else if (error instanceof <any>Event) {
let _target = error.target.localName ? error.target : error.srcElement
errorTarget:string = _target.localName
filename:string = _target.src || _target.href
}
2. Script error. js报错
分布系统及机型:
system: android ios均有
原因:跨域脚本同源安全策略导致,上线前为规避此问题,已经在脚本上加上了crossorigin字段,但仍然有部分机器出现。初步诊断,分析样本发现,用户在wifi环境下会出现这个错误,4g环境比较少。
推测1: 可能是用户运营商网络被劫持,加载了第三方脚本,脚本运行报错。
推测2: 目前只有业务代码js增加了crossorigin头,head区域内的公共库没有增加属性,可能原因:微信的sdk.js使用腾讯官方cdn地址,不同源;exception.js本身报错,未加crossorigin。
webkit源码:
bool ScriptExecutionContext::sanitizeScriptError(String& errorMessage, int& lineNumber, String& sourceURL)
{
KURL targetURL = completeURL(sourceURL);
if (securityOrigin()->canRequest(targetURL))
return false;
errorMessage = "Script error.";
sourceURL = String();
lineNumber = 0;
return true;
}
3. WeixinJSBridge is not defined 微信js桥错误
分布系统及机型:
system: android 5.0~8.0
可能原因:
安卓微信webview注入钩子有时序问题,在WeixinJSBridge还未注入之前,就已经成功注入其它依赖于WeixinJSBridge的其它API模块。在API模块中调用WeixinJSBridge就会失败。目前图书馆项目调用桥接器的只有分享功能。
解决方案:
在ready之后业务代码作为callback。有风险:WeixinJSBridge注入失败,导致callback不执行。
4. 代码逻辑错误
未发现重大错误,部分机器有数据类型错误,如:全局环境下没有console,localStorage等window属性,js数据类型null/undefined。
版本优化方案(1.1.0)
- 新增IP字段和城市字段
- 项目静态资源地址公用库使用内部CDN地址,都配置跨域
- 安卓分享callback放在桥接器ready内执行
- 后端控制钉钉消息频率,1分钟内累计10次以上进行预警。