/** * # hasLocalStorage() * * returns `true` or `false` depending on whether localStorage is supported or not. * Beware that some browsers like Safari do not support localStorage in private mode. * * inspired by this cappuccino commit * https://github.com/cappuccino/cappuccino/commit/063b05d9643c35b303568a28809e4eb3224f71ec * * @returns {Boolean} */ function hasLocalStorage() { try { // we've to put this in here. I've seen Firefox throwing `Security error: 1000` // when cookies have been disabled if (typeof localStorage === 'undefined') { return false; } // Just because localStorage exists does not mean it works. In particular it might be disabled // as it is when Safari's private browsing mode is active. localStorage.setItem('Storage-Test', '1'); // that should not happen ... if (localStorage.getItem('Storage-Test') !== '1') { return false; } // okay, let's clean up if we got here. localStorage.removeItem('Storage-Test'); } catch (_error) { // in case of an error, like Safari's Private Mode, return false return false; } // we're good. return true; } if (typeof exports === 'object') { module.exports = hasLocalStorage; }