diff --git a/src/addons/channels.js b/src/addons/channels.js index e9889e49e..18921d289 100644 --- a/src/addons/channels.js +++ b/src/addons/channels.js @@ -1,23 +1,11 @@ -import EventTargetShim from './event-target'; +let changeChannel; +let reloadChannel; -// Legacy Edge does not support BroadcastChannel. -// We only bother checking to make sure nothing errors. Users should update their browser if they want things to work. -let _BroadcastChannel = window.BroadcastChannel; -if (!_BroadcastChannel) { - _BroadcastChannel = class extends EventTargetShim { - constructor (name) { - super(); - this.name = name; - } - postMessage () { - - } - }; +if (typeof BroadcastChannel !== 'undefined') { + changeChannel = new BroadcastChannel('addons-change'); + reloadChannel = new BroadcastChannel('addons-reload'); } -const changeChannel = new _BroadcastChannel('addons-change'); -const reloadChannel = new _BroadcastChannel('addons-reload'); - export default { changeChannel, reloadChannel diff --git a/src/addons/settings/settings.jsx b/src/addons/settings/settings.jsx index 987d18e1f..eb79dc072 100644 --- a/src/addons/settings/settings.jsx +++ b/src/addons/settings/settings.jsx @@ -552,12 +552,14 @@ const Dirty = props => (
{settingsTranslations['tw.addons.settings.dirty']} - + {props.onReloadNow && ( + + )}
); @@ -723,7 +725,9 @@ class AddonSettingsComponent extends React.Component { document.body.removeEventListener('keydown', this.handleKeyDown); } handleSettingStoreChanged (e) { - const {addonId, settingId, value, reloadRequired} = e.detail; + const {addonId, settingId, value} = e.detail; + // If channels are unavailable, every change requires reload. + const reloadRequired = e.detail.reloadRequired || !Channels.changeChannel; this.setState(state => { const newState = { [addonId]: { @@ -864,7 +868,7 @@ class AddonSettingsComponent extends React.Component { {this.state.dirty && ( )} diff --git a/src/playground/render-interface.jsx b/src/playground/render-interface.jsx index c09cf9ba6..3af041645 100644 --- a/src/playground/render-interface.jsx +++ b/src/playground/render-interface.jsx @@ -74,14 +74,18 @@ const WrappedMenuBar = compose( SBFileUploaderHOC )(MenuBar); -AddonChannels.reloadChannel.addEventListener('message', () => { - location.reload(); -}); +if (AddonChannels.reloadChannel) { + AddonChannels.reloadChannel.addEventListener('message', () => { + location.reload(); + }); +} -AddonChannels.changeChannel.addEventListener('message', e => { - const store = e.data.store; - SettingsStore.setStore(store); -}); +if (AddonChannels.changeChannel) { + AddonChannels.changeChannel.addEventListener('message', e => { + const store = e.data.store; + SettingsStore.setStore(store); + }); +} import(/* webpackChunkName: "addons" */ '../addons/entry');