From 2c4fdb9a1dce47248b4dff9228c1df2471cc2e15 Mon Sep 17 00:00:00 2001 From: Endel Dreyer Date: Fri, 9 Feb 2024 13:39:46 -0300 Subject: [PATCH] workaround for 'Access is denied' for localStorage. #139 --- package-lock.json | 4 ++-- package.json | 2 +- src/Storage.ts | 28 ++++++++++++++++++---------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5c41f7d..c351496 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "colyseus.js", - "version": "0.15.13", + "version": "0.15.18", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "colyseus.js", - "version": "0.15.13", + "version": "0.15.18", "license": "MIT", "dependencies": { "@colyseus/schema": "^2.0.4", diff --git a/package.json b/package.json index 4dbfa11..fcee546 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "colyseus.js", - "version": "0.15.17", + "version": "0.15.18", "description": "Colyseus Multiplayer SDK for JavaScript/TypeScript", "author": "Endel Dreyer", "license": "MIT", diff --git a/src/Storage.ts b/src/Storage.ts index 8bf44bc..f3cdc04 100644 --- a/src/Storage.ts +++ b/src/Storage.ts @@ -10,18 +10,26 @@ let storage: any; function getStorage(): Storage { if (!storage) { - storage = (typeof (cc) !== 'undefined' && cc.sys && cc.sys.localStorage) - ? cc.sys.localStorage // compatibility with cocos creator - : typeof (window) !== "undefined" && window.localStorage //RN does have window object at this point, but localStorage is not defined - ? window.localStorage // regular browser environment - : { // mock localStorage for Node.js or RN environment - cache: {}, - setItem: function(key, value) { this.cache[key] = value; }, - getItem: function(key) { this.cache[key]; }, - removeItem: function(key) { delete this.cache[key]; }, - }; + try { + storage = (typeof (cc) !== 'undefined' && cc.sys && cc.sys.localStorage) + ? cc.sys.localStorage // compatibility with cocos creator + : window.localStorage; // RN does have window object at this point, but localStorage is not defined + + } catch (e) { + // ignore error + } + } + if (!storage) { + // mock localStorage if not available (Node.js or RN environment) + storage = { + cache: {}, + setItem: function (key, value) { this.cache[key] = value; }, + getItem: function (key) { this.cache[key]; }, + removeItem: function (key) { delete this.cache[key]; }, + }; } + return storage; }