|
114 | 114 | this.removeEventListener = eventTarget.removeEventListener.bind(eventTarget); |
115 | 115 | this.dispatchEvent = eventTarget.dispatchEvent.bind(eventTarget); |
116 | 116 |
|
| 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 | + |
117 | 134 | function connect(reconnectAttempt) { |
118 | 135 | ws = new WebSocket(url, protocols || []); |
119 | 136 |
|
120 | 137 | if (!reconnectAttempt) { |
121 | | - eventTarget.dispatchEvent(new Event('connecting')); |
| 138 | + eventTarget.dispatchEvent(generateEvent('connecting')); |
122 | 139 | } |
123 | 140 |
|
124 | 141 | if (self.debug || ReconnectingWebSocket.debugAll) { |
|
143 | 160 | self.protocol = ws.protocol; |
144 | 161 | self.readyState = WebSocket.OPEN; |
145 | 162 | self.reconnectAttempts = 0; |
146 | | - var e = new Event('open'); |
| 163 | + var e = generateEvent('open'); |
147 | 164 | e.isReconnect = reconnectAttempt; |
148 | 165 | reconnectAttempt = false; |
149 | 166 | eventTarget.dispatchEvent(e); |
|
155 | 172 | if (forcedClose) { |
156 | 173 | self.readyState = WebSocket.CLOSED; |
157 | 174 | self.onclose(event); |
158 | | - eventTarget.dispatchEvent(new Event('close')); |
| 175 | + eventTarget.dispatchEvent(generateEvent('close')); |
159 | 176 | } else { |
160 | 177 | self.readyState = WebSocket.CONNECTING; |
161 | | - eventTarget.dispatchEvent(new Event('connecting')); |
| 178 | + eventTarget.dispatchEvent(generateEvent('connecting')); |
162 | 179 | if (!reconnectAttempt && !timedOut) { |
163 | 180 | if (self.debug || ReconnectingWebSocket.debugAll) { |
164 | 181 | console.debug('ReconnectingWebSocket', 'onclose', url); |
165 | 182 | } |
166 | | - eventTarget.dispatchEvent(new Event('close')); |
| 183 | + eventTarget.dispatchEvent(generateEvent('close')); |
167 | 184 | } |
168 | 185 | setTimeout(function() { |
169 | 186 | self.reconnectAttempts++; |
|
175 | 192 | if (self.debug || ReconnectingWebSocket.debugAll) { |
176 | 193 | console.debug('ReconnectingWebSocket', 'onmessage', url, event.data); |
177 | 194 | } |
178 | | - var e = new Event('message'); |
| 195 | + var e = generateEvent('message'); |
179 | 196 | e.data = event.data; |
180 | 197 | eventTarget.dispatchEvent(e); |
181 | 198 | }; |
182 | 199 | ws.onerror = function(event) { |
183 | 200 | if (self.debug || ReconnectingWebSocket.debugAll) { |
184 | 201 | console.debug('ReconnectingWebSocket', 'onerror', url, event); |
185 | 202 | } |
186 | | - eventTarget.dispatchEvent(new Event('event')); |
| 203 | + eventTarget.dispatchEvent(generateEvent('event')); |
187 | 204 | }; |
188 | 205 | } |
189 | 206 | connect(false); |
|
0 commit comments