android
webview 로그인 후 뒤로가기 / 웹페이지를 사용할 수 없음 / 리다이렉트
관절분리
2017. 3. 2. 15:14
반응형
http://blog.acronym.co.kr/549 리다이렉트일 경우
전체댓글수 7
thisgun 13-01-21 11:04
질문자가 질문 해결에 도움이 되어 선택한 답변입니다.
소스보기
- 아이폰은 잘 모르구요... 안드로이드에서 제가 했던 방법입니다.
WebView webview; //웹뷰 선언
WebBackForwardList mWebBackForwardList = webview.copyBackForwardList(); //웹뷰의 히스토리 목록을 가져온다.
String historyUrl = mWebBackForwardList.getItemAtIndex(mWebBackForwardList.getCurrentIndex()-1).getUrl(); //웹뷰의 뒤로가기 url을 구한다.
private static final Set<String> VALUES = new HashSet<String>(Arrays.asList(
new String[] {
"/member/logout.php",
"/member/login.php",
"/member/login_process.php",
"/local/request.php"
}
)); //뒤로가기 막기 url을 배열변수에 넣는다.
boolean bool_value = VALUES.contains(historyUrl); //배열변수에 해당값이 들어있으면 true, false
if(bool_value){
webview.loadUrl("http://도메인네임.com/");
} else {
webview.goBack(); //뒤로가기
}
위의 과정은 안드로이드에서 KeyEvent.KEYCODE_BACK 이벤트가 일어났을때 처리한거구요. 시작페이지에서 뒤로가기 누르면 앱을 종료 할수 있도록 처리도 해 놓아야 합니다. 그리고 웹에서도 kionpark님이 답변한 것처럼 처리도 해 놓아야 합니다.
아래는 제가 안드로이드 뒤로가기 할때 처리한 소스입니다.
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK){
String current_Url = webview.getUrl();
boolean bool_current_val = current_Url.equalsIgnoreCase("http://도메인네임.com/");
//Log.e("state1", current_Url+"");
//Log.e("state1", bool_current_val+"");
if(webview.canGoBack() && !bool_current_val){
WebBackForwardList mWebBackForwardList = webview.copyBackForwardList();
String historyUrl = mWebBackForwardList.getItemAtIndex(mWebBackForwardList.getCurrentIndex()-1).getUrl();
//Log.e("state1", historyUrl+"");
boolean bool_value = VALUES.contains(historyUrl);
if(bool_value){
webview.loadUrl("http://도메인네임.com/");
} else {
webview.goBack();
}
return true;
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(_activity);
builder.setMessage("종료하시겠습니까?")
.setTitle("Quit")
.setCancelable(false)
.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
android.os.Process.killProcess(android.os.Process.myPid() );
}
}).setPositiveButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
return super.onKeyDown(keyCode, event);
} 영쥬 13-08-08 13:14
소스보기
- 제가질문드린건아니지만..................... 안드로이드쪽에서 문제가 있어서 찾던중이엇는데........ 이 소스 보고 해결됐습니다. 감사합니당 !!! ^^
나락 13-01-20 23:03
소스보기
- 방법은 많아보여여...
세션시간을 100년으로 잡으시면 되기도 하겠고....
근데 다른 더 좋은 방법도 있을거같아여 ^^; 하이랭커 13-01-21 00:28
소스보기
- 세션말구요 ㅠㅠ.... 뒤로가기 버튼이 안먹혔으면 좋겠거든요...
반응형