Skip to content

Commit

Permalink
Merge pull request #1 from mrkoreye/master
Browse files Browse the repository at this point in the history
Pulling in needed exception handling PR
  • Loading branch information
tehshane committed Apr 2, 2015
2 parents bea0498 + fcb0311 commit 0c5c3c6
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 4 deletions.
39 changes: 36 additions & 3 deletions ngStorage.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,8 @@
$window,
$log
){
// #9: Assign a placeholder object if Web Storage is unavailable to prevent breaking the entire AngularJS app
var webStorage = $window[storageType] || ($log.warn('This browser does not support Web Storage!'), {}),
$storage = {
var webStorage,
$storage = {
$default: function(items) {
for (var k in items) {
angular.isDefined($storage[k]) || ($storage[k] = items[k]);
Expand All @@ -59,6 +58,40 @@
_last$storage,
_debounce;

// #9: Assign a placeholder object if Web Storage is unavailable to prevent breaking the entire AngularJS app
try {
webStorage = $window[storageType];
// Checking webStorage.length is necessary here because Firefox allows webStorage = $window[storageType];
// for sessionStorage, even if the user has blocked all cookies/storage. However, security error then shows up when
// webStorage.length is called
webStorage.length;
// In private browsing mode Safari disables setting of localStorage, even though localStorage is accessible.
// To avoid 'Error: QuotaExceededError: DOM Exception 22', check to see if we can set a value and then remove it
webStorage.setItem('webStorageTest', 1);
webStorage.removeItem('webStorageTest');
} catch (e) {
$log.log('This browser does not support Web Storage, or Web Storage is disabled.');

var data = {},
undef;
webStorage = {
setItem: function(id, val) {
return data[id] = String(val);
},
getItem: function(id) {
return data.hasOwnProperty(id) ? data[id] : undef;
},
removeItem: function(id) {
return delete data[id];
},
clear: function() {
return data = {};
},
// This is only a shim and not meant to be updated. It avoids webStorage.length == undefined in the loop below.
length: 0
};
}

for (var i = 0, k; i < webStorage.length; i++) {
// #8, #10: `webStorage.key(i)` may be an empty string (or throw an exception in IE9 if `webStorage` is empty)
(k = webStorage.key(i)) && 'ngStorage-' === k.slice(0, 10) && ($storage[k.slice(10)] = angular.fromJson(webStorage.getItem(k)));
Expand Down
2 changes: 1 addition & 1 deletion ngStorage.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 0c5c3c6

Please sign in to comment.