From 4006e84ad3a848e1e97ea6eb1defa29b23184edb Mon Sep 17 00:00:00 2001 From: qiang Date: Sat, 18 Jan 2020 18:59:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=20app-v3=20=E4=BB=8E?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E6=A8=A1=E5=BC=8F=E8=AF=BB=E5=8F=96=20storag?= =?UTF-8?q?e=20=E6=95=B0=E6=8D=AE=E6=A0=BC=E5=BC=8F=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/service/api/storage/storage.js | 44 +++++++++++++++++-------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/src/core/service/api/storage/storage.js b/src/core/service/api/storage/storage.js index 46fef8087..ecd87aac6 100644 --- a/src/core/service/api/storage/storage.js +++ b/src/core/service/api/storage/storage.js @@ -1,6 +1,21 @@ const STORAGE_DATA_TYPE = '__TYPE' const STORAGE_KEYS = 'uni-storage-keys' +function parseValue (value) { + const types = ['object', 'string', 'number', 'boolean', 'undefined'] + try { + const object = JSON.parse(value) + if (types.indexOf(object.type) >= 0) { + const keys = Object.keys(object) + if (keys.length === 2 && 'type' in object && 'data' in object) { + return object.data + } else if (keys.length === 1 && 'type' in object) { + return '' + } + } + } catch (error) { } +} + export function setStorage ({ key, data @@ -11,6 +26,11 @@ export function setStorage ({ data: data }) try { + if (type === 'string' && parseValue(value) !== undefined) { + localStorage.setItem(key + STORAGE_DATA_TYPE, 'String') + } else { + localStorage.removeItem(key + STORAGE_DATA_TYPE) + } localStorage.setItem(key, value) } catch (error) { return { @@ -40,22 +60,18 @@ export function getStorage ({ } } let data = value - try { - const object = JSON.parse(value) + const type = localStorage.getItem(key + STORAGE_DATA_TYPE) + if (!type) { + // 兼容H5和V3初期历史格式 + const object = parseValue(value) + data = object !== undefined ? object : data + } else if (type !== 'String') { // 兼容App端历史格式 - const type = localStorage.getItem(key + STORAGE_DATA_TYPE) - if (!type) { - const keys = Object.keys(object) - if (keys.length === 2 && 'type' in object && 'data' in object) { - data = object.data - } else if (keys.length === 1 && 'type' in object) { - data = '' - } - } else if (type !== 'String') { - data = object + try { + data = JSON.parse(value) data = typeof data === 'string' ? JSON.parse(data) : data - } - } catch (error) { } + } catch (error) { } + } return { data, errMsg: 'getStorage:ok' -- GitLab