【问题标题】:How to send API request on browser/tab close?如何在浏览器/标签关闭时发送 API 请求?
【发布时间】:2021-03-19 12:04:46
【问题描述】:

我正在尝试在关闭选项卡/浏览器时发送 API 请求,我尝试了卸载和 beforeUnload 处理程序,但它不起作用,我猜测 API 调用不会发生,因为选项卡/浏览器会立即关闭,并且没有'没有足够的时间提出请求,在使用调试器关键字进行测试期间一切正常,但并非没有。知道如何在关闭标签/浏览器之前拨打电话吗?

下面是我的代码

组件.ts

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
  title = 'admin-frontend';

  constructor(private loginService: LoginService) {}

  ngOnInit() {}

  @HostListener('window:unload', ['$event'])
  unloadHandler(event) {
    if (!!this.loginService.currentUser) {
      this.loginService.logout({});
    }
  }

  // вызов логаут когда клиент закрывает браузер или окно
  @HostListener('window:beforeunload', ['$event'])
  beforeUnloadHandler(event) {
    if (!!this.loginService.currentUser) {
      this.loginService.logout({});
    }
  }
}

service.ts

    logout(params) {
        return this.post('user/logout', { ...params }, true).subscribe(_ => {
            this.applicationId = null;
            this.userData.next(null);
            this.loginFacade.userData.next(null);
            this.storage.clear();
            this.user = undefined;
            this.router.navigate(['login']);
        })
    }

core.service.ts

  post<T>(url: string, param: any, withHeader: boolean = false): Observable<T> {
    if (withHeader) {
      const headers: HttpHeaders = new HttpHeaders({
        SessionId: this.user.sessionId,
      });
      return this.http.post<T>(`${this.apiUrl}/${url}`, param, {
        headers: headers,
      });
    } else {
      return this.http.post<T>(`${this.apiUrl}/${url}`, param);
    }
  }

【问题讨论】:

    标签: javascript angular browser dom-events


    【解决方案1】:

    您好,您可以使用此功能检测浏览器关闭

    window.onbeforeunload = function () {
        return "Do you really want to close?";
    };
    

    【讨论】:

    • 我不需要确认对话框
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2022-01-21
    • 2011-03-12
    • 1970-01-01
    相关资源
    最近更新 更多