Я хочу сохранить данные о вкладках моего приложения. При фактической реализации он должен хранить свидетельства вкладок в localStorage следующим образом: [{"tabId": 1}, {"tabId": 2}, ...]
Работает нормально, пока вы откройте новые вкладки с небольшой задержкой (просто дождитесь полной загрузки). Но это не сработает, если вы откроете вкладки одну за другой очень быстро (localStorage просто будет постоянно обновлять sh), и если я закрою браузер и снова открою его, вы увидите, что localStorage не удалил все предыдущие элементы (открытые вкладки).
window.addEventListener('load', function(event){
let tabs = JSON.parse(window.localStorage.getItem('Tabs'));
if (tabs && tabs.length) {
tabs.push({tabId: (tabs[tabs.length - 1].tabId + 1)});
window.localStorage.setItem('Tabs', JSON.stringify(tabs));
window.sessionStorage.tabId = tabs[tabs.length - 1].tabId;
} else {
window.localStorage.setItem('Tabs', JSON.stringify([{tabId: 1}]));
window.sessionStorage.tabId = 1;
}
});
window.addEventListener('storage', function(event){
window.localStorage.setItem('Tabs', event.newValue);
});
window.addEventListener('beforeunload', function(){
let tabs = JSON.parse(window.localStorage.getItem('Tabs'));
if (tabs && tabs.length) {
for (let index = 0; index < tabs.length; index++) {
if (tabs[index].tabId == window.sessionStorage.tabId) {
tabs.splice(index, 1);
window.localStorage.setItem('Tabs', JSON.stringify(tabs));
window.sessionStorage.removeItem('Tabs');
break;
}
}
}
});
PS: протестировано на Chrome 80.0