我已经设置了一个window.onerror处理程序来捕获错误.它的目的?要在每次发生错误时连接一个字符串,然后另一个处理程序window.onunload将其发送到服务器.(据推测有所有错误).
问题是,它只能发送第一个错误,因为在onerror处理程序事件第一次触发后,错误没有被捕获,因此脚本终止...
有没有解决的办法?
ErrorManager: (function () {
function Init(message) {
InitErrorHandler();
InitAjaxHandler();
setTimeout("Interface.ErrorManager.SendErrorsToAjax()", 8000);
}
function InitErrorHandler() {
Data.ErrorHandlerText = "";
Data.ErrorHandlerCount = 0;
window.onerror = function(errorMessage, url, line) {
if(IsInIgnoreList(errorMessage)) { return; }
Data.ErrorHandlerText += ("Error: "+(Data.ErrorHandlerCount+1)+" <br /><br />");
//Get error specific info
Data.ErrorHandlerText += escape(errorMessage) + "<br />";
Data.ErrorHandlerText += escape(url) + "<br />";
Data.ErrorHandlerText += escape(line) + "<br />";
Data.ErrorHandlerCount++;
console.log("BOOM"+errorMessage);
}
}
function InitAjaxHandler() {
window.onbeforeunload = function() { //when browser closed
Data.ErrorHandlerCount > 0 && SendErrorsToAjax();
}
}
function SendErrorsToAjax() {
PrepareErrorsForAjax();
$.getJSON(Interface.Utility.PrefixURL('/ajax/sendfeedback/handlejserrors/'+Data.ErrorHandlerText));
}
function IsInIgnoreList(str) {
return str.indexOf('nsIDOMSVGLocatable') != -1 ? true : false;
}
function PrepareErrorsForAjax() {
var preText = "<br /><br />A user has encountered a few errors: <br /><br />";
//Get session info
var userAgent, activePageID, accountNO, consumerNO;
userAgent = escape(navigator.userAgent);
preText += "User agent: "+userAgent+" <br />";
if($.mobile.activePage) {
activePageID = $.mobile.activePage.attr('id');
preText += "Page ID: "+activePageID+" <br />";
}
//Get info that may or may not be set
console.log("AUTH JSON "+Data.authJSON);
console.log("CONSUMER JSON "+Data.authJSON.consumers);
if(Data.authJSON && localStorage.lastConsumerNo) {
preText += "Account Number: " +Data.authJSON.accountId+" <br />";
preText += "Consumer Number: "+ localStorage.lastConsumerNo+" <br />";
}
preText += "<br /> The following errors were encountered:<br /><br />";
Data.ErrorHandlerText = preText + Data.ErrorHandlerText;
}
return {
Init: Init,
SendErrorsToAjax: SendErrorsToAjax
}
})(),
Run Code Online (Sandbox Code Playgroud)
Sel*_*gam 10
将其添加到单独的<script>标记中,这样window.onerror就不会受到其他脚本标记中的脚本错误的影响.
<script>
var trackErrorMsg = '';
window.onerror = function(msg, url, lineNo) {
trackErrorMsg += msg;
}
</script>
Run Code Online (Sandbox Code Playgroud)
请注意,上面的内容不会阻止在浏览器控制台中记录错误.上面的代码只是为了跟踪错误..你应该使用try ... catch来处理任何特定部分的错误.
演示 - 显示当它在同一个执行上下文中时它不起作用.
| 归档时间: |
|
| 查看次数: |
5039 次 |
| 最近记录: |