Log javascript errors.
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Sat, 7 Apr 2012 14:00:59 +0000 (16:00 +0200)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Sat, 7 Apr 2012 14:07:04 +0000 (16:07 +0200)
Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
htdocs/javascript/core.js
modules/core.php

index 6f57bb7..b4e950b 100644 (file)
@@ -383,5 +383,28 @@ function previewWiki(idFrom, idTo, withTitle, idShow)
 }
 
 // }}}
+// {{{ register error report
+
+$(function() {
+    $(window).error(function(error) {
+        if ($.xsrf_token) {
+            $.ajax({
+                url: $.plURL('site_errors/register'),
+                type: 'POST',
+                data: {
+                    url: "" + window.location,
+                    token: $.xsrf_token,
+                    error: JSON.stringify({
+                        message: error.originalEvent.message,
+                        file:    error.originalEvent.filename,
+                        line:    error.originalEvent.lineno
+                    })
+                }
+            });
+        }
+    });
+});
+
+// }}}
 
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
index 97eb6a6..d0168b2 100644 (file)
@@ -35,6 +35,7 @@ class CoreModule extends PLModule
             'assert_errors' => $this->make_hook('siteerror',     AUTH_COOKIE, 'admin'),
             'site_errors'   => $this->make_hook('siteerror',     AUTH_COOKIE, 'admin'),
             'site_errors/rss' => $this->make_token_hook('siteerror_rss', AUTH_COOKIE, 'admin'),
+            'site_errors/register' => $this->make_hook('register_error', AUTH_PUBLIC),
 
             'embedded'      => $this->make_hook('embedded',      AUTH_PUBLIC),
 
@@ -221,6 +222,14 @@ class CoreModule extends PLModule
         $page->assign('errors', PlErrorReport::iterate());
     }
 
+    function handler_register_error($page)
+    {
+        if (S::has_xsrf_token() && Post::has('error') && Post::has('url')) {
+            PlErrorReport::report("Client error on " . Post::s('url') . ":\n\n" . Post::s('error'));
+        }
+        exit;
+    }
+
     function handler_siteerror_rss(PlPage $page, PlUser $user)
     {
         return PlErrorReport::feed($page, $user);