diff --git a/packages/localstorage/localstorage.js b/packages/localstorage/localstorage.js index c943385137..70907463d7 100644 --- a/packages/localstorage/localstorage.js +++ b/packages/localstorage/localstorage.js @@ -21,7 +21,33 @@ try { } catch (ignored) {} if (key === retrieved) { - Meteor._localStorage = storage; + if (Meteor.isServer) { + Meteor._localStorage = storage; + } else { + // IE11 doesn't handle properly attempts to change methods of the + // window.localStorage, attempts to do so will result in the complete + // break of the localStorage system for the domain in which it is + // done - until the user clean the browser/domain cache. + // + // Therefore, in the web, we don't set Meteor._localStorage to be a + // reference to window.localStorage . Instead, we set proxy methods. + // + // This will allow package developers that will find a need to change + // the behavior of Meteor._localStorage methods to do so without breaking + // the localStorage system on IE11. (e.g. meteorhacks:fast-render) + + Meteor._localStorage = { + getItem: function (key) { + return window.localStorage.getItem(key); + }, + setItem: function (key, value) { + window.localStorage.setItem(key, value); + }, + removeItem: function (key) { + window.localStorage.removeItem(key); + } + }; + } } if (! Meteor._localStorage) {