broadcastchannel-polyfill
Version:
Polyfill for BroadcastChannel for Safari, old Chrome and Opera
26 lines (16 loc) • 1.54 kB
Markdown
BroadcastChannel polyfill
===================================
This is a polyfill for [BroadcastChannel](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API).
**It is just a published copy of [Joshua Bell's gist](https://gist.github.com/inexorabletash/52f437d1451d12145264)**
(since [broadcast-channel polyfill](https://www.npmjs.com/package/broadcast-channel) won't work for our project).
It requires [Message Channel support](http://caniuse.com/#feat=channel-messaging), so should work in:
* Chrome 4+
* Safari 5+
* Opera 11.5+
Does not work in:
* Firefox 37- (neither BroadcastChannel nor MessageChannel)
* IE (??)
### Caveats ###
* The real API should let you transmit anything which can copied by the [structured cloning algorithm](https://html.spec.whatwg.org/multipage/infrastructure.html#structured-clone). This polyfill only copies things using `JSON.stringify()`/`JSON.parse()` so it is much more limited.
* This polyfill uses [DOM Storage](https://html.spec.whatwg.org/multipage/#toc-webstorage) (`localStorage`) and `storage` events. DOM Storage is a synchronous API and so may cause performance issues in pages. In addition, it is not exposed to Workers. Therefore, the polyfill will not function in Workers.
* Unique storage keys are used for each message, and are cleaned up a few hundred milliseconds after transmission. This is a total hack and may result in the messages failing to be received (if the write and delete are coalesced) or persisting (if the cleanup is prevented by page close).