JavaScript
웹에서 안드로이드 운영체제 뒤로가기 버튼 제어
갈잃자
2023. 9. 13. 17:41
드디어 해결했습니다.. ㅠㅠ
말 그대로 웹에서 안드로이드 운영체제 기반의 기기에만 있는 뒤로가기 버튼을 제어했습니다.
대충 설명 하자면,
웹에서 안드로이드 운영체제 뒤로가기 버튼을 막는건 안됩니다. 원래는..
그래서 구글링과 여러 사이트를 찾으면서 고안한 결과,
웹 뒤로가기 버튼을 감지하고 그걸 제어하는 거죠.
여러 방법들을 이용해 봤습니다.
1. 데코레이터를 이용(@HostListener('popstate'))
2. window.onpopstate
3. window.addListener
각 자 프로젝트마다 적용되는 게 다르겠지만, 저는 window.addListener를 이용했습니다.
1. 우선 함수를 선언합니다.
// angular.js 를 이용해서 작업했기 때문에, angular 식으로 쓸게요.
// react.js 같은 경우엔, useState와 비슷한 작업을 하는 라이프사이클 훅이라고 생각하면 됩니다.
ngOnInit(): void {
this.onBackbutton(event);
}
2. 함수 내 로직을 작성
// 전체적인 코드를 설명하자면, 뒤로가기 버튼을 눌렀을 때, confirm을 이용해서 한번 더 확인하고,
// 뒤로 보내주냐, 아니면 뒤로가기를 막냐 입니다.
a: boolean = false;
onBackbutton(event) {
const self = this; // window 내에선 this 가 먹히지 않아서 새로 선언 해야됩니다.
history.pushState(null, null, location.href); // 우선 첫 뒤로가기를 막아야 함.
window.addEventListener('popstate', function(event) { // popstate가 일어날 때마다 함수가 적용되게끔 이벤트리스너를 선언
console.log('popstate!');
if (!self.a) {
var confirmationMessage = confirm('뒤로가기 실행 시, 모든정보가 초기화됩니다. 그래도 진행 하시겠습니까?'); //confirm문
if (confirmationMessage) { // 확인 버튼을 눌렀다면?
self.a = true;
this.history.back(); // 뒤로 보내기 (history는 this를 써야합니다.) 이유는 (property) Window.history: History 이기 때문
} else { // 취소 버튼을 눌렀다면?
this.history.pushState(null, null, location.href); // 뒤로가기를 막아줍니다.
self.a = false;
return null;
}
}
});
}
어려운 건 아닌데, 며칠 고생해서 찾았어요..
요약 하면,
웹에서 안드로이드 운영체제의 뒤로가기를 막으려면 웹 뒤로 가기를 막아야한다.
그걸 window.addEventListener로 감지하고, history.pushState를 이용해서 막거나, history.back을 이용해서 뒤로 보내주어야 합니다.