关于移动 App H5 页面里的 JavaScript 异常捕获
自 HTML5 标准正式发布之后,其得天独厚的跨平台特性吸引了众多开发者的目光。
伴随着 HTML5 的发展,JavaScript 的重要性也在逐步增加,要说现在哪门语言最火的话,那一定是 JavaScript 了。 学了JavaScript 成为全栈工程师,迎娶白富美,步入人生巅峰,想想也是醉了。
但有个问题:很多开发者却并未考虑过收集 JavaScript 出错时抛出的异常信息。因为只要 JavaScript 异常后 App 不会崩溃,当没有发生过就好了。
或许,在浏览器时代,让用户刷新下页面,可以解决异常问题。但是在移动 App 的 H5 页面,一但出现异常将导致程序无法正常运行,用户也不是那么容易可以通过刷新来解决问题的。
这里,我们就简单介绍 JavaScript 的异常处理方式。
一般地,对于 JavaScript 异常,可以通过下列两种方式处理:
- try-catch 主动 catch 异常处理或上报
- window.onerror 监听错误事件捕获未处理的异常
- 用 try-catch 语句捕获异常
try {
function();
} catch(e) {
console.log(e);
// report error maybe
}
>
- 通过监听 window.onerror 事件捕获异常
window.onerror = function (errorMsg, url, lineNumber) {
console.log('Error: ' + errorMsg + ' Script: ' + url + ' Line: ' + lineNumber);
// report error maybe
}
上述的方法只能获取到出错信息,url 及行号信息。
所幸在新的标准草案里,window.onerror 添加了两个参数:列号和异常堆栈
>
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
console.log('Error: ' + errorMsg + ' Script: ' + url + ' Line: ' + lineNumber + ' Column: ' + column + ' StackTrace: ' + errorObj);
}
目前新的标准草案已经被主流的浏览器所支持,但是在移动平台里,新标准目前只被 Android 支持,所以可以在 Android 的 webview 里获取到完整的异常信息。
但是 iOS 平台的 WebView,还无法获取到堆栈信息,针对 iOS 平台,建议是发现异常信息后,在出错函数内用 try-catch 方式主动上报异常,以此解决信息缺失问题。
关于JS的异常捕获,想更详细了解的同学可以看看这篇文章:如何捕获和分析 JavaScript Error
http://www.cnblogs.com/cathsfz/p/how-to-capture-and-analyze-javascript-error.html
目前,Bugly 新发布的 JS 异常捕获能力同时支持上述的两种方案,如果是用 try-catch 捕获的,可以通过我们提供的主动上报接口进行上报
>
try {
function();
} catch (e) {
Bugly.reportException(e);
}
- 未被 try-catch 捕获的 JS 异常,我们也会通过 window.onerror 收集并上报,同时我们也采集了一些可以辅助发现问题的信息,如 userAgent 等,协助开发者发现问题。
更多信息可以查阅Bugly SDK使用指南:iOS , Android
本文系腾讯Bugly独家内容,转载请在文章开头显眼处注明注明作者和出处“腾讯Bugly(http://bugly.qq.com)”
腾讯Bugly 最专业的质量跟踪平台
为您定期分享应用崩溃解决方案
- WordPress 后台管理菜单名称重命名的方法
- 从Akismet 黑名单中洗白的方法
- 移除除管理员之外的其他用户的WordPress 更新升级提示
- 为 WordPress 后台管理菜单自定义排序
- WordPress 添加个性化的博客宠物(妹纸篇)
- WordPress 添加个性化的博客宠物(汉纸篇)
- WordPress 退出(登出)的时候跳转到首页
- WordPress免插件仅代码实现面包屑导航
- 开源的作业调度框架 - Quartz.NET
- Windows Server 2003网络负载均衡的实现
- 使用 ETW 对 .NET 应用程序进行性能诊断
- ORB_SLAM论文解读
- Mono.Addins 插件式框架
- 通过多说服务器缓存加速Gravatar 头像,解决被墙问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP获取对象属性的三种方法实例分析
- PHP7内核之Reference详解
- PHP基于PDO扩展操作mysql数据库示例
- php实现的PDO异常处理操作分析
- PHP yield关键字功能与用法分析
- php PDO属性设置与操作方法分析
- PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
- CI框架实现创建自定义类库的方法
- php如何计算两坐标点之间的距离
- Python调用C语言程序方法解析
- php workerman定时任务的实现代码
- Yii2.0 RESTful API 基础配置教程详解
- opencv 形态学变换(开运算,闭运算,梯度运算)
- 使用darknet框架的imagenet数据分类预训练操作
- php两点地理坐标距离的计算方法