Protection against possible local storage write errors.

This commit is contained in:
Paulo Reis 2016-07-27 16:17:16 +01:00
parent 64654257a1
commit 406175a410

View file

@ -4,14 +4,18 @@ define [
CACHE_KEY = "countlyEvents" CACHE_KEY = "countlyEvents"
_getEventCache = () -> _getEventCache = () ->
eventCache = window.localStorage.getItem CACHE_KEY eventCacheStr = window.localStorage.getItem CACHE_KEY
# Initialize as an empy object if the event cache is still empty. # Initialize as an empy object if the event cache is still empty.
if !eventCache? if !eventCacheStr?
window.localStorage.setItem(CACHE_KEY, "{}") eventCacheStr = "{}"
eventCache = window.localStorage.getItem CACHE_KEY
return JSON.parse eventCache # Errors writing to localStorage may happen when quota is full or
# browser is in incognito mode. We'll return an empty object, anyway.
try
window.localStorage.setItem CACHE_KEY, eventCacheStr
return JSON.parse eventCacheStr
_eventInCache = (key) -> _eventInCache = (key) ->
curCache = _getEventCache() curCache = _getEventCache()
@ -25,8 +29,12 @@ define [
curCache = _getEventCache() curCache = _getEventCache()
curCache[key] = true curCache[key] = true
curCacheAsStr = JSON.stringify curCache curCacheAsStr = JSON.stringify curCache
# Protection against issues mentioned above.
try
window.localStorage.setItem CACHE_KEY, curCacheAsStr window.localStorage.setItem CACHE_KEY, curCacheAsStr
App.factory "event_tracking", -> App.factory "event_tracking", ->
return { return {