From b3acd9c9b151b9513745c654a98bdabc88a50d8c Mon Sep 17 00:00:00 2001 From: Jason Buckner Date: Thu, 18 Jul 2013 13:32:33 -0700 Subject: [PATCH 1/2] handle some quirks mode issues IE8 and 9 do not support array-style string parsing in quirks mode: "abcdef"[0] returns "" whereas "abcdef".substr(0,1) returns "a" document.fireEvent() returns "Invalid argument" regardless of the parameters sent to it. This happens in IE8 and IE9 in quirks mode. --- src/raven.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/raven.js b/src/raven.js index 2d5bf81fdf9a..273a4f251f8f 100644 --- a/src/raven.js +++ b/src/raven.js @@ -235,7 +235,7 @@ var Raven = { function triggerEvent(eventType, options) { var event, key; - eventType = 'raven' + eventType[0].toUpperCase() + eventType.substr(1); + eventType = 'raven' + eventType.substr(0,1).toUpperCase() + eventType.substr(1); if (document.createEvent) { event = document.createEvent('HTMLEvents'); @@ -254,9 +254,14 @@ function triggerEvent(eventType, options) { } if (document.createEvent) { + // IE9 if standards document.dispatchEvent(event); } else { - document.fireEvent('on' + event.eventType.toLowerCase(), event); + // IE8 regardless of Quirks or Standards + // IE9 if quirks + try { + document.fireEvent('on' + event.eventType.toLowerCase(), event); + } catch(e) {} } } From fbb1bdd6a8137ebdc4154efcdddbf2e3a377495b Mon Sep 17 00:00:00 2001 From: Jason Buckner Date: Mon, 22 Jul 2013 10:13:37 -0700 Subject: [PATCH 2/2] change substr() to substring() for performance a jsperf comparing the two: http://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/14 --- src/raven.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/raven.js b/src/raven.js index 273a4f251f8f..c7c8056c3244 100644 --- a/src/raven.js +++ b/src/raven.js @@ -235,7 +235,7 @@ var Raven = { function triggerEvent(eventType, options) { var event, key; - eventType = 'raven' + eventType.substr(0,1).toUpperCase() + eventType.substr(1); + eventType = 'raven' + eventType.substring(0,1).toUpperCase() + eventType.substring(1); if (document.createEvent) { event = document.createEvent('HTMLEvents');