6 년 후에이 질문을보고 난 후에도 여전히이 질문에 대한 충분한 답이 없다는 것을 알았습니다. 다음을 모두 달성해야합니다.
- 브라우저 또는 도메인의 모든 탭을 닫은 후 로컬 저장소 지우기
- 하나 이상의 탭이 활성 상태 인 경우 여러 탭에서 로컬 스토리지 유지
- 단일 탭을 다시로드 할 때 로컬 스토리지 유지
위의 내용을 달성하기 위해 각 페이지로드가 시작될 때이 자바 스크립트를 실행하십시오.
((nm,tm) => {
const
l = localStorage,
s = sessionStorage,
tabid = s.getItem(tm) || (newid => s.setItem(tm, newid) || newid)((Math.random() * 1e8).toFixed()),
update = set => {
let cur = JSON.parse(l.getItem(nm) || '{}');
if (set && typeof cur[tabid] == 'undefined' && !Object.values(cur).reduce((a, b) => a + b, 0)) {
l.clear();
cur = {};
}
cur[tabid] = set;
l.setItem(nm, JSON.stringify(cur));
};
update(1);
window.onbeforeunload = () => update(0);
})('tabs','tabid');
편집 : 기본 아이디어는 다음과 같습니다.
- 처음부터 시작할 때 세션 저장소에는라는 키에 임의의 ID가 할당됩니다.
tabid
- 그런 다음
tabs
키 tabid
를 1로 설정 한 객체를 포함하는 키로 로컬 스토리지 가 설정됩니다.
- 탭을 언로드하면 로컬 저장소
tabs
가 포함 된 객체로 업데이트됩니다tabid
가 0으로 설정된 .
- 탭을 다시로드하면 먼저 언로드되고 다시 시작됩니다. 세션 스토리지의 키
tabid
가 존재 tabs
하고 하위 키 가있는 로컬 스토리지 키도 존재하므로tabid
지워지지 않습니다.
- 브라우저가 언로드되면 모든 세션 저장소가 지워집니다. 세션 저장
tabid
을 재개하면 더 이상 존재하지 않으며 새로운 tabid
것이 생성됩니다. 로컬 저장소에는 이것에 대한 하위 키가 tabid
없으며 다른 키 도 없습니다.tabid
세션 (모든 세션이 닫 혔음)이 지워집니다.
- 새로 작성된 탭
tabid
에서 세션 스토리지에 새 탭 이 생성되지만 하나 이상의 tabs
[ tabid
]가 존재하므로 로컬 스토리지가 지워지지 않습니다.