window.onerror 错误监听,发到后台

var doc = document.body || document.documentElement;

var _onerror = Onerror(‘‘);
var Onerror = function(url){
	this.init(url);
}
Onerror.prototype.init = function(url){
	this.url = url;
	this.system = this._system();
    this.browser = this._browser();
    this.host = location.host;
    this.referrer = document.referrer;
    this.path = location.pathname;
}
Onerror.prototype._system = function(){
	return navigator.platform || "UNKNOW";
}
Onerror.prototype._browser = function (){
    return navigator.userAgent || "UNKNOW";
};

Onerror.prototype.catchError = function ( des, path, line, word ){
    if( !des ) return false;
    return this.request({
        description : des,
        file : path,
        line : line,
        word : word
    });
};
Onerror.prototype.request = function ( url, options ){

    var self = this;
    var default_settings = {
        "host" : self.host,
        "referrer" : self.referrer,
        "path" : self.path,
        "timestamp" : +new Date,
        "system" : self.system,
        "browser" : self.browser,
        "language" : self.language
    };
    //beacon使用post方式
    //img_beacon使用get方式
    this[ ( isSupportBeacon && openBeacon ) ? "_beacon" : "_img_beacon" ]( url, $.extend( default_settings, options ));
};
Onerror.prototype._beacon = function ( url, options ){
    return navigator.sendBeacon( url, JSON.stringify( options ));
};

Onerror.prototype._img_beacon = function ( url, options ){
   var img = new Image();
   img.src = url + "?" + Object2URLString( options );
   img.onload = function (){};
   return doc.appendChild( img );
};
function Object2URLString ( obj ){
    var r = [];
    for( var i in obj ){
        r.push( i + "=" + obj[i] );
    }
    return r.join("&");
}

window.onerror = function (){
    return _onerror.catchError(arguments);
};

  node express 代码

router.get(‘/window-onerror/error.gif‘, function(req, res, next) {
  var $req = getData(req),
            data = $req.result,
            isBeacon = $req.isBeacon;
        if (!data.utmb) {
            return this.res.end();
        }
        //insert database
        console.log(data);
        //beacon 无需返回值
        if (isBeacon) {
            return res.end();
        }
        //img beacon
        else {
            //设置http请求头为image/gif
            res.writeHead(‘200‘, {‘Content-Type‘: ‘image/gif‘});
            //1x1 的 gif图为返回值
            return res.end(‘iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==‘, ‘base64‘);
        }
});

  

时间: 2024-11-04 05:26:45

window.onerror 错误监听,发到后台的相关文章

ios 监听app从后台恢复到前台

1. APPDelegate中的代理方法可以监听到程序前后台切换的状态 - (void)applicationDidEnterBackground:(UIApplication * )application { NSLog(@"---applicationDidEnterBackground----") // 进入后台 } - (void)applicationDidBecomeActive:(UIApplication * )application { NSLog(@"--

Android 监听APP进入后台或切换到前台方案对比

在我们开发的过程中,经常会遇到需要我们判断app进入后台,或者切换到前台的情况.比如我们想判断app切换到前台时,显示一个解锁界面,要求用户输入解锁密码才能继续进行操作:我们想判断app切换到后台,记录一下log:或者当用户切换回前台时,我们想刷新一下页面的数据等等...... android里面监听app前后台的方案很多(这还是得归根于安卓提供了丰富的api和强大的架构支撑,呵呵~),比如可以通过ActivityManager提供的getRunningAppProcesses()获取系统当前运

vue中监听window.resize的变化

我只想说每个人遇到的bug真的不能一概而论,解决办法也会有不同.在vue中使用echarts的时候,会想要实现window.resize窗体变化大小的时候让图形大小跟着变化.实现的过程中各种bug,也真的让人有种想要发狂的感觉.但是还好,最后在不断的查资料和尝试当中.实现了想要的效果,仅供参考: 首先我这里实现的效果是切换echart图形,然后在window.resize过程中想要实现自适应窗口大小的变化. 这里的两个button分别是控制两个路由切换,也就是两个echart图形(柱状图和饼图)

js监听滚动条 回到顶端

效果:当出现滚动条,且滚动条出现移动时,把回到顶端按钮 显示出来:当滚动条回到顶部时,将回到顶端按钮隐藏. <script type="text/javascript"> //获取滚动条的位置 function getScrollTop() { var scrollPos; if (window.pageYOffset) { scrollPos = window.pageYOffset; } else if (document.compatMode && d

IOS高级开发~开机启动&amp;无限后台运行&amp;监听进程

一般来说, IOS很少给App后台运行的权限. 仅有的方式就是 VoIP. IOS少有的为VoIP应用提供了后台socket连接,定期唤醒并且随开机启动的权限.而这些就是IOS上实现VoIP App的关键. 苹果官方文档对于的描述就短短的一页(点击这里),很多细节没有提及. 这篇微博通过具体实现和查阅资料,补充了这些细节.并且列举出了在实现过程中可能遇到的问题, 作为参考. 博客: http://www.cnblogs.com/jhzhu 邮箱: [email protected] 作者: 知明

TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误

一.环境描述: OS : Windows Server 2008 32BitDB : 11.2.0 二.排错过程: 前天应用不能访问数据库了 (后台应用能访问数据库),故障发生.马上登录到服务器里查看监听状态,发现有TNS-12541 ,TNS-12560等错误 手动把监听服务启动,这时候服务状态上显示为已启动,但在CMD窗口执行lsnrctl status的时候依然返回错误信息: C:\>lsnrctl status LSNRCTL for 32-bit Windows: Version 11

《转载》IOS高级开发~开机启动&amp;无限后台运行&amp;监听进程

非越狱情况下实现: 开机启动:App安装到IOS设备设备之后,无论App是否开启过,只要IOS设备重启,App就会随之启动: 无限后台运行:应用进入后台状态,可以无限后台运行,不被系统kill: 监听进程:可获IOS设备运行除系统外的App(包括正在运行和后台运行): 配置项目 plist文件 添加: <key>UIBackgroundModes</key> <array> <string>voip</string> </array>

JavaScript-4.6鼠标事件监听,获取鼠标坐标window.event---ShinePans

<html> <head> <meta http-equiv="content-type" content="text/html" charset=GB2312"/> <title> 4.5 window.event应用 </title> <script> function body_onclick(){ alert("鼠标点击的坐标是\r\nx:"+event.x

Oracle错误——ORA12514:监听程序当前无法识别连接描述符中请求的服务

在连接数据库的时候,有时会遇到一个"ORA12514:监听程序当前无法识别连接描述符中请求的服务"的错误,这个错误其实就是数据库动态注册(关于动态注册会在稍后讲解)不生效,导致监听器无法识别客户端连接符中提供的服务名,从而拒绝建立数据库连接时报的错误信息,所以就需要对监听器配置做修改. 在这里,还需对问题进行细化,有时候可能会发现,在刚开启监听器的时候会发生这个错误,但过了一会再进行连接就不会报错,这其实是因为动态注册需要时间,而刚开启监听器时,数据库还未注册到监听器,导致报错,这种情