From 813572de4734f980951e8c5d91a7bb9b095aa50c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Astori?= Date: Tue, 20 Sep 2016 23:43:23 -0400 Subject: [PATCH] Ensure localStorage cannot fail because of quota or Safari private browsing See http://stackoverflow.com/q/14555347/1935861 --- client/js/lounge.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/client/js/lounge.js b/client/js/lounge.js index a5105f1b..cca024b9 100644 --- a/client/js/lounge.js +++ b/client/js/lounge.js @@ -54,6 +54,16 @@ $(function() { return Handlebars.templates[name](data); } + function setLocalStorageItem(key, value) { + try { + window.localStorage.setItem(key, value); + } catch (e) { + // Do nothing. If we end up here, web storage quota exceeded, or user is + // in Safari's private browsing where localStorage's setItem is not + // available. See http://stackoverflow.com/q/14555347/1935861. + } + } + Handlebars.registerHelper( "partial", function(id) { return new Handlebars.SafeString(render(id, this)); @@ -125,7 +135,7 @@ $(function() { } if (data.token && window.localStorage.getItem("token") !== null) { - window.localStorage.setItem("token", data.token); + setLocalStorageItem("token", data.token); } passwordForm @@ -144,7 +154,7 @@ $(function() { } if (data.token && $("#sign-in-remember").is(":checked")) { - window.localStorage.setItem("token", data.token); + setLocalStorageItem("token", data.token); } else { window.localStorage.removeItem("token"); } @@ -506,7 +516,7 @@ $(function() { options[name] = self.val(); } - window.localStorage.setItem("settings", JSON.stringify(options)); + setLocalStorageItem("settings", JSON.stringify(options)); if ([ "join", @@ -1005,7 +1015,7 @@ $(function() { } }); if (values.user) { - window.localStorage.setItem("user", values.user); + setLocalStorageItem("user", values.user); } socket.emit( event, values