[Framework7] 안드로이드 환경에서 백버튼 앱처럼 동작하게 하기
Framework7 웹 앱을 안드로이드 환경에서 백 버튼이 앱처럼 동작하도록 구현하는 방법을 설명합니다.
기존의 프레임워크7 웹앱을 안드로이드에서 구동시킬 때 백버튼을 누르면 앱이 종료되는 문제가 있었습니다.
안드로이드 사용자는 대부분 앱 사용시 백버튼을 습관처럼 사용하기 때문에 이를 잡아주는 것이 중요했는데요.
안드로이드 네이티브 코드에서 모바일 백버튼을 웹에서 백버튼과 동일시 하기 때문에
웹의 백버튼을 js로 컨트롤 해주면 해당 마치 실제 앱처럼 백버튼을 잡을 수 있습니다.
먼저 pushState가 페이지가 넘어갈 때 마다 쌓이도록 합니다.
var app = new Framework7({
on: {
pageInit(page) {
window.history.pushState('forward', null, '/#' + page.name);
}
}
}
});
이렇게 하면 문제점이 하나 있습니다. 다른 페이지로 넘어 갈 때마다 쌓이긴 하지만, 다시 root_path 로 돌아오는 경우에 pushstate history가 남아있지 않아 앱이 종료 되게 됩니다.
이를 해결해주기 위해 root_path 의 view 파일아래에 스크립트로 코드를 넣어줍니다.
window.history.pushState('forward', null, '/#' + $('.page-current').data('name'));
이렇게 처리 됐다면 푸시스테이트 히스토리를 쌓아주고 이를 웹의 백버튼을 누를 때마다 페이지는 벗겨주는 느낌으로 코드를 작성하시면 됩니다.
저는 _app.html.erb 파일에
jQuery(document).ready(function($) {
if (window.history && window.history.pushState) {
$(window).on('popstate', function() {
console.log('popstate');
if (($$('#leftpanel').hasClass('active')) || ($$('.panel').hasClass('panel-active'))) {
app.panel.close();
}
else if ($$('.modal-in').length > 0) {
app.dialog.close();
app.popup.close();
}
else if ($(".page-current").data("name") == 'home-index') {
window.history.back();
}
else {
console.log('back');
mainView.router.back();
}
});
}
});
이렇게 작성해주었습니다.
dialog 나 photoBrowser , popup, panel 등이 모바일에 떠있을 때 백버튼을 누르면 삭제시켜주거나 뒤로가기를 눌렀을 때 앱이 종료되는 것이아닌 쌓여있던 이전의 history page로 넘어가게끔 했습니다.
이렇게 코드를 작성하시면 정말 안드로이드 네이티브 느낌이 나는 Framework7을 이용하실 수 있습니다.
이것도 읽어보세요