从W3C找到关于window.onerror的方法体介绍:
这个意思,基本可以就是说,window.onerror方法,我们可以写成:
/*** @param {String} errorMessage错误信息* @param {String} scriptURI 出错的文件* @param {Long}lineNumber 出错代码的行号* @param {Long}columnNumber出错代码的列号* @param {Object} errorObj错误的详细信息,Anything*/window.onerror = function(errorMessage, scriptURI, lineNumber,columnNumber,errorObj) { // TODO }不过使用过程中还得注意兼容性问题,不是所有浏览器都有参数列表中的所有参数,chrome之类的,都是浏览器标准草案的领跑者,这些个参数用就是了!<!DOCTYPE html> <html> <head> <title>Js错误捕获</title> <script type="text/javascript"> /*** @param {String} errorMessage错误信息* @param {String} scriptURI 出错的文件* @param {Long}lineNumber 出错代码的行号* @param {Long}columnNumber出错代码的列号* @param {Object} errorObj错误的详细信息,Anything*/ window.onerror = function(errorMessage, scriptURI, lineNumber,columnNumber,errorObj) { console.log("错误信息:" , errorMessage); console.log("出错文件:" , scriptURI); console.log("出错行号:" , lineNumber); console.log("出错列号:" , columnNumber); console.log("错误详情:" , errorObj); } </script> </head> <body> <script type="text/javascript" src="error.js"></script> </body> </html>其中error.js文件中的内容,简单的这样写一句:

相当于window.onerror方法只捕获到了一个errorMessage,而且是固定字符串,毫无参考价值。查了点资料(Webkit源码),发现在浏览器实现script资源加载的地方,是进行了同源策略判断的,如果是非同源资源,errorMessage就被写死为“Script error”了:
好在script标签有一个crossorigin属性,设置它可以显示比较详细的错误信息,我们试着将script标签改一下:
<script type="text/javascript" src="//doitbegin.duapp.com/error.js" crossorigin></script>
刷新页面,这个时候看到console中的输出是这样的:
出现这个error也不意外,既然设置了error.js为crossorigin,那error.js的HTTP Response Header也必须设置非同源可访问。为了方便设置Header,把error.js做一个小改动,更名为:error-js.php。
<?php header("Access-Control-Allow-Origin:*"); header("Content-type:text/javascript"); ?> throw new Error("出错了");此时刷新页面,看到console中的输出就已经正常了,所有信息都能正常捕获:
