mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Polyfill Meteor._localStorage on the server too.
Although Meteor._localStorage has historically been used only in browsers, it can be helpful on the server for writing isomorphic code.
This commit is contained in:
@@ -5,52 +5,42 @@
|
||||
// trying to use it throws.
|
||||
// Accessing window.localStorage can also immediately throw an error in IE (#1291).
|
||||
|
||||
var hasOwn = Object.prototype.hasOwnProperty;
|
||||
var storage = global.localStorage;
|
||||
var key = '_localstorage_test_' + Random.id();
|
||||
var retrieved;
|
||||
|
||||
try {
|
||||
if (window.localStorage) {
|
||||
window.localStorage.setItem(key, key);
|
||||
retrieved = window.localStorage.getItem(key);
|
||||
window.localStorage.removeItem(key);
|
||||
if (storage) {
|
||||
storage.setItem(key, key);
|
||||
retrieved = storage.getItem(key);
|
||||
storage.removeItem(key);
|
||||
}
|
||||
} catch (e) {
|
||||
// ... ignore
|
||||
}
|
||||
} catch (ignored) {}
|
||||
|
||||
if (key === retrieved) {
|
||||
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);
|
||||
}
|
||||
};
|
||||
Meteor._localStorage = storage;
|
||||
}
|
||||
|
||||
if (!Meteor._localStorage) {
|
||||
Meteor._debug(
|
||||
"You are running a browser with no localStorage or userData "
|
||||
+ "support. Logging in from one tab will not cause another "
|
||||
+ "tab to be logged in.");
|
||||
|
||||
Meteor._localStorage = {
|
||||
_data: {},
|
||||
if (! Meteor._localStorage) {
|
||||
if (Meteor.isClient) {
|
||||
Meteor._debug(
|
||||
"You are running a browser with no localStorage or userData "
|
||||
+ "support. Logging in from one tab will not cause another "
|
||||
+ "tab to be logged in.");
|
||||
}
|
||||
|
||||
Meteor._localStorage = Object.create({
|
||||
setItem: function (key, val) {
|
||||
this._data[key] = val;
|
||||
this[key] = val;
|
||||
},
|
||||
|
||||
removeItem: function (key) {
|
||||
delete this._data[key];
|
||||
delete this[key];
|
||||
},
|
||||
|
||||
getItem: function (key) {
|
||||
var value = this._data[key];
|
||||
if (value === undefined)
|
||||
return null;
|
||||
else
|
||||
return value;
|
||||
return hasOwn.call(this, key) ? this[key] : null;
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,17 +1,15 @@
|
||||
Package.describe({
|
||||
summary: "Simulates local storage on IE 6,7 using userData",
|
||||
version: "1.0.12"
|
||||
version: "1.1.0"
|
||||
});
|
||||
|
||||
Package.onUse(function (api) {
|
||||
api.use('random', 'client');
|
||||
|
||||
api.addFiles('localstorage.js', 'client');
|
||||
api.use('random');
|
||||
api.addFiles('localstorage.js');
|
||||
});
|
||||
|
||||
Package.onTest(function (api) {
|
||||
api.use('localstorage', 'client');
|
||||
api.use('localstorage');
|
||||
api.use('tinytest');
|
||||
|
||||
api.addFiles('localstorage_tests.js', 'client');
|
||||
api.addFiles('localstorage_tests.js');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user