From 8ff0d3bf24517600d618e9097a9506dc59abb631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=AB=E8=B0=B7=E5=89=91=E4=BB=99?= Date: Sat, 29 Feb 2020 02:01:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B6=85=E5=87=BAlocalStorage=E5=82=A8?= =?UTF-8?q?=E5=AD=98=E7=A9=BA=E9=97=B4=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script.js | 81 +++++++++++++++++++++++++++++++++++++++---- universal_function.js | 36 ++++++++++++++++++- 2 files changed, 110 insertions(+), 7 deletions(-) diff --git a/script.js b/script.js index 331220c3..dffaed82 100644 --- a/script.js +++ b/script.js @@ -17,6 +17,7 @@ var Cards; //怪物数据 var Skills; //技能数据 var currentLanguage; //当前语言 var currentDataSource; //当前数据 +var currentCkey; //当前的Ckey var interchangeSvg; //储存划线的SVG var interchangePath; //储存划线的线 var changeSwapToCopy; //储存交换“复制”和“替换” @@ -358,26 +359,94 @@ window.onload = function() return true; } }); - statusLine.classList.add("loading-mon-info"); + const sourceDataFolder = "monsters-info"; + statusLine.classList.add("loading-check-version"); GM_xmlhttpRequest({ method: "GET", - url:`monsters-info/mon_${currentDataSource.code}.json`, //Cards数据文件 + url: `${sourceDataFolder}/ckey.json`, //版本文件 onload: function(response) { - dealCardsData(response.response); + dealCkeyData(response.response); }, onerror: function(response) { let isChrome = navigator.userAgent.indexOf("Chrome") >=0; if (isChrome && location.host.length==0 && response.response.length>0) { console.info("因为是Chrome本地打开,正在尝试读取JSON"); - dealCardsData(response.response); + dealCkeyData(response.response); }else { - console.error("Cards JSON数据获取失败",response); + console.error("Ckey JSON数据获取失败",response); } } }); //处理返回的数据 + function dealCkeyData(responseText) + { + let CkeysObj; + try + { + CkeysObj = JSON.parse(responseText); + }catch(e) + { + console.log("Ckey数据JSON解码出错",e); + return; + } + currentCkey = CkeysObj.find(ckey=>ckey.code = currentDataSource.code); //获取当前语言的ckey + let lastCkeys = GM_getValue("PADDF-ckey"); //读取本地储存的原来的ckey + try + { + lastCkeys = JSON.parse(lastCkeys); + if (lastCkeys == null || !(lastCkeys instanceof Array)) + lastCkeys = []; + }catch(e) + { + console.log("上次的Ckey数据JSON解码出错",e); + return; + } + let lastCurrentCkeys = lastCkeys.find(ckey=>ckey.code = currentDataSource.code); + if (!lastCurrentCkeys) + { //如果未找到上个ckey,则添加个新的 + lastCurrentCkeys = { + code:currentDataSource.code, + ckey:{} + } + lastCkeys.push(lastCurrentCkeys); + } + + //GM_setValue("PADDF-ckey",JSON.stringify(CkeysObj)); + statusLine.classList.remove("loading-check-version"); + statusLine.classList.add("loading-mon-info"); + if (currentCkey.ckey.card == lastCurrentCkeys.ckey.card) + { + console.log("Cards ckey相等,直接读取已有的数据",currentCkey.ckey.card); + dealCardsData(GM_getValue(`PADDF-${currentDataSource.code}-cards`)); + }else + { + GM_xmlhttpRequest({ + method: "GET", + url:`${sourceDataFolder}/mon_${currentDataSource.code}.json`, //Cards数据文件 + onload: function(response) { + console.log("Cards ckey变化,储存新数据",currentCkey.ckey.card); + console.log(response.response.length) + GM_setValue(`PADDF-${currentDataSource.code}-cards`,response.response); + lastCurrentCkeys.ckey.card == currentCkey.ckey.card; + GM_setValue("PADDF-ckey", lastCkeys); + dealCardsData(response.response); + }, + onerror: function(response) { + let isChrome = navigator.userAgent.indexOf("Chrome") >=0; + if (isChrome && location.host.length==0 && response.response.length>0) + { + console.info("因为是Chrome本地打开,正在尝试读取JSON"); + dealCardsData(response.response); + }else + { + console.error("Cards JSON数据获取失败",response); + } + } + }); + } + } function dealCardsData(responseText) { try @@ -392,7 +461,7 @@ window.onload = function() statusLine.classList.add("loading-skill-info"); GM_xmlhttpRequest({ method: "GET", - url:`monsters-info/skill_${currentDataSource.code}.json`, //Skills数据文件 + url:`${sourceDataFolder}/skill_${currentDataSource.code}.json`, //Skills数据文件 onload: function(response) { dealSkillData(response.response); }, diff --git a/universal_function.js b/universal_function.js index 4cc67efe..08c64ec5 100644 --- a/universal_function.js +++ b/universal_function.js @@ -49,7 +49,41 @@ const GM_xmlhttpRequest = function(GM_param) { //发送数据 xhr.send(GM_param.data ? GM_param.data : null); }; - +//仿GM_getValue函数v1.0 +const GM_getValue = function(name, type){ + let value = localStorage.getItem(name); + if (value == undefined) return value; + if ((/^(?:true|false)$/i.test(value) && type == undefined) || type == "boolean") + { + if (/^true$/i.test(value)) + return true; + else if (/^false$/i.test(value)) + return false; + else + return Boolean(value); + } + else if((/^\-?[\d\.]+$/i.test(value) && type == undefined) || type == "number") + return Number(value); + else + return value; +} +//仿GM_setValue函数v1.0 +const GM_setValue = function(name, value){ + localStorage.setItem(name, value); +} +//仿GM_deleteValue函数v1.0 +const GM_deleteValue = function(name){ + localStorage.removeItem(name); +} +//仿GM_listValues函数v1.0 +const GM_listValues = function(){ + var keys = []; + for (let ki=0, kilen=localStorage.length; ki