【问题标题】:restrict javascript window.onerror to errors only in my script将 javascript window.onerror 限制为仅在我的脚本中出现错误
【发布时间】:2015-11-23 03:44:52
【问题描述】:

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

这会向我的服务器发送一条消息(就像我在正常操作期间使用 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 处理程序中遇到了一些我不期望的错误,例如通用“Script error”(我已经看到这可能是一个 CORS 问题)和其他非常具体的错误,例如

Uncaught ReferenceError: DealPly is not defined

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

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

【问题讨论】:

  • 根据下面的回复,我刚刚修改了包装器-remoteConsoleLog(errorMsg, 'window onerror' + url); - 记录脚本名称并将过滤服务器端
  • 您找出导致DealPly is not defined 错误的原因了吗?出于某种原因,我们开始经常看到它。

标签: javascript jquery error-handling


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    好吧,我相信 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');
        }
    }
    

    【讨论】:

    • 从哪里获得网址?
    • 它在您自己发布的事件处理程序中可用(第二个参数)
    • 完美!我模拟了一个错误,它与我的脚本名称一起被记录(我决定只将 url 传递给服务器日志,这样我就可以看到所有错误都可以过滤服务器端)。我必须等待现在发生一些实际错误。
    【解决方案3】:

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

    类似这样的:

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

    【讨论】:

      猜你喜欢
      • 2018-02-01
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 2016-04-04
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      相关资源
      最近更新 更多