From c02693023553ed6cbd66afb801a23fa874a55e4b Mon Sep 17 00:00:00 2001 From: egilkh Date: Mon, 17 Aug 2015 22:49:48 +0200 Subject: [PATCH 1/2] Add check for angular AND angular.module. This should surely mean angular is correctly defined? Should fix #123. --- ngStorage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ngStorage.js b/ngStorage.js index a20dcb9..4741982 100644 --- a/ngStorage.js +++ b/ngStorage.js @@ -14,7 +14,7 @@ // RequireJS does not pass in Angular to us (will be undefined). // Fallback to window which should mostly be there. - angular = angular || window.angular; + angular = (angular && angular.module ) ? angular : window.angular; /** * @ngdoc overview From 5ade3188336d298f1db1b330fdfa8ae1c7417858 Mon Sep 17 00:00:00 2001 From: egilkh Date: Tue, 18 Aug 2015 13:30:50 +0200 Subject: [PATCH 2/2] Use real length of prefix. Should fix #137. --- ngStorage.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ngStorage.js b/ngStorage.js index 4741982..b1c2219 100644 --- a/ngStorage.js +++ b/ngStorage.js @@ -127,6 +127,10 @@ return supported; } + // The magic number 10 is used which only works for some keyPrefixes... + // See https://github.com/gsklee/ngStorage/issues/137 + var prefixLength = storageKeyPrefix.length; + // #9: Assign a placeholder object if Web Storage is unavailable to prevent breaking the entire AngularJS app var webStorage = isStorageSupported(storageType) || ($log.warn('This browser does not support Web Storage!'), {setItem: angular.noop, getItem: angular.noop}), $storage = { @@ -148,7 +152,7 @@ $sync: function () { for (var i = 0, l = webStorage.length, k; i < l; 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)) && storageKeyPrefix === k.slice(0, 10) && ($storage[k.slice(10)] = deserializer(webStorage.getItem(k))); + (k = webStorage.key(i)) && storageKeyPrefix === k.slice(0, prefixLength) && ($storage[k.slice(prefixLength)] = deserializer(webStorage.getItem(k))); } } }, @@ -183,8 +187,8 @@ // #6: Use `$window.addEventListener` instead of `angular.element` to avoid the jQuery-specific `event.originalEvent` $window.addEventListener && $window.addEventListener('storage', function(event) { - if (storageKeyPrefix === event.key.slice(0, 10)) { - event.newValue ? $storage[event.key.slice(10)] = deserializer(event.newValue) : delete $storage[event.key.slice(10)]; + if (storageKeyPrefix === event.key.slice(0, prefixLength)) { + event.newValue ? $storage[event.key.slice(prefixLength)] = deserializer(event.newValue) : delete $storage[event.key.slice(prefixLength)]; _last$storage = angular.copy($storage);