하이브리드 앱 뒤로가기 - haibeulideu aeb dwilogagi

하이브리드 앱 뒤로가기 - haibeulideu aeb dwilogagi

[안드로이드, 폰갭] 자바스크립트로 뒤로 가기 제어

첫번째 방법,

<script>

history.pushState(null, null, location.href)

window.onpopstate = function(event)

alert("여기에 작성하고 싶은 코드를 작성하면 됩니다!");

}

</script>

두번째 방법,

<script>

history.pushState(null, null, "#noback");

$(window).bind("hashchange", function(){

history.pushState(null, null, "#noback");

alert(1);

});

</script>

세번째 방법,

기능설명 : iframe으로 화면에 띄운 구조의 웹앱(/http://doctorson0309.tistory.com/a.jsp)일 경우,

하이브리드 html(예를들면, index.html)에서 아래의 코드를 입력하면

웹앱에서 먹던 history.back()등.. 뒤로가기 스크립트를 씹어버리고 

앱이 종료될 수 있는 하이브리드(Cordova)기능을 수행한다.

...

<div id="search_iframe"></div>

...

function onDeviceReady() {

document.addEventListener("backbutton", onBackKeyDown, true);

createIframe(); //아이프레임으로 띄운 상태

}

function onBackKeyDown() {

navigator.notification.confirm('앱을 종료하시겠습니까?', onBackKeyDownMsg, '메세지', '취소, 종료');

}

function onBackKeyDownMsg(button) {

if(button == 2) {

navigator.app.exitApp();

}

}

function createIframe(){

var listHtml = "";

listHtml+="<iframe id='iframe1' name='iframe1' style='border:none;frameborder='0'>"

  + "  </iframe>";

$('#search_iframe').append(listHtml);

document.uniqueKeyForm.action = "서버 URL";

document.uniqueKeyForm.target = "iframe1";

document.uniqueKeyForm.submit();

}

혹시 질문이 있다면 댓글 남겨주세요 ^  ^

도움이 되었기를 바랍니다!! 감사합니다. 

출처 : http://wp.galactica.co.kr/112

출처 : http://hangunsworld.com/blog/1920

�ȵ���̵� ����� ������ �ߴµ� �ڷΰ��� �ҽÿ� �̺�Ʈ�� �����ؾ� �ϴµ�
�Ʒ�ó�� �ϸ� ����������� ������ ������ �ۿ����� �ȵǴ°� �����ϴ�

  history.pushState(null, null, location.href);
        window.onpopstate = function(event) {
            //����
        }
�ۿ��� �����Ҽ� ���� ��Ȳ�Դϴ�.
Ȥ�� �ٸ� ����� ������ �ñ��մϴ�

  • �亯ä����
    하이브리드 앱 뒤로가기 - haibeulideu aeb dwilogagi
    34%
  • ��õ 0 �� ������ ������ �峪��?
  • ����õ 0 �� ������ ������ �ȵ���.

을 넣으면 backbutton 이 있는 디바이스 (IOS 제외) 에서 이벤트를 잡아 내실 수 있습니다.
이후에 다양한 방법으로 backbutton 을 컨트롤해서 페이지를 나타내시면 될 것 같습니다.
참고로 저는 페이지마다 $(location).attr('href', '#home'); 방법으로
'#home' 이라는 링크를 붙이고 var hash = location.hash.replace(/^#/, '');  으로 hash 값을 체크하여 페이지를 구분하여 컨트롤하였습니다.

분명 더 쉬운 방법으로 페이지 이동하는 방법이 있지만 안드로이드나 IOS 와 다르게 이런 컨트롤을 저는 하나하나 해보았습니다.
물런 저는 결과적으로 시간이 많이 걸렸지만 덕분에 훨씬 창의적으로 다양한 방법을 생각해보고 문제를 해결할 능력이 향상되었다고 생각합니다^^
시간이 단축하시려면 아이오닉 프레임워크나 제이쿼리 모바일을 참고 하시는것도 좋은 방법이라고 생각합니다.

코르도바(cordova)는 웹기술로 디바이스 컨트롤을 가능하게 만들어줍니다.
backbutton  외에도 다양하게 디바이스를 컨트롤하는 메소드가 많이  있습니다.
아래 사이트에 가보시기 강추합니다~!

하이브리드앱(웹뷰) 이용시 뒤로가기 문제 문의

  • 목록

본문

게시판에 이용할 경우 대개 아래와 같은 흐름으로 진행됩니다.
1. A.php 파일에 있는 게시판 링크를 클릭해 게시판 목록으로 이동한다.
2. 특정 글을 조회한다. (한번이든, 여러번이든)
3. 글쓰기 버튼을 클릭하여 글쓰기 페이지로 이동한다.
4. 글을 쓴다.
5. 글쓰기가 완료되면 글 조회(또는 목록)페이지에 이동된다.


PC의 경우 사람들이 별 신경을 안쓰지만 모바일인 경우 아이폰이 물리 뒤로가기 버튼이 없는 관계로 페이지 상단 또는 하단에 뒤로가기 버튼을 HTML로 만들게 되는데 
단순히 뒤로가기 버튼에 history.back() 을 호출하게 만들면 바로 이전페이지로만 이동하여 아래의 경우 오류라고 생각하는 사람이 많습니다.

1. A.php 파일에 있는 게시판 링크를 클릭해 게시판 목록으로 이동한다.
2. 글을 조회한다
3. 리스트로 이동한다
4. 다른 글을 조회한다
5. 글을 쓴다
6. 글쓰기가 완료되면 글 조회(또는 목록)페이지에 이동된다.

위 흐름에서 계속 뒤로가기 버튼을 클릭하게 되면 3~4번 과정 때문에 3번에서 뒤로가기를 하게 되면 A.php페이지로 이동하지 않고 2번 페이지로 이동하게 되는데 3번에서 뒤로가기 할 때 A.php 파일로 이동하도록 처리하는 방법이 있을까요?
3~4번 과정은 여러번 발생할 수도 있어서 단순히 history.go(n)만으로는 해결이 안될 것 같습니다.

지금은 페이지 접속할 때마다 URL을 확인하여 if문으로  history.back()을 할지, history.go(n)를 할지 URL이동을 시킬지 구분시키고 있습니다.


<!-- 뒤로가기 -->
<? 
if($bo_table == 'one' || ($bo_table == 'notice' && $wr_id == '')){
    $bstep = 1;
    if($bo_table == 'one' && $pn != 'write' && $is_write)
        $bstep = 3;
?>
<div id="header">
    <? if(!$is_ios_app || $pn != 'register_member'){?><span class="top_back" onclick="history.go(-<?=$bstep?>); return false;"><img src="<?php echo G5_THEME_URL ?>/mobile/shop/images/top_back.png" alt="" width="40"/></span><? } ?>
</div>
<? } ?>
<!-- 뒤로가기(페이지 이동) -->
<? 
$back_url = '';
if($bo_table == 'coop')
    $back_url = G5_THEME_URL.'/mobile/shop/09/option.php';
else if($pn == 'search_result')
    $back_url = G5_THEME_URL.'/mobile/shop/01/search_list.php';
if($pn == 'search_result' || $bo_table == 'coop'){
?>
<div id="header">
    <span class="top_back" onclick="location.href='<?=$back_url?>#'; return false;"><img src="<?php echo G5_THEME_URL ?>/mobile/shop/images/top_back.png" alt="" width="40"/></span>
</div>
<? } ?>

답변 2

현재 페이지가 아닌 다른페이지 유입이라면

뒤로가기 또는 백스페이스 등 액션이 확인되면

바로 리스트로 이동하도록 스크립트를 짜시면 될것 같은데요??

실제로 모달창닫기 부분에 해당 방법을 적용하여 사용중입니다.

뒤로가기를 만드시는 이유가 뭘까요?

그냥 보기 페이지에서는 A페이지 또는 목록으로 바로 이동하는 버튼을 넣으시면 될것 같은데요..

답변 감사합니다.
이게 문제가 되는 것이 A페이지에서만 리스트를 통해 글을 본다면 답변 주신대로 처리하면 되나, A이외 다른 페이지의 링크를 통해 바로 글을 볼 수 있는 경우도 있고, 다른 페이지의 링크를 통해 리스트로 들어올 수도 있기 때문에 뒤로가기 버튼을 누르면 이동하는 페이지가 조건에 따라 변경되야 합니다.