From 316bfdbd1e40bf290d650e00aa87f89144d0a408 Mon Sep 17 00:00:00 2001 From: Min RK Date: Fri, 2 Dec 2016 10:41:13 +0100 Subject: [PATCH] Catch and log handler exceptions in events.trigger rather than throwing handler errors in the call to `.trigger()` Extensions can register buggy event handlers. These should not be able to cause failures in the event-triggering code paths. This should fix several avenues where extensions (or other bugs) could prevent a notebook from loading. --- notebook/static/base/js/events.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/notebook/static/base/js/events.js b/notebook/static/base/js/events.js index e21b216f3..e431715b5 100644 --- a/notebook/static/base/js/events.js +++ b/notebook/static/base/js/events.js @@ -22,5 +22,16 @@ define(['base/js/namespace'], function(Jupyter) { Jupyter.Events = window._Events; Jupyter.events = window._events; - return $([window._events]); + var events = $([window._events]); + + // catch and log errors in triggered events + events._original_trigger = events.trigger; + events.trigger = function (name, data) { + try { + this._original_trigger.apply(this, arguments); + } catch (e) { + console.error("Exception in event handler for " + name, e, arguments); + } + } + return events; });