作者:刺猬xiaojie | 来源:互联网 | 2023-08-18 00:54
我有一个庞大的复杂Web应用程序,有数千行Javascript.用户报告的是一小组间歇性Javascript错误.我认为这些是竞争条件的附带现象–有些东西没有正确初始化,Jav
我有一个庞大的复杂Web应用程序,有数千行Javascript.用户报告的是一小组间歇性Javascript错误.
我认为这些是竞争条件的附带现象 – 有些东西没有正确初始化,Javascript崩溃导致’下游’js不能运行.
反正有没有Javascript执行崩溃回登服务器端?
所有js日志库(如Blackbird和Log4Javascript)都只是客户端.
解决方法:
我已经使用@pimvdb建议的window.onerror写了一个远程错误记录功能
Err = {};
Err.Remoterr = {};
Err.Remoterr.Onerror= function (msg, errorfileurl, lineno) {
var jsonstring, response, pageurl, COOKIEs;
// Get some user input
respOnse= prompt("There has been an error. " + "It has been logged and will be investigated.", "Put in comments (and e-mail or phone number for" + " response.)");
// get some context of where and how the error occured
// to make debugging easier
pageurl = window.location.href;
COOKIEs = document.COOKIE;
// Make the json message we are going to post
// Could use JSON.stringify() here if you are sure that
// JSON will have run when the error occurs
// http://www.JSON.org/js.html
jsOnstring= "{\"set\": {\"jserr\": " +
"{\"msg\": \"" + msg + "\", " +
"\"errorfileurl\": \"" + errorfileurl + "\", " +
"\"pageurl\": \"" + pageurl + "\", " +
"\"COOKIEs\": \"" + COOKIEs + "\", " +
"\"lineno\": \"" + lineno + "\", " +
"\"response\": \"" + response + "\"}}}";
// Use the jquery cross-browser post
// http://api.jquery.com/jQuery.post/
// this assumes that no errors happen before jquery has initialised
$.post("?jserr", jsonstring, null, "json");
// I don't want the page to 'pretend' to work
// so I am going to return 'false' here
// Returning 'true' will clear the error in the browser
return false;
};
window.Onerror= Err.Remoterr.onerror;
我将其部署在网页的head和body标签之间.
您将需要更改JSON以及将其发布到的URL,具体取决于您将如何记录数据服务器端.