Skip to content

Commit 14ab6ff

Browse files
committed
Merge pull request #28 from ManuelB/support-ie11-with-custom-event
* Fixed ie11 problem by using a document.createEvent('CustomEvent'); in...
2 parents b5a880e + 485ca31 commit 14ab6ff

File tree

1 file changed

+24
-7
lines changed

1 file changed

+24
-7
lines changed

reconnecting-websocket.js

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,28 @@
114114
this.removeEventListener = eventTarget.removeEventListener.bind(eventTarget);
115115
this.dispatchEvent = eventTarget.dispatchEvent.bind(eventTarget);
116116

117+
/**
118+
* This function generates an event that is compatible with standard
119+
* compliant browsers and IE9 - IE11
120+
*
121+
* This will prevent the error:
122+
* Object doesn't support this action
123+
*
124+
* http://stackoverflow.com/questions/19345392/why-arent-my-parameters-getting-passed-through-to-a-dispatched-event/19345563#19345563
125+
* @param s String The name that the event should use
126+
* @param args Object an optional object that the event will use
127+
*/
128+
function generateEvent(s, args) {
129+
var evt = document.createEvent("CustomEvent");
130+
evt.initCustomEvent(s, false, false, args);
131+
return evt;
132+
};
133+
117134
function connect(reconnectAttempt) {
118135
ws = new WebSocket(url, protocols || []);
119136

120137
if (!reconnectAttempt) {
121-
eventTarget.dispatchEvent(new Event('connecting'));
138+
eventTarget.dispatchEvent(generateEvent('connecting'));
122139
}
123140

124141
if (self.debug || ReconnectingWebSocket.debugAll) {
@@ -143,7 +160,7 @@
143160
self.protocol = ws.protocol;
144161
self.readyState = WebSocket.OPEN;
145162
self.reconnectAttempts = 0;
146-
var e = new Event('open');
163+
var e = generateEvent('open');
147164
e.isReconnect = reconnectAttempt;
148165
reconnectAttempt = false;
149166
eventTarget.dispatchEvent(e);
@@ -155,15 +172,15 @@
155172
if (forcedClose) {
156173
self.readyState = WebSocket.CLOSED;
157174
self.onclose(event);
158-
eventTarget.dispatchEvent(new Event('close'));
175+
eventTarget.dispatchEvent(generateEvent('close'));
159176
} else {
160177
self.readyState = WebSocket.CONNECTING;
161-
eventTarget.dispatchEvent(new Event('connecting'));
178+
eventTarget.dispatchEvent(generateEvent('connecting'));
162179
if (!reconnectAttempt && !timedOut) {
163180
if (self.debug || ReconnectingWebSocket.debugAll) {
164181
console.debug('ReconnectingWebSocket', 'onclose', url);
165182
}
166-
eventTarget.dispatchEvent(new Event('close'));
183+
eventTarget.dispatchEvent(generateEvent('close'));
167184
}
168185
setTimeout(function() {
169186
self.reconnectAttempts++;
@@ -175,15 +192,15 @@
175192
if (self.debug || ReconnectingWebSocket.debugAll) {
176193
console.debug('ReconnectingWebSocket', 'onmessage', url, event.data);
177194
}
178-
var e = new Event('message');
195+
var e = generateEvent('message');
179196
e.data = event.data;
180197
eventTarget.dispatchEvent(e);
181198
};
182199
ws.onerror = function(event) {
183200
if (self.debug || ReconnectingWebSocket.debugAll) {
184201
console.debug('ReconnectingWebSocket', 'onerror', url, event);
185202
}
186-
eventTarget.dispatchEvent(new Event('event'));
203+
eventTarget.dispatchEvent(generateEvent('event'));
187204
};
188205
}
189206
connect(false);

0 commit comments

Comments
 (0)