【问题标题】:Last browser tab close to logout angular application关闭角度应用程序的最后一个浏览器选项卡
【发布时间】:2019-11-17 17:13:41
【问题描述】:

我想在关闭最后一个浏览器选项卡时注销我的应用程序。我在我的应用组件中添加了 @HostListener。在构造函数中安慰 tabcount 给出了打开选项卡的准确计数,但无法理解为什么我的条件不符合我的要求。目前它总是让我退出。

app.component.ts

constructor(
    private authService: AuthService
) {
    console.log(tabCount.tabsCount());
}

// Handle session on browser tab close . . .
@HostListener('window:beforeunload', ['$event'])
public beforeunloadHandler($event) {
    console.log(tabCount.tabsCount());
    if (localStorage.getItem('rememberMe') == null){
        if (tabCount.tabsCount() == 1){
            console.log(tabCount.tabsCount());
            this.authService.logout();
        }
    }
}

退出方式:

logout(): void {
    $('.modal').modal('hide');
    localStorage.removeItem('accessToken');
    localStorage.removeItem('session_data');
    this.router.navigate(['/login']);
}

【问题讨论】:

    标签: angular tabs cross-browser onbeforeunload


    【解决方案1】:

    如果没有更多信息(tabsCount 实现会很有帮助),我只能建议以下几点:

    1. 同时打开 3 个标签。当您关闭第三个时,它会注销您吗?
    2. 如果您刷新最后打开的选项卡,这将不起作用。此事件会在您关闭窗口时触发,并且在您刷新它时也会触发,因此这很可能会给您的应用程序带来一些副作用。

    我的猜测是你使用本地存储like here来获取选项卡的数量,并且计算出了问题。

    【讨论】:

    • 有时关闭/刷新第二个/第三个选项卡会让我退出。我更新了注销方法。你能建议我任何合适的方式来满足这个要求吗?
    • 忘记 localStorage.getItem('rememberMe')。这只是对记住我功能的检查。
    猜你喜欢
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-27
    • 2019-05-13
    • 1970-01-01
    相关资源
    最近更新 更多