摘要:實(shí)現(xiàn)模塊有其他頁面取被清空了被修改了引用此模塊并執(zhí)行拿到的函數(shù)存入獲取刪除清空此時基本實(shí)現(xiàn)了的基礎(chǔ)功能,,,,。
??sessionStorage是頁面級別的,僅在一個標(biāo)簽頁生效,如果同一個瀏覽器同時打開多個標(biāo)簽頁,且都訪問同一個域名,sessionStorage是不會在這多個標(biāo)簽頁共用的,即每個標(biāo)簽頁都有自己的sessionStorage。
??如果想突破這種局限,實(shí)現(xiàn)多tab頁共享存取數(shù)據(jù)同時又有sessionStorage暫存性的功能(關(guān)閉頁面時存在里面的數(shù)據(jù)也消失的功能),則需要自己通過一些技巧實(shí)現(xiàn)手動維護(hù)多tab頁面內(nèi)存儲某個對象的數(shù)據(jù),就是目前我想要講的方法。
??方法:通過給localStorage存儲數(shù)據(jù),可以在全瀏覽器內(nèi)捕獲一個storag的事件,然后再拿到該事件傳過來的數(shù)據(jù)進(jìn)行本地修改維護(hù),多個tab頁就以此通信,同步數(shù)據(jù)。
const MemoryStorage = class { constructor(){ this._data = {}; } setItem(k, v){ this._data[k] = v; MemoryStorage.dataSendHandler( this._data ); } getItem(k){ return this._data[k]; } removeItem(k){ delete this._data[k]; MemoryStorage.dataSendHandler( this._data ); } clear(){ this._data = {}; MemoryStorage.dataSendHandler( this._data ); } getData() { return this._data; } setData(data) { this._data = data } mergeToData(data) { for(let k in data) { this._data[k] = data[k] } } static dataSendHandler( data ){ localStorage.setItem("setMemoryStorage", JSON.stringify(data)); localStorage.removeItem("setMemoryStorage"); } static dataGetHandler(){ localStorage.setItem("getMemoryStorage", new Date().getTime()); localStorage.removeItem("getMemoryStorage"); } } const initMemoryStorage = function(){ var memoryStorage = new MemoryStorage(); window.addEventListener("storage",function(e){ if( e.newValue===null ) return false; if(e.key == "getMemoryStorage"){ console.log("有其他頁面取memory") MemoryStorage.dataSendHandler( memoryStorage.getData() ); } else if(e.key == "setMemoryStorage"){ let data = JSON.parse(e.newValue); if( isEmptyObj(data) ){ console.log("memory被清空了") memoryStorage.setData({}); }else{ console.log("memory被修改了") memoryStorage.mergeToData(data) } } }) if( isEmptyObj(memoryStorage.data) ){ MemoryStorage.dataGetHandler(); } return memoryStorage; } function isEmptyObj(obj){ for(let i in obj){ return false; } return true; } export default initMemoryStorage;
引用此模塊并執(zhí)行拿到的函數(shù)
import memory from "multitabstorage" window.memoryStorage = memory(); window.memoryStorage.setItem("Auth", "as00f0e058585856d"); //存入Auth var Auth = window.memoryStorage.getItem("Auth"); //獲取Auth window.memoryStorage.removeItem("Auth"); //刪除Auth window.memoryStorage.clear(); //清空storage
此時memoryStorage基本實(shí)現(xiàn)了sessionStorage的基礎(chǔ)功能,setItem, getItem,removeItem,clear。
github地址https://github.com/JhonMr/multitabstoragenpm引入
npm install multitabstorage
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/95854.html
摘要:前端存儲簡介一種在前端保存數(shù)據(jù)的思想。為了保證前端性能,一般不會保存大量數(shù)據(jù)。在手動刪除前一直存在關(guān)閉當(dāng)前頁面后被清除可存放大小與服務(wù)器通信每次都在頭部信息中。 前端存儲 簡介 一種在前端保存數(shù)據(jù)的思想。第一次在頁面中的保存數(shù)據(jù),那么從第二次開始就可以使用了??梢允褂玫姆椒ㄓ校? cookie localeStorage sessionStorage ie的userData web s...
摘要:算法題現(xiàn)在有一組數(shù)據(jù),一組因子,利用公式可以得到一個結(jié)果。和只能存儲字符串類型,對于復(fù)雜的對象可以使用提供的對象的和來處理應(yīng)用場景用于組件之間的傳值,,則主要用于不同頁面之間的傳值。例如表示數(shù)字到,表示匹配所有的大小寫字母。 1. 算法題:現(xiàn)在有一組數(shù)據(jù),一組因子a,b,c,利用公式 x*a+y*b+z*c可以得到一個結(jié)果。問怎樣可以求出因子a,b,c對結(jié)果的影響? 2. 介紹自己技術(shù)...
閱讀 1300·2023-04-25 19:33
閱讀 1184·2021-10-21 09:39
閱讀 3656·2021-09-09 09:32
閱讀 2634·2019-08-30 10:58
閱讀 1638·2019-08-29 16:17
閱讀 889·2019-08-29 15:29
閱讀 2902·2019-08-26 11:55
閱讀 2670·2019-08-26 10:33