Skip to content

Commit a7fd07b

Browse files
committed
Merge pull request #28 from amplitude/localstorage_exceptions
Check that Window.localStorage is available
2 parents bbc4c08 + 551a70c commit a7fd07b

File tree

4 files changed

+36
-4
lines changed

4 files changed

+36
-4
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
## Unreleased
22

3+
* Fix bug to check that Window localStorage is available for use.
4+
35
## 2.4.0 (September 4, 2015)
46

57
* Add support for passing callback functions to logEvent

amplitude.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1572,7 +1572,22 @@ module.exports = {
15721572
*/
15731573
var localStorage; // jshint ignore:line
15741574

1575-
if (window.localStorage) {
1575+
// test that Window.localStorage is available and works
1576+
function windowLocalStorageAvailable() {
1577+
var uid = new Date();
1578+
var result;
1579+
try {
1580+
window.localStorage.setItem(uid, uid);
1581+
result = window.localStorage.getItem(uid) === String(uid);
1582+
window.localStorage.removeItem(uid);
1583+
return result;
1584+
} catch (e) {
1585+
// localStorage not available
1586+
}
1587+
return false;
1588+
}
1589+
1590+
if (windowLocalStorageAvailable()) {
15761591
localStorage = window.localStorage;
15771592
} else if (window.globalStorage) {
15781593
// Firefox 2-3 use globalStorage

amplitude.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/localstorage.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,22 @@
55
*/
66
var localStorage; // jshint ignore:line
77

8-
if (window.localStorage) {
8+
// test that Window.localStorage is available and works
9+
function windowLocalStorageAvailable() {
10+
var uid = new Date();
11+
var result;
12+
try {
13+
window.localStorage.setItem(uid, uid);
14+
result = window.localStorage.getItem(uid) === String(uid);
15+
window.localStorage.removeItem(uid);
16+
return result;
17+
} catch (e) {
18+
// localStorage not available
19+
}
20+
return false;
21+
}
22+
23+
if (windowLocalStorageAvailable()) {
924
localStorage = window.localStorage;
1025
} else if (window.globalStorage) {
1126
// Firefox 2-3 use globalStorage

0 commit comments

Comments
 (0)