JS破解时收到通知?

时间:2011-08-08 16:25:27

标签: javascript

我已将PHP配置为在发生错误时向我发送邮件。我想用Javascript做同样的事。

另外,鉴于这将是客户端,它可能会被滥用。

当JS在Web应用程序中断时,有什么好方法可以通过邮件通知?

更新

为了给出一些观点,我通常会加载几个js文件,包括库(大多数时候是jQuery)。

5 个答案:

答案 0 :(得分:9)

您可以收听全球onError事件。

请注意,当 引发错误时,您需要确保它不会无限循环。

<script type="text/javascript">
var handlingError = false;

window.onerror = function() {
   if(handlingError) return;
   handlingError = true;

   // process error

   handlingError = false;
};
</script>

答案 1 :(得分:3)

下面的代码依赖于全局onError事件,它不需要任何外部库,可以在任何浏览器中使用。

您应该在任何其他脚本之前加载它,并确保您有一个服务器端jserrorlogger.php脚本来获取错误。

代码包含一个非常简单的自我限制机制:它将在第10个错误后停止向服务器发送错误。如果你的代码卡在一个产生数以万计错误的循环中,这就派上用场了。

为避免滥用,您应在PHP代码中包含类似的自我限制机制,例如:

  1. 使用错误计数保存和更新会话变量,并在每次会话出现X错误后停止发送电子邮件(同时仍将所有错误写入日志中)
  2. 使用每分钟错误保存和更新全局变量,并在超过阈值时停止发送电子邮件
  3. 仅允许来自经过身份验证的用户的请求(仅适用于您的 应用程序需要身份验证)
  4. 你的名字:)
  5. 请注意,为了更好地跟踪javascript错误,您应该将相关代码包装在try / catch块中,并可能使用此处的printstacktrace函数:

    https://github.com/eriwen/javascript-stacktrace

    <script type="text/javascript">
      var globalOnError = (function() {
        var logErrorCount = 0;
        return function(err, url, line) {
          logErrorCount++;
          if (logErrorCount < 10) {
            var msg = "";
            if (typeof(err) === "object") { 
              if (err.message) {
                // Extract data from webkit ErrorEvent object
                url = err.filename;
                line = err.lineno;
                err = err.message;
              } else {
                // Handle strange cases where err is an object but not an ErrorEvent
                buf = "";
                for (var name in err) {
                  if (err.hasOwnProperty(name)) {
                    buf += name + "=" + err[name] + "&";
                  }
                }
                err = "(url encoded object): " + buf;
              }
            }
            msg = "Unhandled exception ["+err+"] at line ["+line+"] url ["+url+"]";
            var sc = document.createElement('script'); sc.type = 'text/javascript';
            sc.src = 'jserrorlogger.php?msg='+encodeURIComponent(msg.substring(0, Math.min(800, msg.length)));
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(sc, s);
          }
          return false;
        }
      })();
      window.onerror = globalOnError;
    </script>
    

答案 2 :(得分:1)

您可以将整个程序包装在try / catch中,并通过AJAX将捕获的异常发送到可以生成电子邮件的服务器。没错(我不会这样做)答案是“不是真的。”

答案 3 :(得分:0)

答案 4 :(得分:0)

来自记录JavaScript错误的人的记录。

  • 来自window.onerror的信息非常通用。调试很难,你不知道是什么导致它。
  • 用户的插件也可能导致问题。某些Firebug版本中非常常见的是toString()。
  • 您希望确保不会使用呼叫泛滥服务器,限制每页加载时可以发送的错误数量。
  • 确保通过错误调用记录页面网址,同时获取其他任何信息,以便让您的生活更轻松。