Хранилище сеансов не очищается при дублировании вкладок - PullRequest
0 голосов
/ 03 июля 2019

Я работаю над сборкой приложения Angular с использованием Angular 7. Мы не позволяем пользователям открывать наше приложение на нескольких вкладках браузера, и я использую LocalStoage + SessionStorage, чтобы это произошло.

app.component.ts

//This function is being called on component loading
register_tab_GUID() {
// detect local storage available
if (typeof (Storage) !== "undefined") {
  // get (set if not) tab GUID and store in tab session
  if (sessionStorage["tabGUID"] == null){
     sessionStorage["tabGUID"] = this.tab_GUID();
  } 
  var guid = sessionStorage["tabGUID"];

  // add eventlistener to local storage
  window.addEventListener("storage", (e) =>{

  if (e.key == 'tabGUID') {
     if (e.oldValue != e.newValue) {
        this._api.logout();
        localStorage.setItem('multiTabs' , 'true');
        this.router.navigate(['multi-tabs-not-allowed'])
      }
    }
  }, false);

      // set tab GUID in local storage
      localStorage["tabGUID"] = guid;
    }
  }



tab_GUID() {
  function s4() {
    return Math.floor((1 + Math.random()) * 0x10000)
      .toString(16)
      .substring(1);
  }
  return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
  s4() + '-' + s4() + s4() + s4();
}

Все отлично работает, когда пользователь открывает новую вкладку и пытается открыть приложение.Но когда пользователь дублирует уже открытую вкладку, я обнаружил, что SessionStorage не очищается и в нем сохраняются те же данные, что и в предыдущей вкладке, которую мы дублировали.

Duplicating Tab

Iпопытался найти это поведение SessionStorage, но не смог найти ничего, связанного с этим.Это точное поведение или я делаю что-то не так?

...