开发者问题收集

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

2015-08-28
1599

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

这会向我的服务器发送一条消息(就像我使用 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'
  });
}

这是上述内容的包装器,用于捕获其他错误(基于 ):

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

这很有效,我得到了服务器日志文件中期望的所有事件。但是,问题是我从 window.onerror 处理程序中得到了一些意想不到的错误,例如通用的“ 脚本错误 ”(我发现这可能是 CORS 问题)和其他非常具体的错误,例如

Uncaught ReferenceError: DealPly is not defined

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

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

3个回答

好吧,我相信 URL 显示的就是脚本的名称,因此您可以根据自己的脚本文件进行检查

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');
    }
}
BobbyTables
2015-08-28

我能想到的唯一解决方案是检查 url 是否与您的 js 文件相同,并检查 errormsg 是否不同而不是“脚本错误”。

类似的东西:

837485970
Joel Almeida
2015-08-28

仅供未来访客参考 DealPly 是一种广告软件,或者说是病毒。因此,问题可能是您的访客感染了此广告软件,并且其使用的脚本存在问题。不过这只是猜测。

Jompis
2016-05-26