宝哥软件园

用window.onerror捕获和报告Js错误的方法

编辑:宝哥软件园 来源:互联网 时间:2021-09-17

前两天,一位2048游戏的用户反映,他打开游戏后就不能玩了,只有一个游戏面板,数字无法初始化,更不用说移动了。这些设备是iPhone 4S和iOS 5.1。尝试从微信打开Safari仍然不起作用。因为游戏中有很多HTML5的功能,所以粗略估计JS报错了。但是如何才能捕捉到这样的信息呢?传说中的窗户。当然是一扇窗户。

从W3C找到关于window.onerror的方法介绍:

这意味着,基本上,也就是说,window.onerror方法,我们可以写:

/** * @param {String}错误消息错误消息* @param {String} scriptURI错误文件* @param {Long}行号错误代码行号* @param {Long}列号错误代码列号*。@param {Object} errorObj错误详细信息,任何内容*/window . one error=function(error message,脚本uri,行号,列号,ErrorObj) {//TODO}但是,在使用过程中要注意兼容性。并非所有浏览器都有参数列表中的所有参数。chrome和其他公司是浏览器标准草案的领导者。就用这些参数!

所以,你可以写一个小演示来试试:

!捕获doctype html head title js/title script type=' text/JavaScript '/* * * @ param { String }错误消息错误消息* @param {String} scriptURI文件时出错,错误URI为*。@param {Long}行号错误代码的行号* @param {Long}列号错误代码的列号* @param {Object} errorObj错误的详细信息。any */window . one rror=function(error message,脚本uri,行号,列号,errorobj) {console.log('错误消息:',error message);Console.log('错误文件:',script uri);Console.log('错误行号:',行号);Console.log('错误列号:',列号);Console.log('错误详细信息:',ErrorObj);}/script/head body script type=' text/JavaScript ' src=' http : error . js '/script/body/html error . js文件中的内容,只需写一句这样的话:

抛出新的错误(' Error!');用浏览器运行后,打开控制台,基本如下:

因此,所有这些数据都可以报告。当然,上面的error.js和html页面在同一个域名下。如果error.js不在同一个域下怎么办?让我们更改error.js的引用:

脚本类型=' text/JavaScript ' src=' http://doitbegin.duapp.com/error.js'/script再次打开控制台,我们看到这样:

相当于window.onerror方法只捕获一个errorMessage,它是一个固定的字符串,没有引用值。查了一些数据(Webkit源代码),发现浏览器中脚本资源加载的地方是通过同源策略来判断的。如果是非同源资源,错误消息将被写成“脚本错误”:

幸运的是,脚本标签有一个crossorigin属性。设置它可以显示更详细的错误信息。让我们尝试更改脚本标签:

脚本类型=' text/JavaScript ' src=' http://doitbegin.duapp.com/error.js'十字原点/脚本刷新页面。此时,我在控制台中看到如下输出:

该错误并非意外。由于error.js设置为crossorigin,因此error.js的HTTP响应头也必须设置为可以从不同的来源访问。为了方便设置Header,对error.js做一个小的修改,并将其重命名为error-js.php。

?php头(' Access-Control-Allow-origin : * ');标题(' Content-type : text/JavaScript ');抛出新的错误(“错误”);这时,刷新页面,看到控制台中的输出正常,所有信息都能正常捕获:

好了,技术细节分析结束!我的2048游戏静态资源放在静态域(非同源),所以如果你想通过window.onerror捕捉错误信息,就要遵循上面最后一种情况:

1.添加脚本的crossorigin属性。

2.配置服务器,将静态资源Javascript的响应设置为访问控制允许源。

更多资讯
游戏推荐
更多+