1.4.0

- Add `timeout` option to set a minimum transport timeout. Fixes #403
- Update dev deps to fix security warnings from `npm audit`
- Guard against null `this._transport` in `debug` statement. Fixes #448

# 1.3.0

- Revert `debug` to `^3` because v4 starts using ES6. Fixes #457

# 1.2.0

- Update all outdated dependencies
- Switch to karma and browserstack for running automated browser tests

# 1.1.5

- Wrap the the contentWindow access in a try/catch block when in setTimeout #363
- Revised example in README #356
- Fix connection close when Transport timeout #358
- Fixed crash with react.nosp@m.-nat.nosp@m.ive@0.nosp@m..45.1 on Android #386
- Update jsDelivr link #404, #405
- Remove Sauce Labs unsupported browsers
- Add link to rust server implementation #411
- location.protocol should include final `:` #396

# 1.1.4

- Upgrade `debug` and fix object key literal mangling, fixes regression in Opera 11.10 #359
- Trim descriptions in package.json and bower.json - #372

# 1.1.3

- Bad publish to NPM (removed)

# 1.1.2

- Ensure both sender and receiver are cleaned upon close - #342
- Remove event listeners before calling `close` - #344
- Update documentation links - #351, #339, #316
- Explicitly export `undefined` when `WebSocket` does not exist. Fixes Webpack. #321
- Include `dist` folder on npm - #265
- Simplify build setup
- Update to Node.js 6.9
- Add sourcemap for minified version
- Remove unused String.trim shim

# 1.1.1

- Do not pass `protocols` or `options` arguments to browser WebSocket constructor - #309

# 1.1.0

- Fix IE7/8 usage of `console.log` which does not have `apply` - #279
- Remove `dbg` global variable - #282
- Bump `faye-websocket` version to `0.11.0` - #267
- Optimize `arguments` usage - #263
- Add sourcemap file to dist folder - #237
- Add way to transparently pass transport-specific options - #272

# 1.0.3

- Use `https` module for xhr requests in node when url uses https - #254

# 1.0.2

- Fix iframe info receiver url
- Move iframe.contentWindow check inside setTimeout - #246

# 1.0.1

- Use proper base url for iframe-based info receiver - #249
- Don't register unload event in chrome packaged app - #223
- Allow custom session ids - #250
- Remove version property from bower.json - #247
- Update example CDN url - #244

# 1.0.0

- Simplify url handling by delegating to `url-parse` - #242
- Upgrade to `url-parse` 1.0.1 to fix colon issue if auth has no password

# 1.0.0-beta.13

- Transport timeout on connection should fallback - #238

# 1.0.0-beta.12

- Upgrade `url-parse` to 1.0.0 to fix #218 again

# 1.0.0-beta.10

- Upgrade `url-parse` to 0.2.3 to fix #222

# 1.0.0-beta.9

- Upgrade `url-parse` to 0.2.1 to fix 'too much recursion' errors

# 1.0.0-beta.8

- Upgrade `url-parse` to 0.2.0 to fix inheritance issues

# 1.0.0-beta.7

- Upgrade `url-parse` to 0.1.5 to fix #218
- Don't strip basic auth from url - #219

# 1.0.0-beta.6

- Upgrade `url-parse` to 0.1.3 to avoid CSP issues

# 1.0.0-beta.5

- Upgrade `url-parse` to 0.1.1 to fix #214

# 1.0.0-beta.4

- Upgrade `url-parse` to 0.1.0 and `sockjs` to 0.3.11
- Update .npmignore

# 1.0.0-beta.3

- Move `debug` from devDependencies to dependencies

# 1.0.0-beta.2

- Relax requirements when using same origin XHR - #80
- Upgrade to JSON3 from JSON2 - #123
- Package library with browserify supporting the UMD pattern - #184
- Move tests to JavaScript
- Add Gulp.js build script
- Fix getOrigin for file:/// urls and standard ports - #173
- Add onerror event handlers to Websockets - #169
- Increase RTO lower bound to prevent spurious timeouts on IE8/9 - #161
- Use window.crypto for random values when available - #128
- Fix handling of listeners added and removed mid-dispatch - #127
- Fix XHR Streaming for IE8 - #83
- Remove explicit AMD name - #107
- Check for an empty response from /info request - #143
- Add Content-Type to XHR requests to fix issue over HTTPS on Galaxy S4 - #164
- Fix iframe fallback when message is sent from a popup in IE7/8 - #166
- Add support for query strings on the url - #72
- Now works inside of Web Workers - #181
- Support EventSource / Server Sent Events outside of iframes - #201
- Rename protocols to transports - #65
- Allow transports which need the body to trigger on 'interactive' readyState - #175
- try/catch access to document.domain - #187
- Use `window.location` instead of `document.location` - #195
- Allow usage from node.js with same API

# 0.3.4

- Mentioned njoyce's fork of sockjs-gevent.
- #90 - Don't catch onbeforeunload event - it breaks javascript:// links in IE.
- IE mangles 204 response code for 1223 on ajax, see: http://bugs.jquery.com/ticket/1450
- Make `new` optional for SockJS constructor (via substack).
- It is impossible to cancel JSONP polling request - compensate for that.
- Refactored EventEmitter prototype (used only internally)
- #66 - Failure to post data to /xhr_send should kill the session

# 0.3.2

- #77 - Getting /info on modern browsers when html is served from file:// urls was broken.

# 0.3.1

- #61 - Meteor guys found that we unintentionally catch "onopen" errors.
- #63 - Meteorjs guys found that xhr-streaming on Safari sometimes left busy cursor running.
- Increased allowed time for websocket transport (from 1 rtt to 2), this should make ws transport more reliable over SSL, at the cost of slightly longer connection time for users with blocked ws.
- #57 - previous fix didn't really work, sockjs-client still left a mess in browsers history when using iframe transports. This is fixed now.
- #60 - Opera 12 (next) claims to do AJAX2 / CORS, but can't do xhr-streaming.
- #58 - onunload test sometimes failed on Safari on windows
- Updated readme WRT websocket protocols
- Updated readme WRT deployments on heroku
- Add minimalistic license block to every source file.

# 0.3.0

- Temporarily disabled iframe tests - they are failing unpredictably.
- #57 - pointing an iframe to "about:blank" during cleanup caused Opera to messup history.
- #55 - Improved iframe abstraction (reduced a possible mem leak)
- Refactored AJAX abstractions, for better CORS handing - again.
- Add additional parent origin security check to an iframe.
- Urls with hashes or query strings can't be passed to SockJS.
- #18 - Mention workaround for Firefox ESC key issue
- #53 - AMD compliance
- sockjs/sockjs-protocol#28 - always use square brackets for websocket frames
- #51 - initial support for IE10 - try XHR before XDR
- #28 - handle onunload / onbeforeunload in a more robust fashion
- #49 - support SockJS-client being used from files served from file:// urls.

# 0.2.1

- "smoke-latency.html" test was unnecesairly sending too much data.
- Bumped core dependencies (coffee-script and uglify-js)
- Minor updates to the README, few cosmetic changes in the code.

# 0.2.0

- The API had changed - use `protocols_whitelist` option instead of passing an array of protocols as a second argument to SockJS constructor.
- Dropped 'chunking-test' functionality and replace it with 'info'.
- Rewritten protocol-choosing alogirthm, see "utils.detectProtocols" method.
- Use dynamic protocol timeouts based on RTT, not hardcoded 5 seconds
- #34 - Don't ever reuse `session_id`, especially when trying fallback protocols.
- The test server got moved from SockJS-client to SockJS-node.
- Don't test unicode surrogates - it can't work in some environments.
- XHR/XDR helpers were rewritten, ajax transports were simplified.
- Added a domain check in the iframe to improve security.
- SockJS will now trigger 1002 error if there is a problem during handshake instead of 2000 error.
- Smoke-throughput test is renamed to smoke-latency.

# 0.1.2

- #29 - Allow all unicode characters to be send over SockJS.
- #15 - SockJS should now work fine even if the connection is started in HEAD, before BODY is loaded.
- #28 - In rare circumstances WebSocket connection can be left intact after the page is unloaded in FireFox.
- Updated scripts to work with Node 0.6.
- Initial work to do better QUnit testing.
- Updated the minifying script (always escape unicode chars, remove trailing comment).
- Use string instead of array of chars (utils.js:random_number_string).

# 0.1.1

- #21 Get JsonP transport working on IE9 (Vladimir Dronnikov).
- #26 Emit heartbeat event.
- #27 Include license inline.

# 0.1.0

- SockJS-client can only send UTF-8 encodable strings. Previously we took advantage of rich data structures and automatically json-encoded them, but this got removed. Now, all data passed to `send` will be converted to string. This is also how native
- `status` property on `EventClose` is renamed to `code` as per Websocket API WebSockets behave.
- The test server was updated to new `sockjs-node` API
- Fixed problem with Jsonp-polling transport on IE9
- Repository was moved - updated links.

# 0.0.4

- All transports were refactored, some transports were introduced: htmlfile and separate xhr-streaming.
- Added logic to detect support for http chunking, and thus a possibility to rule out streaming transports before running them.
- Added 'cookie' option, useful for cookie-based load balancing (currently, it make a difference only for IE).
- Added hack to prevent EventSource from crashing Safari and Chrome.
- Loads and loads of other small and medium changes.

# 0.0.2

- Initial support for JSESSIONID based load balancing. Currently doesn't play nicely with IE XDomainRequest transport.

# 0.0.1

- Initial release.