仅在我的脚本中将javascript window.onerror限制为错误

时间:2015-08-28 13:03:45

标签: javascript jquery error-handling

我添加了一种方法来将浏览器中发生的事件记录到我的服务器端日志中:

这会向我的服务器发送一条消息(正如我在正常操作期间使用console.log记录关键事件一样使用)

function remoteConsoleLog(msgToLog, msgDesc) {
  $.ajax({
    type: 'POST',
    url: '/php/log_javascript_events.php',
    data: JSON.stringify({UA: navigator.userAgent, MSG: msgToLog, MSGDESC: msgDesc}),
    contentType: 'application/json; charset=utf-8'
  });
}

这是上面捕获其他错误的包装器(基于this):

window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
    remoteConsoleLog(errorMsg, 'window onerror');
}

这很好用,我在服务器日志文件中获得了我期望的所有事件。然而,问题在于我从window.onerror处理程序中获得了一些错误,例如泛型" 脚本错误" (我已经看到这可能是一个CORS问题)和其他非常具体的错误,例如

  

未捕获的ReferenceError:未定义DealPly

(这似乎与我的网站无关的浏览器插件有关)。

我的网站使用一些外部JS文件,如JQuery等。有没有办法只记录包含我的日志记录的javascript文件生成的错误,即排除第三方错误 - 或者这甚至是一件好事吗?

3 个答案:

答案 0 :(得分:1)

嗯,我相信网址显示了脚本的名称,因此您可以根据自己的脚本文件进行检查

var mySripts = ["a.js", "b.js"];
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
    //or however the url is formatted
    if (myScripts.indexOf(url) > -1) {
         remoteConsoleLog(errorMsg, 'window onerror');
    }
}

答案 1 :(得分:1)

我能想到的唯一解决方案是检查url是否与您的js文件相同,并检查errorMsg是否与"脚本错误&#34不同;。

这样的事情:

window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
    if(errorMsg.indexOf('Script error.') > -1 || url != "yourfile.js") {
        return;
    }
    remoteConsoleLog(errorMsg, 'window onerror');
}

答案 2 :(得分:0)

仅限未来的访客,如果您愿意,DealPly可能是广告软件或病毒。所以问题可能是您的访问者有这个广告软件,并且它使用的脚本有问题。只是一个猜测。