MOVED Pman.OnError.js to Pman.OnJavascriptError.js
authorAlan Knowles <alan@roojs.com>
Wed, 9 Mar 2016 06:22:47 +0000 (14:22 +0800)
committerAlan Knowles <alan@roojs.com>
Wed, 9 Mar 2016 06:22:47 +0000 (14:22 +0800)
Pman.OnJavascriptError.js [new file with mode: 0644]

diff --git a/Pman.OnJavascriptError.js b/Pman.OnJavascriptError.js
new file mode 100644 (file)
index 0000000..77809a1
--- /dev/null
@@ -0,0 +1,84 @@
+/**
+ *
+ * Window onerror handler..  reports to our logger.
+ *
+ */
+
+Pman.OnJavascriptError = {
+    
+    init : function()
+    {
+        this.history = [];
+        window.onerror = this.handler.createDelegate(this);
+        
+    },
+    
+    history  : false, // array of previous events...
+    
+    lock : false,
+    
+    handler : function(msg, url, line, col, errorObj)
+    {
+        
+        if (this.lock) {
+            return false;
+        }
+        
+        // note - some are not passed by all browsers.
+        col = col || -1;
+        var stack = errorObj ? errorObj.stack : false;
+        
+        
+        
+        
+        if (!errorObj) {
+            var stack = [];
+            var f = arguments.callee.caller;
+            while (f) {
+                stack.push(f.name);
+                f = f.caller;
+            }
+        }
+        // 10 events max in 5 minutes
+        var last = this.history.length  > 10 ? this.history.shift() : false;
+        if (last && last > (new Date()).add( Date.MINUTE, -5)) {
+            this.history.unshift(last); // put it back on, and ingore this error.
+            return false;
+        }
+        
+        this.history.push(new Date());
+        
+        
+        // rate limit...
+        this.lock = true;
+        
+        
+        
+        new Pman.Request({
+            url : baseURL + '/Core/JavascriptError',
+            method  : 'POST',
+            params : {
+                msg : msg,
+                url : url,
+                line : line,
+                col : col,
+                stack : '' + stack // array??? 
+            },
+            success : this.resetLock,
+            failure : this.resetLock
+                
+            
+        });
+        return false;
+        
+    
+    
+    
+    },
+    resetLock : function()
+    {
+        Pman.OnJavascriptError.lock = false;
+    }
+    
+}
+Pman.OnJavascriptError.init();