diff --git a/lib/exe/js.php b/lib/exe/js.php
index 4ff48133e7d62d1a9d24b23abb778c2877d88d02..06769d895b4315e580d412334a24882987f3c331 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -104,10 +104,13 @@ function js_out(){
     // load files
     foreach($files as $file){
         $ismin = (substr($file,-7) == '.min.js');
+        $debugjs = ($conf['allowdebug'] && strpos($file, DOKU_INC.'lib/scripts/') !== 0);
 
         echo "\n\n/* XXXXXXXXXX begin of ".str_replace(DOKU_INC, '', $file) ." XXXXXXXXXX */\n\n";
         if($ismin) echo "\n/* BEGIN NOCOMPRESS */\n";
+        if ($debugjs) echo "\ntry {\n";
         js_load($file);
+        if ($debugjs) echo "\n} catch (e) {\n   logError(e, '".str_replace(DOKU_INC, '', $file)."');\n}\n";
         if($ismin) echo "\n/* END NOCOMPRESS */\n";
         echo "\n\n/* XXXXXXXXXX end of " . str_replace(DOKU_INC, '', $file) . " XXXXXXXXXX */\n\n";
     }
diff --git a/lib/scripts/helpers.js b/lib/scripts/helpers.js
index d6f36967de881c7b9898a1017789a605e6b646fa..fdac13b71a232701e7536d5ff270c69fb724f9c0 100644
--- a/lib/scripts/helpers.js
+++ b/lib/scripts/helpers.js
@@ -68,3 +68,18 @@ function bind(fnc/*, ... */) {
                          static_args.concat(Aps.call(arguments, 0)));
     };
 }
+
+/**
+ * Report an error from a JS file to the console
+ *
+ * @param e    The error object
+ * @param file The file in which the error occurred
+ */
+function logError(e, file) {
+    if (window.console && console.error) {
+        console.error('The error "%s: %s" occurred in file "%s". ' +
+            'If this is in a plugin try updating or disabling the plugin, ' +
+            'if this is in a template try updating the template or switching to the "default" or "dokuwiki" template.',
+            e.name, e.message, file);
+    }
+}
\ No newline at end of file